加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 教程 > 正文

对于Java类加载过程中的顺序问题分析

发布时间:2021-12-16 13:51:23 所属栏目:教程 来源:互联网
导读:以前记得static代码块貌似是Java类加载过程中优先级最高的,但是最近几天写代码发现不是这样的,因为static变量的优先级要比static代码块高得多,所以因此我犯了不少错误,下面以一个例子来说明一下一个类初始化为对象的时候的加载过程 package com.bird.jdbc
以前记得static代码块貌似是Java类加载过程中优先级最高的,但是最近几天写代码发现不是这样的,因为static变量的优先级要比static代码块高得多,所以因此我犯了不少错误,下面以一个例子来说明一下一个类初始化为对象的时候的加载过程
 
package com.bird.jdbc;  
  
  
public class Test {  
      
      
    private static A a = new A();  
    private final static F f= new F();  
    private B b = new B();  
      
    static{  
        System.out.println("c");  
    }  
      
    public Test(){  
        System.out.println("Test");  
    }  
      
    public static void main(String[] args){  
//      Test t = new Test();   
        try {  
            Class.forName("com.bird.jdbc.Test");  
        } catch (ClassNotFoundException e) {  
            // TODO Auto-generated catch block   
            e.printStackTrace();  
        }  
    }  
}  
  
class A{  
    public A(){  
        System.out.println("A");  
    }  
}  
  
class B{  
    public B(){  
        System.out.println("B");  
    }  
}  
  
  
class F{  
    public F(){  
        System.out.println("F");  
    }  
}  
大家可以看到,直接运行Test t = new test();这句话,运行结果为
 
A  
F  
c  
B  
Test  
所以是先static变量,然后是static的代码块,然后才是普通变量,最后是构造函数
 
如果是运行Class.forName()函数的话,运行结果为
 
A  
F  
c  
还是这样,先是static变量,然后才是static代码块,所以那种对于class.Forname加载类,只调用static代码块的误区要克服,因为还有一个static代码块在等着你,呵呵,我得记录下来以示警戒。

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读