java初始化对象的执行过程
来源:互联网 发布:完整消防队源码 编辑:程序博客网 时间:2024/06/14 20:07
//本文讲一下java初始化对象时代码的执行过程
//为了方便看出类中各个代码执行的顺序,示例代码如下,
package cp_04;
class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
class Table {
static Bowl b1 = new Bowl(1);
Table() {
System.out.println("Table()");
b2.f(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl b2 = new Bowl(2);
}
class Cupboard {
Bowl b3 = new Bowl(3);
static Bowl b4 = new Bowl(4);
Cupboard() {
System.out.println("Cupboard()");
b4.f(2);
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl b5 = new Bowl(5);
}
public class StaticInitialization {
StaticInitialization(){
System.out.println("父类构造=");
}
public static void main(String[] args) {
System.out.println(
"Creating new Cupboard() in main");
new Cupboard();
System.out.println(
"Creating new Cupboard() in main");
new Cupboard();
t2.f2(1);
t3.f3(1);
}
static Table t2 = new Table();
static Cupboard t3 = new Cupboard();
}
//通过输出结果可以看出,当创建一个对象时步骤为::
//static语句 -》普通赋值语句(Bowl b3 = new Bowl(3);)->构造方法
输出结果:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f(2)
f2(1)
f3(1)
thinking in java 中将过程总结如下:以新建Dog类为例
在这里有必要总结一下对象的创建过程。请考虑一个名为Dog 的类:
(1) 类型为Dog 的一个对象首次创建时,或者Dog 类的static 方法/static 字段首次访问时,Java 解释器
必须找到Dog.class(在事先设好的类路径里搜索)。
(2) 找到Dog.class 后(它会创建一个Class 对象,这将在后面学到),它的所有static 初始化模块都会运
行。因此,static 初始化仅发生一次——在Class 对象首次载入的时候。
(3) 创建一个new Dog()时,Dog 对象的构建进程首先会在内存堆(Heap)里为一个Dog 对象分配足够多的存
储空间。
(4) 这种存储空间会清为零,将Dog 中的所有基本类型设为它们的默认值(零用于数字,以及boolean 和
char 的等价设定)。
(5) 进行字段定义时发生的所有初始化都会执行。
(6) 执行构建器(构造方法)
那么创建子类会怎样调用父类呢?
写子类:
package cp_04;
public class StaticInitializationChild extends StaticInitialization {
StaticInitializationChild(){
System.out.println("子类构造=");
}
public static void main(String[] args) {
System.out.println("子类执行");
}
static Bowl t4 = new Bowl(6);
}
测试类:
package cp_04;
public class StaticInitializationTest {
public static void main(String[] args) {
StaticInitializationChild test2=new StaticInitializationChild();
}
}
//static -》赋值语句(Bowl b3 = new Bowl(3);)->构造方法(新建一个对象会调用 其 初始语句,构造方法)
输出如下:
Bowl(1)
Bowl(2)
Table()
f(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f(2)
Bowl(6)
父类构造=
子类构造=
//可以分析出:当创建子类对象时,首先执行父类static 然后是子类static-》父类构造-》子类构造
//附录:部分代码来自thinking in java 第四章 ,本篇文章仅为个人理解,欢迎各位coder指出错误,不吝赐教,谢谢!
- java初始化对象的执行过程
- JAVA对象的初始化过程
- java对象的初始化过程
- JAVA 的对象初始化过程
- JAVA 对象的初始化过程
- JAVA对象的初始化过程
- Java对象初始化的过程
- 对象的初始化过程-java
- Java - 对象的初始化过程
- Java: 对象的初始化过程
- Java 对象的初始化过程
- JAVA 对象的初始化过程和类的初始化过程
- 一个小例子看懂java对象初始化执行过程
- java所有对象初始化的执行顺序
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- java对象初始化过程
- java 对象初始化过程
- java对象初始化过程
- 第五章: Neural Networks exercise 26-41
- how to integrate Facebook SDK
- Reverse Linked List II
- 通过粘贴板获取DOS窗口内容及发送终止消息
- Factorial Trailing Zeroes
- java初始化对象的执行过程
- 深入浅出BP神经网络算法的原理
- AI的标尺和混合工具学习教程
- 华为机试题
- SqlSeve之数据库基本操作(增删改)
- autofs
- java学习之路 之 多线程
- Android--Android Studio更新导入原Android Studio代码风格模板
- Day 5 of 6