likes
comments
collection
share

java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式

作者站长头像
站长
· 阅读数 83

java-对象

众所周知,java是一门典型的面向对象编程语言,下面来分析分析

1、对象在内存中的存储形式

对象在栈中是以地址的形式存放,堆中存放的是基本数据类型与引用数据类型的地址,方法区存放的是引用数据类型

  • 下面以一个猫对象为例,所示对线在jvm存储的示意图

java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式

  • 对象中的属性

属性=成员变量,属性是类中的一个组成部分

2、java中无参构造的意义

在继承的时候,子类的构造方法必然会调用父类的构造方法,如果子类的构造方法没有指定调用父类的构造方法,子类在实例化子类时,会默认调用父类的无参构造,此时父类中没有无参构造,就会编译报错!

3、对象中方法在内存中的调用机制

  1. 当程序执行到方法时,就会开辟一个独立的空间(栈空间)
  2. 当方法执行完毕时,或者执行到return语句时,就会返回
  3. 返回到调用方法的地方
  4. 返回后,继续执行方法后面的代码

java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式

4、函数重载

  • 记住一个就好了,那就是println的重载,println可以输出数字、字符串、字符等等,这就是使用到了函数重载
  • 特性:形成列表不同、方法名相同、与返回值无关;便于接口编程,减少起名的麻烦。

5、可变参数的使用

  1. 本质就是一个数组
  2. 一个形参列表中,只能有一个可变参数的存在

案例:

public static void main(String[] args) {
    a(1,2,3,4);
}

public static void a(int ...sums) {
    for (int i = 0; i < sums.length; i++) {
        System.out.println(sums[i]);
    }
}

5、作用域

全局变量不赋值,有默认值

局部变量必须赋值,没有默认值;

属性和局部变量可以重名,就近原则;

6、对象创建的流程分析

案例:

class Person  {
    int age = 90;
    String naem ;
    Person (String n, int a ) {
        name = n;
        age = a;
    }
}
Person p = new Person("小王",20);

流程分析:

  1. 加载Person类信息(Person.class) , 只会加载一次

  2. 在堆中分配空间(地址)

  3. 完成对象初始化,【3.1默认初始化 age = 0, name = null ,

    ​ 3.2 显示初始化: age = 90 , name = null

    ​ 3.3 构造器初始化 age = 20 , name = 小王 】

  4. 在对象在堆中的地址,返回给p (p是对象名,也可以理解成对象的引用)

java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式

7、this的使用

  • 表示当前对象

java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式

  • 哪儿个对象调用,this就指向哪儿个对象
  • this只能在类定义的方法中使用
  • 只能在构造器中进行调用
转载自:https://juejin.cn/post/7244407068110798905
评论
请登录