new Object() 过程
来源:互联网 发布:心事谁人知钢琴 编辑:程序博客网 时间:2024/05/13 17:56
public class Test {public static int a = 1;private int b = 1;static{System.out.println("静态代码块中 a:"+a);a = 2;}{System.out.println("代码块中 b:"+b);b = 2;}public Test(int num) {super();System.out.println("构造函数中 b:"+b);this.b = num;System.out.println("构造函数显示初始化后 b:"+b);}public static void main(String[] args) {ClassLoader classLoader = Test.class.getClassLoader();while (classLoader != null) {System.out.println(classLoader);classLoader = classLoader.getParent();}System.out.println(classLoader);new Test(3);}}
结果:
静态代码块中 a:1sun.misc.Launcher$AppClassLoader@105d88asun.misc.Launcher$ExtClassLoader@cb6009null代码块中 b:1构造函数中 b:2构造函数显示初始化后 b:3
类初始化总过程:
加载: 查找并加载类的二进制数据(*.class)到内存,将其放在运行时数据区的方法区中(父加载机制),
然后在堆中创建一个Class对象,用于封装类在方法区的数据结构
Class对象封装了类在方法区的数据结构,并且向Java程序提供了访问方法区的数据结构的接口
根类加载器(Bootstrap):C++实现,输出为null
扩展类加载器(Ext):jre\lib\ext目录下加载
应用类加载器(app):CLASSPATH下加载
连接: 1、验证:确保被加载类的正确性
2、准备:为类的静态变量分配内存,并将其初始化为默认值 (a=0)
3、解析:把类中的符号引用转化为直接引用
初始化: 为类的静态变量赋予正确的初始值,两种方式(依次按顺序执行):
1、声明处初始化 (a=1)
2、静态代码块中初始化 静态代码块中 a:1
new object() (a=2)
构造函数执行
1、成员变量默认初始化 (b=0)
2、调用super()
3、成团变量初始化 (b=1)
4、代码块执行 代码块中 b:1
(b=2)
5.构造函数显示初始化 构造函数中 b:2
(b=3)
构造函数显示初始化后 b:3
至此对象新建成功,传递对象引用至引用变量。
0 0
- new Object() 过程
- New-Object 帮助信息
- javascript new Object(value)
- .net new object structure
- js:Creating a new object
- new 对象详细过程
- js new 过程细节
- new的执行过程
- Java new的过程
- Map<String, Object> map=new HashMap<String, Object>();
- Object.create(null)和new Object的区别
- Map<String, Object> map=new HashMap<String, Object>();
- object c中 new和alloc区别
- object c中 new和alloc区别
- var amc=amc || {}; new object{}
- Object.create 与 new function 区别
- new一个Object对象占用多少内存?
- object c中 new和alloc区别
- 弃用TabActivity,使用FragmentActivity实现
- Kerberos 配置
- lua调c动态库【转】
- Collections
- 使用JS模拟出Map对象
- new Object() 过程
- COM 和 动态链接库的区别
- 新Azure 服务仪表盘!
- hadoop1.1.2 小文件解决方案
- Java对象的序列化与反序列化
- AppLibrary.dll中对Excel下载的用法
- cs硕士妹子找工作经历【阿里人搜等互联网】
- The Hardest Problem Ever
- Eclipse Android工程一些技巧