沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          Class.forName("Gum");

          forName是取得Class引用的一種方法,返回一個Class對象的引用。

          如果Gum類還沒有被加載就加載它,在加載過程中,Gum的靜態子句被執行。

          可能產生的異常:ClassNotFoundException

          Class.getInterfaces("Gum")

          返回對象是Class類型,表示類Gum包含的接口

          如類Gum implements interface1,

          則會獲取到interface1的類對象

          Class.newInstance()

          實現“虛擬構造器”的一種途徑

           

          類字面常量

          obj.Class生成對Class對象的引用,它比forName更加安全,因為它在編譯時就接受檢查。

          注意:當使用.Class來創建Class對象的引用時,不會自動初始化Class對象。

          class Initable{
              
          static final int staticFinal=47;
              
          static final int staticFinal2=ClassInitialization.rand.nextInt(1000);
              
          static{
                  System.out.println(
          "Initialzing Initable");
              }

          }

          class Initable2{
              
          static int staticNonFinal=147;
              
          static{
                  System.out.println(
          "Initialzing Initable2");
              }

          }

          class Initable3{
              
          static int staticNonFinal=74;
              
          static{
                  System.out.println(
          "Initialzing Initable3");
              }

          }

          public class ClassInitialization {
              
          public static Random rand=new Random(47);
              
          public static void main(String[] args){
                  Class initable
          =Initable.class;
                  System.out.println(
          "After creating Initable ref");
                  System.out.println(Initable.staticFinal);
                  System.out.println(Initable.staticFinal2);
                  System.out.println(Initable2.staticNonFinal);
                  Class initable3
          =Class.forName("Initable3");
                  System.out.println(
          "After creating Initable3 ref");
                  System.out.println(Initable3.staticNonFinal);
              }

          }

           

          輸出結果為:

          Initialzing Initable
          After creating Initable ref
          47
          258
          Initialzing Initable2
          147
          Initialzing Initable3
          After creating Initable3 ref
          74

          結論:如果一個static final值是"編譯期常量",就象Initable.staticFinal那樣,那么這個值不需要對Initable類初使化就可以讀取,但是如果只是將一個域設置為static和final的,如對Initable.staticFinal2的訪問將進行強制的初使化,因為它不是一個編譯型常量。

          如果一個static而不是final的,那么在它訪問時,總是要求進行鏈接(為這個域分配存儲空間)和初始化(初始化該存儲空間),就像對Initable2.staticNonFinal那樣。

          泛化的Class引用

          Class<Integer> iniClass=int.class

          新的轉型語法

          case()

          InstanceOf

          反射

          getMethods()返回Method對象的數組

          getConstructors()返回Contructor對象的數組

          動態代理

          實現InvocationHandler接口

          public Object invoke(Objct proxy,Method method,Object[] args)throws Throwable{}方法

          通過Proxy.newProxyInstance(ClassLoader,Class[],InvocationHandler)創建動態代理

          具體示例參見:

          http://www.aygfsteel.com/aoneany/articles/271019.html

          主站蜘蛛池模板: 揭东县| 巩留县| 澜沧| 桑日县| 嘉祥县| 宿松县| 深圳市| 太仆寺旗| 广南县| 定州市| 梨树县| 武义县| 望城县| 永兴县| 尼勒克县| 开原市| 北宁市| 清水河县| 板桥市| 曲麻莱县| 五寨县| 博湖县| 连州市| 庆元县| 焉耆| 法库县| 隆林| 大埔区| 肇庆市| 曲周县| 宜宾市| 启东市| 彭山县| 延庆县| 团风县| 西宁市| 文成县| 锦屏县| 安康市| 科技| 高邑县|