美文网首页
反射基础

反射基础

作者: 行动的侏儒 | 来源:发表于2018-06-11 10:46 被阅读0次

反射

反射能在运行时获取任意一个类的所有属性和方法,前提是他能获取到类的Class对象

/*反射的基本使用*/
public class ReflectDemo {
    private String privateFiled = "private filed qaq";

    public String publicFiled = "public filed qaq";

    boolean BoolFiled = true;

    private void privateMethod() {
        System.out.println("private method");
    }

    public void publicMethod(String str) {
        System.out.println("public method " +str);
    }

    public void publicMethodWithoutParam() {
        System.out.println("public method without param");
    }

    public ReflectDemo() {}

    public ReflectDemo(String str){};

    private ReflectDemo(String str1,String str2){};
}

public class TestReflect {
    public static void main(String[] args) {
        try {
            Class clazz = Class.forName("com.reda.reflect.ReflectDemo");
            //调用构造方法公有构造方法
            Constructor ctor1 = clazz.getConstructor();
            //带参数共有构造方法
            Constructor ctor2 = clazz.getConstructor(String.class);
            //私有构造方法
            Constructor ctor3 = clazz.getDeclaredConstructor(String.class,String.class);
            ctor3.setAccessible(true);

            Object obj = ctor1.newInstance();
            Object obj2 = ctor2.newInstance("qaq");
            Object obj3 = ctor3.newInstance("1","2");
            //调用公有域
            Field field1 = clazz.getField("publicFiled");
            System.out.println(field1.get(obj));
            //调用包可见域
            Field field2 = clazz.getDeclaredField("BoolFiled");
            System.out.println(field2.getBoolean(obj2));
            //调用私有域
            Field field3 = clazz.getDeclaredField("privateFiled");
            field3.setAccessible(true);
            System.out.println(field3.get(obj2));
            //调用方法public方法
            Method method1 = clazz.getMethod("publicMethodWithoutParam");
            method1.invoke(obj);
            //调用带参数的public方法
            Method method2 = clazz.getMethod("publicMethod",String.class);
            method2.invoke(obj3,"qaq");
            //调用私有方法
            Method privateMethod = clazz.getDeclaredMethod("privateMethod");
            privateMethod.setAccessible(true);
            privateMethod.invoke(obj3);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }

    }

相关文章

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • java 反射进阶

    1.java反射基础 2.java反射进阶 上一节介绍了反射基础,本节介绍更深入的反射概念。 1.获取不到Clas...

  • Java互联网公司-经典面试题附答案

    基础:Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?优点:反射具有解耦性,缺点:反射属...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射基础

    反射 反射能在运行时获取任意一个类的所有属性和方法,前提是他能获取到类的Class对象

  • 反射基础

    反射机制提供了运行时访问类内信息的方法,每个类由虚拟机加载到方法区后都会生一个一个对应的class对象,通过这个对...

  • 反射基础

    反射:在程序的运行过程中,能够探测类所拥有的属性和行为的一种能力,把这种机制成为反射. 反射的使用场景: 1>把字...

  • 反射基础

    Class Field(得到属性) SetField(设置属性) Map Method(得到类的方法) Const...

  • 反射基础

    材料准备 Class类 获取Class对象通过类名.class获取通过对象名.getClass()获得通过Clas...

网友评论

      本文标题:反射基础

      本文链接:https://www.haomeiwen.com/subject/rbmceftx.html