首先说明一下,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");
}
}