Java基礎之—反射(非常重要)
阿新 • • 發佈:2018-12-23
後臺輸出:package fanshe; import java.lang.reflect.Constructor; /* * 通過Class物件可以獲取某個類中的:構造方法、成員變數、成員方法;並訪問成員; * * 1.獲取構造方法: * 1).批量的方法: * public Constructor[] getConstructors():所有"公有的"構造方法 public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、預設、公有) * 2).獲取單個的方法,並呼叫: * public Constructor getConstructor(Class... parameterTypes):獲取單個的"公有的"構造方法: * public Constructor getDeclaredConstructor(Class... parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、預設、公有; * * 呼叫構造方法: * Constructor-->newInstance(Object... initargs) */ public class Constructors { public static void main(String[] args) throws Exception { //1.載入Class物件 Class clazz = Class.forName("fanshe.Student"); //2.獲取所有公有構造方法 System.out.println("**********************所有公有構造方法*********************************"); Constructor[] conArray = clazz.getConstructors(); for(Constructor c : conArray){ System.out.println(c); } System.out.println("************所有的構造方法(包括:私有、受保護、預設、公有)***************"); conArray = clazz.getDeclaredConstructors(); for(Constructor c : conArray){ System.out.println(c); } System.out.println("*****************獲取公有、無參的構造方法*******************************"); Constructor con = clazz.getConstructor(null); //1>、因為是無參的構造方法所以型別是一個null,不寫也可以:這裡需要的是一個引數的型別,切記是型別 //2>、返回的是描述這個無參建構函式的類物件。 System.out.println("con = " + con); //呼叫構造方法 Object obj = con.newInstance(); // System.out.println("obj = " + obj); // Student stu = (Student)obj; System.out.println("******************獲取私有構造方法,並呼叫*******************************"); con = clazz.getDeclaredConstructor(char.class); System.out.println(con); //呼叫構造方法 con.setAccessible(true);//暴力訪問(忽略掉訪問修飾符) obj = con.newInstance('男'); } }
呼叫方法: 1.獲取構造方法: 1).批量的方法:**********************所有公有構造方法********************************* public fanshe.Student(java.lang.String,int) public fanshe.Student(char) public fanshe.Student() ************所有的構造方法(包括:私有、受保護、預設、公有)*************** private fanshe.Student(int) protected fanshe.Student(boolean) public fanshe.Student(java.lang.String,int) public fanshe.Student(char) public fanshe.Student() fanshe.Student(java.lang.String) *****************獲取公有、無參的構造方法******************************* con = public fanshe.Student() 呼叫了公有、無參構造方法執行了。。。 ******************獲取私有構造方法,並呼叫******************************* public fanshe.Student(char) 姓名:男
public Constructor[] getConstructors():所有"公有的"構造方法
public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、預設、公有)
2).獲取單個的方法,並呼叫:
public Constructor getConstructor(Class... parameterTypes):獲取單個的"公有的"構造方法:
public Constructor getDeclaredConstructor(Class... parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、預設、公有;
呼叫構造方法:
2、newInstance是 Constructor類的方法(管理建構函式的類)