1.概念
在运行时,对任意一个类都可以获取其属性 方法构造等(类结构);对任意对象都能对属性进行赋值,对方法进行执行,可以操作类。这种动态获取类信息以及动态对类进行操作的机制称之为反射机制。(reflect)
例如:
Person person = new Person(100,"张三");
Person p = new Student();
编译的时候p是person类。运行的时候是student类型。
Class类:存储的是类的结构——反射中有一个核心类:Class
- Class类的
类
表示正在运行的Java应用程序中的类和接口。
Filed类:类的属性
Method类:类的方法
Constructor类:类的构造方法
Annotation:注解
//Class对象 属性:每一个属性都是一个对象 Filed 方法:也是一个对象Method
2.反射相关类
类名 |
说明 |
Class类 |
代表类的实体,在运行的Java应用程序中表示类和接口 |
Field类 |
代表类的成员变量(成员变量也称为类的属性) |
Method类 |
代表类的方法 |
Constructor类 |
代表类的构造方法 |
Annotation类 |
代表注解 |
2.1Class类
Class代表类的实体,在运行的Java应用程序中表示类和接口。在这个类中提供了很多有用的方法,这里对他们简单的分类介绍。
获取Class类三种方式
1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 多用于配置文件,将类名定义在配置文件中。读取文件,加载类
Class clas1=Class.forName("com.zyk.demo1.Student");
2. 类名.class:通过类名的属性class获取 多用于参数的传递
Class<Student> clas2= Student.class;
3. 对象.getClass():getClass()方法在Object类中定义着。 多用于对象的获取字节码的方式
Student student =new Student();
Class clas3=student.getClass();
总结 :同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
获取类的基本信息的方法
- getName():获得类的完整路径名字
- newInstrance():创建类的实例
- getPackage()ÿ