木 头 课 堂
小 木 正 文——————————————
❶对象实例化过程
——————————————
理解Java中对象实例化过程是很重要的,实例化过程主要步骤如下:
第1步:在创建类之前,检查类是否加载(是将硬盘上的.class文件加载到内存中), 如果没有加载就加载这个类,在这个类加载之前要加载所有父类。
Java运行时采用的策略:懒惰式加载(按需加载) :如果第一次用到就加载,只加载一次。通过CL ASSPATH指定的路径寻找类文件(.class), 加载以后是一个对象,类型是Class。
第2步:在内存堆中分配对象空间。递归分配所有父类和子类属性空间。
属性默认自动初始化。自动初始化为"0"值。
第3步:进行属性的赋值。
第4步:递归调用父类构造器。(默认调用父类无参数构造器! )
第5步:调用本类构造器。
第1步:检查并加载类首先检查内存中Koo有没有加载,如果Koo没有加载会加载Koo并加载父类Foo。
第2步:在内存堆中分配对象空间先递归的分配父类型空间(Foo) : int a=0 (int类型空间, 默认值为0)再分配子类型空间(Koo) : int b= 0。
第3步:进行属性的赋值。
第4步:递归调用父类构造器。
第5步:调用本类构造器。
new运算:创建对象实例(共3步)
第1步根据类的属性在堆中分配对象空间,并且自动初始化实例变量。
第2步根据参数类型调用构造器。
注: this编译时不存在,运行时才出现。
第3步new运算返回对象的引用地址。
Java的内存管理与分配
1、栈是一块Java使用内存区域,使用的方式: LIFO(后来者居上)。
2、堆也是一块Java使用内存区域,使用方式:随机分配。
局部变量与堆对象空间分配
1、Java局部变量和方法参数在栈中分配,大小是按照变量的类型分配。
2、对象在堆中分配,按照类中声明属性(实例变量)分配空间。
变量类型与分配
1、变量分为:基本类型和引用类型。
2、基本类型变量的空间大小:就是基本类型的空间大小,值是基本类型的值。
3、引用变量的值是一个对象的地址值,引用变量通过地址引用了一个堆对象。
4、引用类型变量的占用空间大小和值管理是"透明的(不可看见)"由Java系统管理:变量占用空间以及值的管理,都是透明的。
——————————————
❶构造器的作用
——————————————
构造器(构造方法)的作用
构造器(构造方法)的作用:用来描述对象的创建过程的。
举例说明:
Java中的构造器
构造方法(构造器)要点:
1、Java中的构造器(构造方法)声明在类内部。
2、方法名与类名一致的方法叫构造方法。
3、构造方法不能声明返回值类型。
4、构造方法可以包含参数,参数一般是创建对象实例必须依赖的条件(前提条件)。
下面我们写了一个带参数的构造器(构造方法),如下所示:
public class Point2 { int x; int y;/***构造器* @param x* @param y*/ public Point2(int x, int y) { this.x= x; this.y=y; }}
注:常用写法,this的含义后续介绍。
——————————————
❶默认构造器
——————————————
Java类一定有构造器。
当使用new关键字时, JVM必定调用构造方法创建对象。
如果类没有声明任何构造器,Javac自动提供一个。
/***默认构造器java类一定有构造器*/public class ConstructorDemo { public static void main(String[] args) { Foo foo = new Foo(); }}class Foo { // public Foo(){}默认构造器}
默认构造器,当class中不写构造器时,javac提供一 个无参数默认构造器。
如果提供构造器声明,Javac将不再提供默认构造器。
调用默认无参构造器时会出错,而调用自定义有参构造器没有问题。
/***默认构造器java类- 定有构造器*/public class ConstructorDemo2 { public static void main(String[] args) { Foo foo = new Foo(); //调用的是默认构造器 // Goo goo = new Goo();没有Goo Goo goo = new Goo(2); //调用构造器Goo(int a) }}class Foo { // public Foo() {}默认构造器}class Goo { int a; public Goo(int a) {//如果提供了构造器,javac不提供默认构造器 this.a= a; }}
——————————————
❶构造方法重载
——————————————
构造方法重 载即写多个参数不一样的构造器。构造方法重载是为了实现构造方法的重用。
public class Point { int x; int y; /** *表示对角线上的点 */ public Point(int x) { this.x = x;//调用本类的构造器,根据参数列表匹配 } /** *构造器 * @param x * @param y */ public Point(int x, int y) { this.x= x; this.y=y; }}
注:
1、方法签名=方法名+参数类型列表。
2、方法重载有如下规则:
a方法名一样。
b方法参数不一样。
3、重载方法也可以说是,方法名一样,方法签名不同的方法。
无 成 本 赞 赏生活不易,还请小伙伴多多支持,顺手给小编加个鸡腿,万分感谢~~~
END
— — — — — — — — — — — — —
更多信息,扫码关注我们哦!