java中对象对象的创建过程,类的加载过程,对象在内存中的存储形式
java-对象
众所周知,java是一门典型的面向对象编程语言,下面来分析分析
1、对象在内存中的存储形式
对象在栈中是以地址的形式存放,堆中存放的是基本数据类型与引用数据类型的地址,方法区存放的是引用数据类型
- 下面以一个猫对象为例,所示对线在jvm存储的示意图
- 对象中的属性
属性=成员变量,属性是类中的一个组成部分
2、java中无参构造的意义
在继承的时候,子类的构造方法必然会调用父类的构造方法,如果子类的构造方法没有指定调用父类的构造方法,子类在实例化子类时,会默认调用父类的无参构造,此时父类中没有无参构造,就会编译报错!
3、对象中方法在内存中的调用机制
- 当程序执行到方法时,就会开辟一个独立的空间(栈空间)
- 当方法执行完毕时,或者执行到return语句时,就会返回
- 返回到调用方法的地方
- 返回后,继续执行方法后面的代码
4、函数重载
- 记住一个就好了,那就是println的重载,println可以输出数字、字符串、字符等等,这就是使用到了函数重载
- 特性:形成列表不同、方法名相同、与返回值无关;便于接口编程,减少起名的麻烦。
5、可变参数的使用
- 本质就是一个数组
- 一个形参列表中,只能有一个可变参数的存在
案例:
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);
流程分析:
-
加载Person类信息(Person.class) , 只会加载一次
-
在堆中分配空间(地址)
-
完成对象初始化,【3.1默认初始化 age = 0, name = null ,
3.2 显示初始化: age = 90 , name = null
3.3 构造器初始化 age = 20 , name = 小王 】
-
在对象在堆中的地址,返回给p (p是对象名,也可以理解成对象的引用)
7、this的使用
- 表示当前对象
- 哪儿个对象调用,this就指向哪儿个对象
- this只能在类定义的方法中使用
- 只能在构造器中进行调用
转载自:https://juejin.cn/post/7244407068110798905