1. 程式人生 > >java反射——建構函式

java反射——建構函式

反射獲取建構函式並呼叫。說再多不入程式碼來的快。我把程式碼分成了一塊塊程式碼區,需要看一個註釋其他的就可以了,測試過都是可以的!

package FanShe;

import java.lang.reflect.*;
class Student {
	
	//---------------構造方法-------------------
	//(預設的構造方法)
	Student(String str){
		System.out.println("(預設)的構造方法 s = " + 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);
	}
 
}


public class ConstructorDemo {


	public static void main(String[] args) throws  Exception {
//		Class c=new Student().getClass();
		Class c=Student.class;
//		Class c=Class.forName("FanShe.Contructor");
		//三種方法能獲取學生類Class物件
		
		
		
		/*System.out.println("*****獲取公有構造方法*****");
		Constructor[] cArr=c.getConstructors();
		for(Constructor con:cArr) {
			System.out.println(cor);
		}*/
		
		
		/*System.out.println("*****獲取全部構造方法*****");
		Constructor[] cArr=c.getDeclaredConstructors();
		for(Constructor con:cArr) {
			System.out.println(con);
		}*/
		
		
		
		/*System.out.println("*****獲取公有無參構造方法*****");
		Constructor con=c.getConstructor();
		System.out.println(con);*/
		
		
		/*System.out.println("*****獲取指定引數構造方法*****");
		Constructor con=c.getDeclaredConstructor(String.class);
		System.out.println(con);*/
		
		
		/*System.out.println("*****暴力訪問,建立物件*****");
		Constructor con=c.getDeclaredConstructor(String.class);
		con.setAccessible(true);//暴力訪問
		Object obj=con.newInstance("傅靖耀");//new Student("傅")*/
	}
}