java面試-反射


1、什么是反射?有什么優缺點?

  反射就是動態加載對象,並對對象進行剖析。在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法。對於任意一個對象,都能夠調用它的任意一個方法。這種動態獲取信息以及動態調用對象方法的功能稱為java反射機制。
  優點:反射可以動態創建對象和編譯,最大限度發揮了java的靈活性。
  缺點:對性能有影響。反射基本上是一種解釋操作,告訴JVM我們要做什么並且滿足我們的需求,這類操作總是慢於直接執行java代碼。

2、如何使用反射?

  a:通過一個全限定類名創建一個對象

Class<?> clz = Class.forname("全限類名");

Class<?> clz = A.class;

Class<?> clz = b.getClass();

  b:獲取構造器對象,通過構造器new出一個對象

Constructor<?> cons = clz.getConstructor([參數類型class]);
cons.newInstance([參數]);

  c:通過class對象創建一個實例(就相當於new 類名()無參構造器)

clz.newInstance();

  d:通過class對象獲得一個屬性對象

Field[] fields = clz .getFields();//獲得某個類的所有的公共(public)的字段,包括父類中的字段。

Field[] fields = clz .getDeclaredFields();//獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的申明字段

  e:通過class對象獲得一個方法對象

Method m = clz.getMethod("方法名",參數class);//只能獲取公共的

Method m = clz.getDeclaredMethod("方法名",參數class);//獲取任意修飾的方法,不能執行私有

m.setAccessible(true);//讓私有的方法可以執行

  f:讓方法執行

m.invoke(obj實例對象,obj可變參數)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM