Java EKT關鍵技術強化 反射機制
阿新 • • 發佈:2020-08-21
-
執行環境:
JDK8 +IntelliJ IDEA 2018.3
-
jar包連結:
https://files.cnblogs.com/files/papercy/jsoup_jar%E5%8C%85.rar
-
原始碼:
package com.ChenJiangT.Work1; import java.util.ArrayList; import java.util.List; public class Work1 { /** * @param args */ public static void main(String[] args) { Class clz= List.class; System.out.println("***************List相關資訊:***************"); System.out.println("類名:"+clz.getName()); System.out.println("包名:"+clz.getPackage()); System.out.println("是否為介面:"+clz.isInterface()); System.out.println("是否為基本型別:"+clz.isPrimitive()); System.out.println("是否為陣列:"+clz.isArray()); System.out.println("獲得父類的Class物件:"+clz.getSuperclass()); clz=new ArrayList().getClass(); System.out.println("***************List介面指向ArrayList時的相關資訊:***************"); System.out.println("類名:"+clz.getName()); System.out.println("包名:"+clz.getPackage()); System.out.println("是否為介面:"+clz.isInterface()); System.out.println("是否為基本型別:"+clz.isPrimitive()); System.out.println("是否為陣列:"+clz.isArray()); System.out.println("獲得父類的Class物件:"+clz.getSuperclass()); } }
-
執行效果圖:
-
原始碼:
package com.ChenJiangT.Work3;
public class Work3 {
public static void main(String[] args) throws ClassNotFoundException{
Class clz;
ClassLoader c1,c11;
System.out.println("1---------------------------------------------");
//得到系統類載入器
c1=ClassLoader.getSystemClassLoader();
System.out.println(c1);
//輸出其父載入器
while (c1!=null){
c11=c1;
c1=c11.getParent();
System.out.println(c11+"的父載入器是:"+c1);
}
System.out.println("2-----------------");
clz=Class.forName("java.lang.Object");
c1=clz.getClassLoader();
System.out.println("載入Object類的類載入器是:" + c1);
System.out.println("3-----------------");
clz=Work3.class;
c1=clz.getClassLoader();
System.out.println("載入當前類的類載入器是:" + c1);
}
}
-
效果圖:
-
總結:
一.在JDK中,主要由以下類來實現Java反射機制,這些類都位於java.lang.reflect包中:
1).Class類:代表一個類。 Field 類:代表類的成員變數(成員變數也稱為類的屬性)。
2).Method類:代表類的方法。 Modifier類:代表修飾符。
3).Constructor 類:代表類的構造方法。
4). Array類:提供了動態建立陣列,以及訪問陣列的元素的靜態方法。
二.Class中的常用方法(獲得類的構造方法)
1).getConstructors():獲得類的所有的public型別的構造方法。
2).getDeclaredConstructors():獲得類所有的構造方法
3)getConstructor(Class[] parameterTypes):獲得類的特定public的構造方法,
4).parameterTypes 引數指定構造方法的引數型別。
5).getDeclaredConstructor(Class[] parameterTypes):獲得類指定的所有的構造方法