java类和对象的加载过程
来源:互联网 发布:游戏测试软件 编辑:程序博客网 时间:2024/05/21 17:01
- 问题引入
在学习java初期总会被Java的执行顺弄的一脸蒙逼,好在一点时间的积累之后,已经明白了程序执行的过程。现在总结一下,和大家分享。如有什么不对的地方,还请大家斧正!
- 简单的小Demo
class Zi{ static { System.out.println("Zi类静态代码块执行..."); } { System.out.println("Zi构造代码块执行..."); } Zi(){ System.out.println("Zi类的构造函数执行..."); } public void fun(){ System.out.println("Zi类中的fun()方法执行..."); }}public class Test { public static void main(String[] args) { Zi zi = new Zi(); zi.fun(); }}
- 分析加载过程
该过程分为类加载过程和对象加载过程。在分析加载过程之前,首先我们要明确,程序的的执行顺序。程序的主入口main()方法,所以程序先从main()方法开始执行。再没有调用和其他特殊情况下,都是按照顺序执行的。
1、类加载过程
①程序执行到Zi的时候,就会Zi的class文件;
②JVM会把Zi的class文件,通过反射机制,把所有的静态成员和静态方法加载到方法区
③JVM会给所有的静态变量赋默认值,也就是0或者null
④显示初始化(就是静态变量有被赋值的,会赋值初始化的值)
⑤最后在执行静态代码块(此时输出的结果是:”Zi类静态代码块执行…”)
类加载过程完成!2、对象加载过程
当成程序遇到new关键字的时候,就会执行对象加载的过程
①JVM会把Zi类的所有非静态成员和静态方法加载到堆内存中,并对所有的非静态变量赋默认值
②加载Zi类的构造函数经栈内存,在执行构造函数之前会先执行隐式三步(a、先执行其父类的无参构造函数;b、对于非静态成员变量显示初始化;c、执行构造代码块【此时输出的结果:“Zi构造代码块执行…”】)
③再执行构造函数中的代码(此时输出的结果:“Zi类的构造函数执行…”)
对象加载完后!3、继续向下执行,该调方法调方法…(此时输出的结果:“Zi类中的fun()方法执行…”)。
- 输出结果展示
Zi类静态代码块执行...Zi构造代码块执行...Zi类的构造函数执行...Zi类中的fun()方法执行...
- 关于继承加载的扩展总结
类加载过程的时候,会先加载父类的class文件,也会先执行父类的静态代码块,下面有一个小demo,有兴趣的可以试着分析分析。
- demo和执行结果
class Fu{ static { System.out.println("Fu类静态代码块执行..."); } { System.out.println("Fu构造代码块执行..."); } Fu(){ System.out.println("Fu类的构造函数执行..."); }}class Zi extends Fu{ static { System.out.println("Zi类静态代码块执行..."); } { System.out.println("Zi构造代码块执行..."); } Zi(){ System.out.println("Zi类的构造函数执行..."); } public void fun(){ System.out.println("Zi类中的fun()方法执行..."); }}public class Test { public static void main(String[] args) { Zi zi = new Zi(); zi.fun(); }}/* 执行结果: Fu类静态代码块执行... Zi类静态代码块执行... Fu构造代码块执行... Fu类的构造函数执行... Zi构造代码块执行... Zi类的构造函数执行... Zi类中的fun()方法执行...*/
- java类和对象的加载过程
- 类加载和对象的初始化过程
- Java中类加载过程和对象创建过程
- Java中类加载过程和对象创建过程
- 7-Java类加载和对象创建过程
- Java类加载过程和对象实例化详解
- [Java]java类加载及new对象的过程
- JavaSE 巩固 类的加载和对象创建的过程
- java类加载及new对象的过程
- Java学习之对象的创建过程与类加载
- 【转载】类的加载和对象创建过程分析
- Java 类和对象的初始化过程
- JAVA基础--类加载&对象创建过程
- JAVA基础--类加载&对象创建过程
- JAVA 对象的初始化过程和类的初始化过程
- JAVA对象创建加载过程。
- Java 对象属性加载过程
- Java类的加载过程
- Windows Server 2016 上配置 APACHE+SSL+PHP+perl
- wait_event_interruptible 使用方法
- makedown使用
- datatable分页指南--前台分页和后台分页
- 算法提高 进制转换
- java类和对象的加载过程
- 建造适于业务分析的日志数据系统
- 中国天气网-天气预报接口api
- 单片机嵌入式C编程获取高低字节
- 设计模式练习(8)——组合模式
- tcp time_wait 状态存在的原因
- 我的2014,读多学少,想多做少
- 安卓通讯之《蓝牙单片机通讯助手》②扫描设备、连接设备和双向通讯。
- C语言--链表的销毁