美文网首页
反射与内省

反射与内省

作者: Dujf | 来源:发表于2019-06-21 21:31 被阅读0次

一 .反射

反射的概念

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

Class类

Class 类是在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象。基本的 Java 类型(boolean, byte, char, short,int, long, float 和 double) 和 void 类型也可表示为 Class 对象。

获取Class对象的三种方法

1.通过对象的getClass()方法
Dog dog = new Dog("wangwang",4,"白色");
Class aClass = dog.getClass();
2.通过类.class属性
Class dogClass = Dog.class;
3.通过Class.forName方法
try {
      Class<?> aClass1 = Class.forName("feng.Dog");
} catch (ClassNotFoundException e) {
      e.printStackTrace();
}

通过反射来实例化对象

1.通过Class对象实例化类对象,调用了默认无参的构造方法
        Class<Dog> dogClass = Dog.class;
        try {
            Dog dog = dogClass.newInstance();
            dog.setName("大黄");
            System.out.println(dog);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
2.获取所有构造方法
    public void test3(){
        Class<Dog> dogClass = Dog.class;
        Constructor<?>[] constructors = dogClass.getConstructors();
        for (int i = 0; i < constructors.length; i++) {
            System.out.println(constructors[i].getName());
            System.out.println(constructors[i].getParameterCount());
        }
        try {
            //获取一个指定的构造方法
            Constructor<Dog> constructor =
                    dogClass.getConstructor(String.class, int.class,
                    String.class);
            //调用带参数的构造器来实例化对象
            Dog dog = constructor.newInstance("小白",20,"红色");
            System.out.println(dog);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

相关文章

  • 反射与内省

    一 .反射 反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意...

  • 2 内省

    1、内省(Introspector) — JavaBean内省基于反射实现,主要用于操作JavaBean,通过内省...

  • Java内省机制(Introspector)

    内省 通过反射的方式操作 JavaBean 的属性内省基于反射实现,主要用于操作JavaBean,Introspe...

  • Java基础

    一、反射&内省 1、反射 反射会有些许性能消耗,因为它把装载期做的事情搬到了运行期。 2、JavaBean内省 内...

  • 不学无数——反射和内省的区别

    反射和内省的区别 内省是基于反射实现的,主要用来操作JavaBean,通过内省可以很方便的动态获得bean的set...

  • (反射+内省机制的运用)处理jdbc的结果集

    1、原理:反射+内省 2、反射:动态创建对象 3、内省:动态处理对象的属性值 4、结果集处理: (1)把结果集中的...

  • Javassist之内省与定制(一)

    CtClass提供了内省的方法。Javassist的内省机制兼容Java的反射API。CtClass提供了getN...

  • Java反射和内省

    反射 反射 (Reflection) ,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性...

  • Java 利用反射与内省组装数据

    首先建立两个bean实现javabean规范 工具类

  • 内省机制

    内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1、内省机制和反...

网友评论

      本文标题:反射与内省

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