反射:
基本特征:
- 允许运行中的Java程序对自身进行检查,或者说自审,并能直接操作程序的内部属性
- 可以通过名称得到对象(类、属性、方法等)
- 运行时探究和使用编译时未知的类
- .选方法的时候就是反射
使用步骤:
- 获取class对象
- 通过class对象探究这个类的信息
- 操作探究出的信息
获取class对象:
- 三种方式:
- New
User u = new User();Class uClass = u.getClass();Class strclass = "hello".getClass();int[] intArray = new int[6];Class arraClass = intArray.getClass();Class uClass1 = User.class;
- 根据类型名称获取class对象
Class strClass1 =String.class;Class arrayClass = int[].class;//JDK1.5 以后才有Class intClass = int.class; // 基本数据类型,也有 Class 对象Class voidClass = void.class; // 虽然不是数据类型,但他是返回类型,也有 class 对象//JDK1.5 之前,想要获取 int.class 对象必须要如下操作Class integerClass = Integer.class;Class intClass1 = Integer.TYPE;// 以上两种方法,不管用那种方法,一个类型只有一个 class 对象
- 根据类型的字符串名称获取class对象(最多)
实现方式:调用 Class.forName (”类的限定名“),记得带包 ;使用范围:只有类类型(包括接口),基本数据类型和引用数据类型动态性:有唯一 一个可以Class uClass2 = null;try {// 必须掌握uClass2 = Class.forName("fanshe.User"/* 字符串类型 */);// 动态性的体现,可以传参String className = new Scanner(System.in).next();uClass2 = Class.forName(className);} catch (ClassNotFoundException e) {}
通过class对象,探究一个类的对象
- Field:属性
- Constructor:构造
- Method:方法
- Declared:声明
- 操作从class对象中探究出的信息
- New instance:创建对象
- Get/set:查看和修改
- Invoke:调用方法