Java反射机制详解

首先说明一下,java反射所使用的类放在java.lang.reflect这个包中。

Class对象:

Class类没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,所以我们不需要创建Class对象,只需要获取已经Class对象。下面就是获取Class对象的方法:

1.调用Class类中的静态方法forName()来实现

2.类名+.class  Object.class

3.特殊情况下,有些类里面已经有Class对象的字段,如Integer.TYPE

 

接下来就是使用Class中定义的方法来实现我们的功能。

forName返回与带有给定字符串名的类或接口相关联的 Class 对象

newInstance:创建此 Class 对象所表示的类的一个新实例。

isInstance:是个本地方法,判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。

getName:以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

getClassLoader:返回该类的加载器

import java.lang.reflect.*; 
public class Test{	 		
	public static void main(String[] args){
		try{
		Class c=Reflect.class;
		System.out.println("class name:"+c.getName());//获取类的名称
		System.out.println("getClassLoader:"+c.getClassLoader());//获得类的加载器
		Method[] m=c.getDeclaredMethods();//获得类的方法
		Reflect reflect=new Reflect();
		for(Method method:m){
			System.out.println("method name:"+method.getName());
			method.invoke(reflect);//,invoke方法是Method类中的方法,其不能调用Reflect类中的private方法
		}
		}catch(Exception e){}
	}
}
class Reflect{
	void a(){
		System.out.println("i am a");
	}
	void b(){
		System.out.println("i am B");
	}
	private void c(){
		System.out.println("i am c");
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值