<menu id="u2y6m"></menu>
<tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 溫馨提示×

    java 中newInstance()方法和new關鍵字的區別

    發布時間:2020-09-30 03:08:03 來源:腳本之家 閱讀:101 作者:yangactive 欄目:編程語言

    java 中newInstance()方法和new關鍵字的區別

    * 它們的區別在于創建對象的方式不一樣,前者是使用類加載機制,后者是創建一個新類。
    * 那么為什么會有兩種創建對象方式?這主要考慮到軟件的可伸縮、可擴展和可重用等軟件設計思想。
    * 我們使用關鍵字new創建一個類的時候,這個類可以沒有被加載。但是使用newInstance()方法的時候,
    * 就必須保證:1、這個類已經加載;2、這個類已經連接了。
    * newInstance()實際上是把new這個方式分解為兩步,即首先調用Class加載方法加載某個類,然后實例化。
    * 這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,
    * 提供給了一種降耦(降低耦合度)的手段。
    * 最后用最簡單的描述來區分new關鍵字和newInstance()方法的區別:
    *    newInstance: 弱類型。低效率。只能調用無參構造。
    *    new: 強類型。相對高效。能調用任何public構造。

    代碼如下:

    import java.lang.reflect.InvocationTargetException; 
    import java.lang.reflect.Method; 
    import java.lang.reflect.Field; 
     
    public class testInvoke { 
      public void work(){ 
        System.out.println("-----------"); 
      }  
      public testInvoke work(String a,Integer b){ 
        System.out.println(a + b); 
        return this; 
      } 
      public void work(Integer b, int c ){ 
        System.out.println(b + c); 
      } 
       
      public static void main(String[] args) throws SecurityException, NoSuchMethodException, InstantiationException,     IllegalAccessException, IllegalArgumentException, InvocationTargetException{ 
        Class<?> clazz = testInvoke.class; 
        //Class<?> clazz = Class.forName("invoke.testInvoke"); 
        //testInvoke tinvoke = new testInvoke(); Class<?> clazz = tinvoke.getClass();  
        System.out.println(clazz); 
        //如果源類的方法沒有參數,則要用new Class[]{} 
        Method method1 = clazz.getMethod("work", new Class[]{}); 
        Method method2 = clazz.getMethod("work", new Class[]{String.class, Integer.class});  
        Method method3 = clazz.getMethod("work", new Class[]{Integer.class, int.class}); 
        Object invokeTest = clazz.newInstance(); 
        /* 
         * Method類的invoke(Object obj,Object args[])方法接收的參數必須為對象,<br/> 
         * 如果參數為基本類型數據,必須轉換為相應的包裝類型的對象。invoke()方法的返回值總是對象,<br/> 
         * 如果實際被調用的方法的返回類型是基本類型數據,那么invoke()方法會把它轉換為相應的包裝類型的對象,再將其返回<br/> 
         */ 
        //invoke方法的第一個參數是源類的實例,第二個參數是實例的值 
        Object result1 = method1.invoke(invokeTest, new Object[]{}); 
        Object result2 = method2.invoke(invokeTest, new Object[]{"aaaa",new Integer(10)}); 
        Object result3 = method3.invoke(invokeTest, new Object[]{3,new Integer(4)}); 
        System.out.println(result1); 
        System.out.println(result2); 
        System.out.println(result3); 
     
        Method[] methods = clazz.getMethods(); 
        for(Method method : methods){ 
          System.out.println(method.getName()); 
        } 
         
        Field[] fileds = clazz.getFields(); 
        for(Field filed: fileds){ 
          System.out.println(filed.getName()); 
        } 
      } 
    } 
    

     控制臺信息:

    class invoke.testInvoke
    -----------
    aaaa10
    7
    null
    invoke.testInvoke@de6ced
    null
    work
    [Ljava.lang.Class;@c17164
    work
    [Ljava.lang.Class;@1fb8ee3
    work
    [Ljava.lang.Class;@61de33
    main
    [Ljava.lang.Class;@14318bb
    wait
    [Ljava.lang.Class;@ca0b6
    wait
    [Ljava.lang.Class;@10b30a7
    wait
    [Ljava.lang.Class;@1a758cb
    equals
    [Ljava.lang.Class;@1b67f74
    toString
    [Ljava.lang.Class;@69b332
    hashCode
    [Ljava.lang.Class;@173a10f
    getClass
    [Ljava.lang.Class;@530daa
    notify
    [Ljava.lang.Class;@a62fc3
    notifyAll
    [Ljava.lang.Class;@89ae9e
    

    如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    免費撥打  400 100 2938 免費撥打 400 100 2938
    24小時售后技術支持 24小時售后技術支持
    返回頂部 返回頂部
    <menu id="u2y6m"></menu>
    <tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 一本久道久久综合丁香五月_免费视频禁止18以下禁止观看_日本japanese熟睡人妻_成熟闷骚女邻居引诱2