1. 程式人生 > >Java基礎之—反射(非常重要)

Java基礎之—反射(非常重要)

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('男');
	}
	
}
後臺輸出:
**********************所有公有構造方法*********************************
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)
姓名:男
呼叫方法: 1.獲取構造方法:  1).批量的方法:
public Constructor[] getConstructors():所有"公有的"構造方法
           public Constructor[] getDeclaredConstructors():獲取所有的構造方法(包括私有、受保護、預設、公有)
     
 2).獲取單個的方法,並呼叫:
public Constructor getConstructor(Class... parameterTypes):獲取單個的"公有的"構造方法:
public Constructor getDeclaredConstructor(Class... parameterTypes):獲取"某個構造方法"可以是私有的,或受保護、預設、公有;

 呼叫構造方法:
Constructor-->newInstance(Object... initargs)
2、newInstance是 Constructor類的方法(管理建構函式的類)