新聞中心
以前記得static代碼塊貌似是Java類加載過程中優(yōu)先級最高的,但是最近幾天寫代碼發(fā)現(xiàn)不是這樣的,因為static變量的優(yōu)先級要比static代碼塊高得多,所以因此我犯了不少錯誤,下面以一個例子來說明一下一個類初始化為對象的時候的加載過程:

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、舟山ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的舟山網(wǎng)站制作公司
- 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();這句話,運行結(jié)果為
- A
- F
- c
- B
- Test
所以是先static變量,然后是static的代碼塊,然后才是普通變量,最后是構(gòu)造函數(shù)
如果是運行Class.forName()函數(shù)的話,運行結(jié)果為
- A
- F
- c
還是這樣,先是static變量,然后才是static代碼塊,所以那種對于class.Forname加載類,只調(diào)用static代碼塊的誤區(qū)要克服,因為還有一個static代碼塊在等著你,呵呵,我得記錄下來以示警戒。
原文鏈接:http://blog.csdn.net/a352193394/article/details/7255277
分享標題:對于Java類加載過程中的順序問題探究
新聞來源:http://www.dlmjj.cn/article/djosphe.html


咨詢
建站咨詢
