Java中对象的使用和内存图解

举报
共饮一杯无 发表于 2022/10/15 10:57:49 2022/10/15
【摘要】 对象的使用 对象的使用格式创建对象:类名 对象名 = new 类名();使用对象访问类中的成员:对象名.成员变量;对象名.成员方法();对象的使用格式举例: public static void main(String[] args) { // 1. 导包。 // 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包...

对象的使用

对象的使用格式

创建对象:

类名 对象名 = new 类名();

使用对象访问类中的成员:

对象名.成员变量;
对象名.成员方法();

对象的使用格式举例:

    public static void main(String[] args) {
        // 1. 导包。
        // 我需要使用的Student类,和我自己Demo02Student位于同一个包下,所以省略导包语句不写

        // 2. 创建,格式:
        // 类名称 对象名 = new 类名称();
        // 根据Student类,创建了一个名为stu的对象
        Student stu = new Student();

        // 3. 使用其中的成员变量,格式:
        // 对象名.成员变量名
        System.out.println(stu.name); // null
        System.out.println(stu.age); // 0
        System.out.println("=============");

        // 改变对象当中的成员变量数值内容
        // 将右侧的字符串,赋值交给stu对象当中的name成员变量
        stu.name = "赵丽颖";
        stu.age = 18;
        System.out.println(stu.name); // 赵丽颖
        System.out.println(stu.age); // 18
        System.out.println("=============");

        // 4. 使用对象的成员方法,格式:
        // 对象名.成员方法名()
        stu.eat();
        stu.sleep();
        stu.study();
    }

成员变量的默认值

数据类型 默认值
基本类型 整数(byte,short,int,long) 0
浮点数(float,double) 0.0
字符(char) \u0000’
布尔(boolean) false
引用类型 数组,类,接口 null

对象内存图

一个对象,调用一个方法内存图

image.png

通过上图,我们可以理解,在栈内存中运行的方法,遵循"先进后出,后进先出"的原则。变量p指向堆内存中
的空间,寻找方法信息,去执行该方法。
但是,这里依然有问题存在。创建多个对象时,如果每个对象内部都保存一份方法信息,这就非常浪费内存
了,因为所有对象的方法信息都是一样的。那么如何解决这个问题呢?请看如下图解。

两个对象,调用同一方法内存图

image.png

对象调用方法时,根据对象中方法标记(地址值),去类中寻找方法信息。这样哪怕是多个对象,方法信息
只保存一份,节约内存空间。

一个引用,作为参数传递到方法中内存图

image.png

引用类型作为参数,传递的是地址值。

成员变量和局部变量区别

变量根据定义位置的不同,我们给变量起了不同的名字。如下图所示:
image.png

  • 在类中的位置不同
    • 成员变量:类中,方法外
    • 局部变量:方法中或者方法声明上(形式参数)
  • 作用范围不一样
    • 成员变量:类中
    • 局部变量:方法中
  • 初始化值的不同
    • 成员变量:有默认值
    • 局部变量:没有默认值。必须先定义,赋值,最后使用
  • 在内存中的位置不同
    • 成员变量:堆内存
    • 局部变量:栈内存
  • 生命周期不同
    • 成员变量:随着对象的创建而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。

保持热爱,奔赴下一场山海。🏃🏃🏃

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。