java对象的创造过程
来源:互联网 发布:php 分割二维数组 编辑:程序博客网 时间:2024/04/26 20:33
本文摘抄自《Thinking in java 》
假设有一个名为Dog的类
1)当首次创建类型为Dog的对象时(构造器可以看成静态方法),或者Dog类德静态方法/静态字段首次被访问时,java解析器必须查找类路径,以定位Dog.class文件。
2)然后载入Dog.class(这将创建一个Class对象),有关静态初始化的所有动作都会被执行。因此,静态初始化只在Class对象首次加载的时候进行一次。
3)当用new Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的储存空间。
4)这块储存空间会被清零,这就自动地将Dog对象中的所有基本类型数据都设置成了缺省值(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null。
5)执行所有出现于字段定义处德初始化动作。
6)执行构造器。
接下来是一段静态字段和静态方法的初始化例子:
public class StaticInitialization static Table t2=new Table();static Cupboard t3 =new Cupboard();public static void main(String[] args) {// TODO Auto-generated method stubSystem.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);}}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);}
输出的结构为:
- java对象的创造过程
- Effective java第五条:避免创造不必要的对象
- JAVA 创造新的神话
- JAVA对象的初始化过程
- Java对象的创建过程
- java对象的创建过程
- java对象的初始化过程
- java对象的创建过程
- java对象的创建过程
- java对象的创建过程
- java对象的创建过程
- JAVA 的对象初始化过程
- java对象的建立过程
- JAVA 对象的初始化过程
- Java对象的创建过程
- java对象的建立过程
- Java对象的创建过程
- Java对象的创建过程
- os/commsfw/commsconfig/commsdatabaseshim/commdbshim/Notifier
- 我寫的串口同步通信類------適合初學者
- 我寫的WINDOWS服務操作類-----非常適合初學者
- Performance testing HBase using YCSB
- 跟着Code走,详解Symbian活动对象
- java对象的创造过程
- 跟着Code走,详解Symbian Client/Server架构
- 什么是lib文件,lib和dll的关系如何
- 模擬strcpy, strcat, memcpy實現 !
- 《UNIX环境高级编程》apue.h问题
- 字符串倒序,以及查找 !
- 今天登陆了,发现淡出csdn好久了
- Linux中gcc,g++常用编译选项
- MFC消息映射的來龍去脈