标签:
注:整理到这部分知识点时候发现有很多问题还没搞清楚,所以这里可能会存在很多不够详细甚至错误的理解,准备翻一遍编程思想再来更新,
欢迎评论交流
当JVM执行到这么一句代码: new Person().setName("superzhao")
它会做这么几件事
类加载
JVM会用类加载器加载xxx.Person这个class文件
加载(class){
if(class有父类){
加载(superclass);
}
1.静态域申明,默认初始化为0,false,null
2.按照申明顺序(从上而下书写顺序)执行静态域(赋值)和静态代码块(执行代码块体),
二者等价,因此不可在静态代码块中使用位于代码块之后申明的静态域,但是可以初始化
3.按照申明顺序加载静态方法
}
构造器被调用(对象初始化)
1.所有实例域初始化为默认值0,false,null
2.按照申明顺序执行域初始化及块初始化
3.如果构造器"第一行"调用了其他构造器,则执行
4.执行构造器体
调用方法
1.编译器查看对象的申明类型,找到它所有与方法名相同的方法
2.根据参数类型,找到相应"最合适"的父类方法可能会出现类型转换(向上转型)
3.如果是private,static,final,构造器 方法,那么已经确定就是该方法(这四种类型的方法没有多态特征),
因为没有多态所以也叫静态绑定
4.如果是其他方式,采用动态绑定:JVM去寻找改类的实际类型中对应的最合适方法
5.执行调用
标签:
原文地址:http://www.cnblogs.com/superzhao/p/4597883.html