Java 类加载、调用构造器、执行方法的过程
2015-06-24 15:49
423 查看
注:整理到这部分知识点时候发现有很多问题还没搞清楚,所以这里可能会存在很多不够详细甚至错误的理解,准备翻一遍编程思想再来更新,
欢迎评论交流
当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.执行调用
欢迎评论交流
当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.执行调用
相关文章推荐
- java中几种常见的加密方法
- 浅谈JAVA正则表达式
- spring 注解总结
- myeclipse10新建maven工程
- SSH中各个框架的作用以及Spring AOP,IOC,DI详解
- MyEclipse打包可执行的jar包
- 决策树(信息增益)的java实现
- 64位windows下配置JavaWeb环境
- Ehcache 整合Spring 使用页面、对象缓存
- Struts2 防止重复提交问题
- Java中读取配置文件使用jdbc-c3p0连接池连接sqlserver数据库
- struts2防止表单重复提交的解决方案
- MAC OX 配置JDK环境变量
- java解析xml字符串(用dom4j)
- java导出excel方法 小记
- java关键字梳理
- Spring 使用 JdbcTemplate 批量操作
- MyEclipse修改Web项目名称后无法打开--解决办法
- 【java基础】——java面向对象(下)—多态、内部类、异常、包
- Spring MVC 定时器分析例子