欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 中newInstance()方法和new關(guān)鍵字的區(qū)別

 更新時(shí)間:2017年09月01日 15:26:22   作者:yangactive  
這篇文章主要介紹了java 中newInstance()方法和new關(guān)鍵字的區(qū)別的相關(guān)資料,希望通過本文大家能掌握他們之家的區(qū)別與用法,需要的朋友可以參考下

java 中newInstance()方法和new關(guān)鍵字的區(qū)別

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

代碼如下:

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); 
    //如果源類的方法沒有參數(shù),則要用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[])方法接收的參數(shù)必須為對象,<br/> 
     * 如果參數(shù)為基本類型數(shù)據(jù),必須轉(zhuǎn)換為相應(yīng)的包裝類型的對象。invoke()方法的返回值總是對象,<br/> 
     * 如果實(shí)際被調(diào)用的方法的返回類型是基本類型數(shù)據(jù),那么invoke()方法會(huì)把它轉(zhuǎn)換為相應(yīng)的包裝類型的對象,再將其返回<br/> 
     */ 
    //invoke方法的第一個(gè)參數(shù)是源類的實(shí)例,第二個(gè)參數(shù)是實(shí)例的值 
    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

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

相關(guān)文章

  • SpringBoot調(diào)用service層的三種方法

    SpringBoot調(diào)用service層的三種方法

    在Spring?Boot中,我們可以通過注入Service層對象來調(diào)用Service層的方法,Service層是業(yè)務(wù)邏輯的處理層,它通常包含了對數(shù)據(jù)的增刪改查操作,本文給大家介紹了SpringBoot調(diào)用service層的三種方法,需要的朋友可以參考下
    2024-05-05
  • tio-boot?jfinal-plugins框架整合redis示例詳解

    tio-boot?jfinal-plugins框架整合redis示例詳解

    這篇文章主要為大家介紹了tio-boot?jfinal-plugins框架整合redis示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 詳談Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑

    詳談Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑

    下面小編就為大家分享一篇Java中net.sf.json包關(guān)于JSON與對象互轉(zhuǎn)的坑,具有很好的參考價(jià)值,希望對大家有所幫助
    2017-12-12
  • Java爬蟲(Jsoup與WebDriver)的使用

    Java爬蟲(Jsoup與WebDriver)的使用

    這篇文章主要介紹了Java爬蟲(Jsoup與WebDriver)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    這篇文章主要介紹了Java常用面板JScrollPane的簡單介紹和一個(gè)相關(guān)實(shí)例,,需要的朋友可以參考下。
    2017-08-08
  • 基于JPA查詢部分字段的相關(guān)事項(xiàng)

    基于JPA查詢部分字段的相關(guān)事項(xiàng)

    這篇文章主要介紹了JPA查詢部分字段的相關(guān)事項(xiàng)說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring?MVC中@Controller和@RequestMapping注解使用

    Spring?MVC中@Controller和@RequestMapping注解使用

    這篇文章主要介紹了Spring?MVC中@Controller和@RequestMapping注解使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 獲取JsonObject某一未知key的值操作

    獲取JsonObject某一未知key的值操作

    這篇文章主要介紹了獲取JsonObject某一未知key的值操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • SpringMVC中的攔截器詳解及代碼示例

    SpringMVC中的攔截器詳解及代碼示例

    這篇文章主要介紹了SpringMVC中的攔截器詳解及代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java Swing JFrame窗口的實(shí)現(xiàn)

    Java Swing JFrame窗口的實(shí)現(xiàn)

    這篇文章主要介紹了Java Swing JFrame窗口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論