JAVA基础之反射

2019-07-10  本文已影响0人  衣锦昼行

1.通过反射获取类
获取反射对象(反射入口):Class

try {
    Class<?> Clazz1 = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}

2.类名.class

Class<?> Clazz2 = 类名.class;

3.对象.getClass()

类名 XXX = new 类名();
Class<?> Clazz3 = XXX.getClass();

2.获取公共方法

//class入口
Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}

Method[] methods = Clazz.getMethods();//获取所有的公共方法(不仅是当前类,还有父类的方法)
Method[] declareMethods = Clazz.getDeclareMethods();//获取当前类的所有方法(1.只能是当前类 2.忽略访问修饰符限制)

3.获取所有的接口

//class入口
Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}
Class<?>[] interfaces = Clazz.getInterfaces();
for(Class<?> inter:interfaces){
         System.out.println(inter);
}

4.获取所有父类

//class入口
Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}
Class<?> superclass = Clazz.getSuperclass();
System.out.println(superclass);

5.获取所有构造方法

//class入口
Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}
Constructors<?>[] constructors = Clazz.getConstructors();
for(){}

6.获取所有的属性

//class入口
Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}
 Field[] fields = Clazz.getFields();//公共属性
 Field[] declareFields = Clazz.getDeclareFields();//所有属性

7.获取当前反射所代表类(接口)的对象(实例)

Class<?> Clazz = null; 
try {
    Class<?> Clazz = Class.forName("包名.类名");
}catch(ClassNotFoundException e){
    e.printStackTrack();
}
Object instance = Clazz.newInstance();

8.修改访问权限

//使用反射时,如果因为访问修饰符限制造成异常,可以通过
属性(方法).setAccessible(true);将属性或方法修改为可访问

方法的调用通过invoke();

上一篇 下一篇

猜你喜欢

热点阅读