歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 對於Java類加載過程中的順序問題探究

對於Java類加載過程中的順序問題探究

日期:2017/3/1 10:30:12   编辑:Linux編程

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

  1. package com.bird.jdbc;
  2. public class Test {
  3. private static A a = new A();
  4. private final static F f= new F();
  5. private B b = new B();
  6. static{
  7. System.out.println("c");
  8. }
  9. public Test(){
  10. System.out.println("Test");
  11. }
  12. public static void main(String[] args){
  13. // Test t = new Test();
  14. try {
  15. Class.forName("com.bird.jdbc.Test");
  16. } catch (ClassNotFoundException e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  20. }
  21. }
  22. class A{
  23. public A(){
  24. System.out.println("A");
  25. }
  26. }
  27. class B{
  28. public B(){
  29. System.out.println("B");
  30. }
  31. }
  32. class F{
  33. public F(){
  34. System.out.println("F");
  35. }
  36. }

大家可以看到,直接運行Test t = new test();這句話,運行結果為

  1. A
  2. F
  3. c
  4. B
  5. Test

所以是先static變量,然後是static的代碼塊,然後才是普通變量,最後是構造函數

如果是運行Class.forName()函數的話,運行結果為

  1. A
  2. F
  3. c

還是這樣,先是static變量,然後才是static代碼塊,所以那種對於class.Forname加載類,只調用static代碼塊的誤區要克服,因為還有一個static代碼塊在等著你,呵呵,我得記錄下來以示警戒。

Copyright © Linux教程網 All Rights Reserved