经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
深入了解类加载过程及Java程序执行顺序
来源:cnblogs  作者:chris3dc  时间:2018/10/31 9:09:34  对本文有异议
  1. /**
    * @author chris
    * @date 2018/10/30 - 15:24
    * 类加载执行顺序:
    * 1.静态属性,静态方法声明,静态块。
    *
    * 2.动态属性,普通方法声明,构造块。
    *
    * 3.构造方法。
    *
    * 当new一个对象时,此时会调用构造方法,但是在调用构造方法之前,(除非被打断而暂停)执行动态属性定义并设置默认值(一举生成的)。
    */
    public class Text {
    //类加载jvm先对属性赋默认值 根据数据类型
    public static int k = 0; // 1.静态属性
    public static Text t1 = new Text("t1"); //2.静态属性 new对象暂停了类加载过程去执行构造方法,但在之前先执行动态属性定义并设置默认值 ,
    // 然后动态属性初始化,分配内存,构造块,普通方法声明(只是加载,它不需要初始化,只有调用它时才分配内存,
    // 当方法执行完毕后内存立即释放),没有优先级之分,按出现顺序执行。
    public static Text t2 = new Text("t2"); //重复上述操作
    public static int i = print("i"); //静态属性
    public static int n = 99; //静态属性 至此静态方法执行完毕 开始执行静态块
    public int j = print("j");

    {
    print("构造块");//构造块
    }
    static {
    print("静态块");//静态块 静态块执行完之后 执行main方法 (main方法也属于特殊静态方法)
    }

    public Text(String str) {
    System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
    ++i;
    ++n;
    }

    public static int print(String str) {
    System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
    ++n;
    return ++i;
    }

    public static void main(String args[]) {
    Text t = new Text("init");//main方法开始之后 开始执行动态属性 及代码块
    }
    }

    Text类加载执行是 最先jvm给属性默认值(按数据类型) 加载静态属性 其中 第二个静态属性被实例化过程打断 转而在执行构造方法之前加载了动态属性和构造块 静态属性加载完成之后加载静态块 然后找到了静态main方法 开始实例化 重复了之前两个静态属性后的操作
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号