1. 程式人生 > >java反射機制的複習

java反射機制的複習

1、Class類是被final修飾的類不能被繼承 2、Class類的例項表示正在執行的Java應用程式中的類和介面。列舉是一種類,註釋是一種介面。每個陣列屬於被對映為Class物件的一個類,所有具有相同元素型別和維數的陣列都共享該Class物件 。基本的Java型別(boolean,byte,char,short,int,long,float和double)和關鍵字void也表示為Class物件。Class物件沒有公共構造方法。Class物件是在載入類時由Java虛擬機器以及通過呼叫類載入器中的defineClass方法自動構造的 3、通過反射獲取構造方法並使用

自己寫的練習demo

Student類

public class Student {
	//--------構造方法---------------
	//(預設的構造方法)
	Student(String str) {
		System.out.println("預設的構造方法="+str);
	}
	
	//無參的構造方法
	public Student(){
		System.out.println("呼叫了公有,無參構造方法");
	}
	
	//有一個引數的構造方法
	public Student(char name){
		System.out.println("姓名:"+name);
	}
	
	//有多個引數的構造方法
	public Student(String name,int age){
		System.out.println("姓名:"+name + "年齡:"+age);
	}
	
	//受保護的構造方法
	protected Student(boolean n){
		System.out.println("受保護的構造方法n = "+n);
	}
	
	//私有方法
	private Student(int age){
		System.out.println("私有的構造方法 年齡:"+age);
	}
}

測試類

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Constructors {
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		Class class1 = Class.forName("com.sunj.test.Student");
		//獲取所有共有的構造方法
		System.out.println("獲取所有公有的構造方法");
		Constructor [] con1=class1.getConstructors();
		for (Constructor c1 : con1) {
			System.out.println(c1);
		}
		
		//獲取所有的構造方法
		System.out.println("獲取所有的構造方法,不管它的修飾符是公有,預設,保護,私有");
		Constructor [] con2 = class1.getDeclaredConstructors();
		for (Constructor c2 : con2) {
			System.out.println(c2);
		}
		
		System.out.println("獲取公有,無參的構造方法");
		Constructor con3 = class1.getConstructor(null);//返回的是該構造方法的類物件
		System.out.println(con3);
		Object object = con3.newInstance(null);//呼叫該方法
		
		System.out.println("獲取私有構造方法並呼叫");
		Constructor con4 = class1.getDeclaredConstructor(int.class);
		System.out.println(con4);
		//呼叫構造方法
		con4.setAccessible(true);//忽略掉訪問修飾符
		object = con4.newInstance(22);
		
	}

}

getDeclaredConstructors和getConstructors方法的區別

1、getDeclaredConstructors是獲取所有的構造方法,而getConstructor是獲取所有的公有方法

2、兩者都可以通過傳參拿到指定的構造方法,這裡的引數是構造方法的引數的型別,比如構造方法傳的String name,那麼這裡就傳的是String.class