java创建实例_[Java]实例创建的步骤

更新时间:2023-07-14 07:41:19 阅读: 评论:0

java创建实例_[Java]实例创建的步骤
创建类的⼀个实例时,按照下⾯步骤进⾏创建:逍遥快活
1. 给当前类及其⽗、祖类的所有成员字段分配空间,并给它们赋予默认值
2. 开始执⾏当前类的构造器
3. 如果当前类有⽗类,则对⽗类创建⼀个实例:从第 2 步开始并把⽗类当作新的当前类
4. 给当前实例、当前实例的字段进⾏初始化
5. 执⾏当前类的构造器的剩余部分代码。
啤酒节活动>志向远大的诗句上⾯的步骤包含⼀个递归算法。假设类 C 有⽗类,实例化 C 到第 3 步的时候,需要先创建⽗类的⼀个实例,即⽗类要经历完第 2、3、4、5 步骤之后,才到类 C 继续第 4 步。如果⽗类也有⾃⼰的⽗类,则⽗类的⽗类也要先实例化,才到⽗类执⾏第 3 步。依次类推,直到实例化 Object 类,因为 Object 类没有⽗类。
下⾯有两个例⼦进⾏说明。
骂人的脏话
1,常规的类实例化
public classPoint {intx, y;
Point(){ x= 1; y= 1; }
}
public class ColoredPoint extendsPoint {int color = 0xFF00FF;
}
public classInstanceDemo {public static voidmain(){
自己制作的书签
ColoredPoint cp= newColoredPoint();
System.out.println(cp.x+ " | " + cp.y + " | " +cp.color);
}
}
引起创建类的实例的是代码 new ColoredPoint(),下⾯是实例创建的步骤:
1. 分配内存给字段 x, y, color, 并给他们赋予默认值
2. ColoredPoint 的构造器被调⽤
3. ColoredPoint 没有声明构造器,则调⽤其默认构造器:
ColoredPoint(){ super(); }
4. 上⾯的 super() 实际指的是 Point 的⽆参构造器。Point 的⽆参构造器最开始部分没有调⽤其他构造器,则 Java 编辑器提供插⼊了⼀个构造器调⽤,变成:
Point(){ super(); x = 1; y = 1; }
5. 上⾯的 super() 实际指的是 Object 的⽆参构造器。Object 没有⽗类,不会被插⼊构造器。Object 的⽆参构造器没有任何副作⽤或返回值。被调⽤的构造器如下
Object() {  }
6. Point 的字段被初始化。在这⾥,字段 x, y ⽆需被初始化。
7. Point 的构造器被继续执⾏,即对 x , y 分别赋值为 1 。⾄此,⽗类 Point 实例化结束
8. ColoredPoint 的字段被初始化。在这⾥,字段 color 被初始化为 0xFF00FF。
9. ColoredPoint 的构造器被继续执⾏。在这⾥,没有其他代码在构造器⾥⾯,⽆需继续执⾏。⾄此,ColoredPoint 实例化结束。
2,动态调度在实例化期间的影响
Super,作为⽗类,在构造器中调⽤函数 printStatus()。注意,printStatus() 函数被⼦类重写,所以这⾥调⽤的不是 Super ⾃⾝的PrintStatus(),⽽是其⼦类的 printStatus().
磅礴拼音Sub, 继承于 Super 类,在构造器中调⽤ printStatus(),然后对变量 age 重写赋值。
InstanceDDDemo, 演⽰在实例化期间,⽅法动态调度的影响。
具体代码:
public classSuper {publicSuper(){
System.out.println("in Super() ");
printStatus();
}public voidprintStatus(){
System.out.println("Super.printStatus - ");
}
}
public class Sub extendsSuper{private int age = 10;publicSub(){
System.out.println("in Sub() ");
printStatus();
age= 20;
}public voidprintStatus(){
System.out.println("Sub.printStatus - " +age);
}
}
public classInstanceDDDemo {public static voidmain(){
Sub point= newSub();
System.out.println(" After instance ");
point.printStatus();
}
煮山楂的做法
}
输出:安乐宫
in Super()
Sub.printStatus- 0in Sub()
Sub.printStatus- 10After instance
Sub.printStatus- 20
从输出可见,在执⾏ Sub 构造⾥⾯的代码之前,Sub.printStatus() 已经被调⽤过⼀次。
Java ⽀持⽅法的动态调度。动态调度是指在运⾏时才决定选择哪⼀个多态实现⽅法。虽然 Super 有⾃⼰的 printStutus() 放⽅法,但是本例⼦中,Super 构造函数的调⽤,是由于它被 Sub 类继承,并且 Sub 类在被实例化,所以,这⾥最原始的⽬的是创建 Sub 类实例,⽽printStutas() ⽅法对于 Sub 类来说已经被重写了,故在调⽤⽗类 Super 的构造器中仍然调⽤被重写后的 Sub.printStatus().
参考资料
12.5 Creation of New Class Instance, The Java Language Specification, Java SE 8 Edition

本文发布于:2023-07-14 07:41:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1095747.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   构造   创建   重写
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图