Java学习笔记——反射

什么是动态编程语言?

程序运行时,允许改变程序结构或变量类型——这种语言称为动态语言。

Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言 Java有着一个非常突出的动态相关机制:Reflection

反射

在运行状态中,对于任意一个类,都能够知道其所有属性和方法;对于任意一个对象,都能够调用其任意一个方法,这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制。

    Java反射提供以下功能 Java运行时的数据区 Java虚拟机装载某类型时,类装载器会定位相应的class文件,然后将其读入到虚拟机中,并提取class中的类型信息,信息存储到方法区中。 方法区存放的不只是方法, 它存放的是类型信息(类的信息) 类型信息包括: 类的全限定名;当前类的直接父类的全限定名;这个类是接口类型, 类类型, 还是枚举类型;类的访问修饰符信息;当前类型的超接口的全限定名;当前类型的常量池;字段信息;方法信息

Java反射机制中设计的类

• Class:类的实例表示正在运行的 Java 应用程序中的类和接口 • Field:提供有关类或接口的属性的信息,以及对它的动态访问权限 • Constructor:提供关于类的单个构造方法的信息以及对它的访问权限 • Method:提供关于类或接口上单独某个方法的信息(成员方法)

    Class 类十分特殊,其实例用以表达Java程序运行时的类和接口 获取Class对象 – 通过Object的getClass()方法 – 通过Class的getSuperClass()方法 – 通过Class的静态forName()方法 – 对于包装器类型,通过类名.TYPE属性 打印结果: 打印结果: 主要的缺点是对性能有影响 使用反射基本上是一种解释操作,您可以告诉JVM您希望做什么并且它满足您的要求,这类操作总是慢于直接执行相同的操作。 属性修改:
经验分享 程序员 微信小程序 职场和发展