java 反射

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 反射相关的知识,希望对你有一定的参考价值。

反射是一种动态获取信息以及动态调用对象方法的机制。在程序运行状态中,通过反射能够知道某个类具有哪些属性和方法;能够访问某一个对象的方法和属性。

具体来说,反射机制主要提供了以下功能:

  • 在运行时判断任意一个对象所属的类;

  • 在运行时构造任意一个类的对象;

  • 在运行时判断任意一个类所具有的成员变量和方法;

  • 在运行时调用任意一个对象的方法;

  • 生成动态代理。


获取包名和类名

com.freshReflectionTest {
    (String[] args) {
        ReflectionTest reflectionTest = ReflectionTest()System..println(reflectionTest.getClass().getName())}
}

输出:

com.fresh.ReflectionTest

获取类信息

com.freshReflectionTest {
    (String[] args) ClassNotFoundException {
        Class<?> class1 = Class<?> class2 = Class<?> class3 = class1 = Class.()class2 = ReflectionTest().getClass()class3 = ReflectionTest.System..println(class1)System..println(class2)System..println(class3)}
}

获取类的父类和接口

com.freshjava.io.SerializableReflectionTest Serializable {
    = -(String[] args) ClassNotFoundException {
        Class<?> clazz = Class.()Class<?> parentClass = clazz.getSuperclass()System..println(+ parentClass.getName())Class<?> intes[] = clazz.getInterfaces()System..println()(i = i < intes.++i) {
            System..println((i + ) + + intes[i].getName())}
    }
}

输出:

clazz:java.lang.Object
clazz:
:java.io.Serializable

实例化类对象

user类:


com.freshUser {
    String () {
        ()}

    (String name) {
        ().= name}

    (ageString name) {
        ().= age.= name}

    () {
        }

    (age) {
        .= age}

    String () {
        }

    (String name) {
        .= name}

    String () {
        +
                + +
                + + +
                }
}

ReflectionTest类:

com.freshjava.lang.reflect.ConstructorReflectionTest {

    (String[] args) Exception {
        Class<?> class1 = Class.()User user = (User) class1.newInstance()user.setAge()user.setName()System..println(user)Constructor<?> cons[] = class1.getConstructors()(i = i < cons.++i) {
            Class<?> classz[] = cons[i].getParameterTypes()System..println(+ i + )(j = j < classz.++j) {
                (j == classz.- ) {
                    System..println(classz[j].getName())} {
                    System..println(classz[j].getName()+)}
            }
            System..println()}

        user = (User) cons[].newInstance()System..println(user)user = (User) cons[].newInstance()System..println(user)}
}


获取类的属性


以上是关于java 反射的主要内容,如果未能解决你的问题,请参考以下文章

反射机制入门

反射机制入门

反射机制入门

使用反射在外部JAR / CLASS上调用包含Hibernate事务的方法(Java EE)

为啥我的 Ray March 片段着色器反射纹理查找会减慢我的帧速率?

OpenGL片段着色器不照亮场景