Java反射机制

简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。

public class Reflection {
	
	Reflection(){
	}
	
	public Reflection(String firstname){
		 System.out.println("有一个参数构造");
	}
	
	public  Reflection(String firstName,String lastName ){
		 System.out.println("有多个参数构造");
	}
	
	private  Reflection(String lastName,String firstName,String name){
		 System.out.println("私密的构造");
	}
	
	protected  Reflection(String asName,String lastName,String firstName,String name){
		 System.out.println("保护的构造");
	}
	
	public void sayHello() {
		 System.out.println("Hello,Murphy !");
    }
	 
	public static void sayHi() {
		 System.out.println("Hi,Murphy !");
	}
	
    private void sayBye() {
		 System.out.println("Oh,I'll better go,catch you later");
    }

    public static void main(String[] args) {
		 System.out.println("See you !");
	}
}
public class ReflectionAction {
  public static void main(String[] args) throws Exception {
	
	   try {
		    Class cla = Class.forName("demo.Reflection");//package全称

		    Constructor[] conArray = cla.getConstructors();//获取所有公开的构造方法
		    for(Constructor c : conArray) {
		    	System.out.println(c);
		    }
			conArray = cla.getDeclaredConstructors();//获取所有构造方法
			for(Constructor c : conArray) {
		    	System.out.println(c);
		    }
			//获取公有无参构造方法
			//Constructor con = cla.getConstructor();
			
			//获取私有构造方法 
			Constructor con = cla.getDeclaredConstructor();
			con.setAccessible(true);//暴力访问(忽略掉访问修饰符)
			Object obj = con.newInstance();//调用方法

			//获取成员变量
//             cla.getDeclaredField("name");//可以得到这个类所有成员变量包括private  但不能得到父类的 这里只能获取字段并不能访问值
//             cla.getField("name");//只能得到public 可以得到父类的
		  
		   //获取方法
		   /**
		    *调用 公开的方法
		    */
		   Method m = cla.getMethod("sayHi");
		   m.invoke(cla.newInstance());
	       
		   Reflection h =new Reflection();
		   h.sayHello(); //传统调用
		   
		   /**
		    * 调用私有方法
		    */
		   m = cla.getDeclaredMethod("sayBye");
		   m.setAccessible(true);
		   m.invoke(cla.newInstance());
		   
		   /**
		    * main方法
		    */
			 Method methodMain = cla.getMethod("main", String[].class);
    		 methodMain.invoke(null, (Object)new String[]{"a","b","c"});//方式一
//		     methodMain.invoke(null, new Object[]{new String[]{"a","b","c"}});//方式二

	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值