zoukankan      html  css  js  c++  java
  • 剑指offer-Java类加载过程

    Java 类加载过程:(以A.class为例)

    1. 定位A.class类,并调用findLoaderClass(string)判断这个类是否已经存在

    2. 先执行父类中static成员变量与static方法块

    3. 再执行子类中static成员变量与static方法块

    4. 接着执行父类中非static成员变量、非static方法块和构造函数

    5. 最后执行子类中非static成员变量、非static方法块和构造函数

    注意:构造函数是最后执行的。

    下面用测试过的代码输入来说明:

    (1)类中没有成员变量时

     1 public class Test1 {    
     2     static{
     3         System.out.println(5);
     4     }
     5     
     6     public Test1() {
     7         System.out.println(6);
     8     }
     9     {
    10         System.out.println(7);
    11     }
    12 }
    13 
    14 public class Test extends Test1 {    
    15     static{
    16         System.out.println(1);
    17     }
    18     {
    19         System.out.println(2);
    20     }    
    21     public Test() {
    22         System.out.println(3);
    23     }
    24     {
    25         System.out.println(4);
    26     }    
    27     public static void main(String[] args) {
    28         Test test=new Test();
    29     }
    30 }

    输出:5 1 7 6 2 4 3

    (2)有其他实例化对象时

     1 public class Test1 {    
     2     static Test2 test22=new Test2("static_father_test2");
     3     Test2 test2=new Test2("father_test2");    
     4     static{
     5         System.out.println(5);
     6     }
     7     
     8     public Test1() {
     9         System.out.println(6);
    10     }
    11     {
    12         System.out.println(7);
    13     }
    14 }
    15 
    16 public class Test2 {
    17     public Test2(String str) {
    18         System.out.println("test2:"+str);
    19     }
    20 }
    21 public class Test extends Test1 {    
    22     static Test2 test22=new Test2("static_test22");    
    23     Test2 test2=new Test2("test2");    
    24     static{
    25         System.out.println(1);
    26     }
    27     {
    28         System.out.println(2);
    29     }
    30     
    31     public Test() {
    32         System.out.println(3);
    33     }
    34     {
    35         System.out.println(4);
    36     }    
    37     public static void main(String[] args) {
    38         Test test=new Test();
    39     }
    40 }

    输出打印:
    test2:static_father_test2
    5
    test2:static_test22
    1
    test2:father_test2
    7
    6
    test2:test2
    2
    4
    3

  • 相关阅读:
    保持URL不变和数字验证
    centOS ftp key?
    本地环境测试二级域名
    linux 解决You don't have permission to access 问题
    php smarty section loop
    php header Cannot modify header information headers already sent by ... 解决办法
    linux部分命令
    Linux 里面的文件操作权限说明
    用IT网络和安全专业人士视角来裁剪云的定义
    SQL Server 2008 R2炫酷报表"智"作有方
  • 原文地址:https://www.cnblogs.com/GranceWang2014/p/4631179.html
Copyright © 2011-2022 走看看