沙漠中的魚

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

          Class.forName("Gum");

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

          如果Gum類還沒有被加載就加載它,在加載過程中,Gum的靜態(tài)子句被執(zhí)行。

          可能產(chǎn)生的異常:ClassNotFoundException

          Class.getInterfaces("Gum")

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

          如類Gum implements interface1,

          則會獲取到interface1的類對象

          Class.newInstance()

          實現(xiàn)“虛擬構(gòu)造器”的一種途徑

           

          類字面常量

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

          注意:當使用.Class來創(chuàng)建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);
              }

          }

           

          輸出結(jié)果為:

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

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

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

          泛化的Class引用

          Class<Integer> iniClass=int.class

          新的轉(zhuǎn)型語法

          case()

          InstanceOf

          反射

          getMethods()返回Method對象的數(shù)組

          getConstructors()返回Contructor對象的數(shù)組

          動態(tài)代理

          實現(xiàn)InvocationHandler接口

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

          通過Proxy.newProxyInstance(ClassLoader,Class[],InvocationHandler)創(chuàng)建動態(tài)代理

          具體示例參見:

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

          主站蜘蛛池模板: 镇赉县| 桑植县| 南昌市| 洛阳市| 南平市| 青神县| 海阳市| 马尔康县| 开江县| 松桃| 津市市| 张掖市| 芜湖市| 尚义县| 无棣县| 临颍县| 宝兴县| 洪湖市| 枝江市| 东至县| 奈曼旗| 西城区| 敖汉旗| 文安县| 黄龙县| 长寿区| 永丰县| 景宁| 象州县| 太和县| 香河县| 晋江市| 瓮安县| 博客| 马山县| 山丹县| 唐山市| 开化县| 双牌县| 江安县| 福贡县|