反射:
概念:能够分析类能力的程序称为反射。反射机制的功能极其强大,在下面可以看到,反射机制可以用来:
- 在运行时分析类的能力;
- 在运行时查看对象,例如,编写一个toString 方法供所有类使用;
- 实现通用的数组操作代码;
- 利用Method 对象,这个对象很像C++中的函数指针;
获取类对象:获取类对象有3种方式
- Object --> getClass(); 因为Object类中的getClass方法,因为所有类都继承Object类,从而调用Object类来获取;
- 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
- 通过class类的静态方法:forName(Stringc lassName)(属性)
package fanshe;
public class Fanshe {
public static void main(String[] args) {
//第一种方式获得class对象
Student stu1 = new Student();
Class stuClass = stu1.getClass();
System.out.println(stuClass.getName());
//第二种方式获取Class对象
Class stuClass2 = Student.class;
//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个
System.out.println(stuClass == stuClass2);
// 第三种方式获取class对象
try{
//注意此字符串必须是真是路径,就是带报包名的类路径,包名.类名
Class stuClass3 = Class.forName("fanshe.Student");
//判断三种凡是是否获取的是同一个class对象
System.out.println(stuClass3 == stuClass2);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
通过class对象可以获取某个类中的:构造方法、成员变量、成员方法;并访问成员;
- 获取构造方法:
-
批量的方法:
public Constructor[] getConstructors(): 所有“公有的”构造方法
public Constructor[] getDeclaredConstructors(): 获取所有的构造方法(包括私有、受保护的、默认、公有) -
获取单个的方法,并调用:
public Constructor getConstructor(Class... parameterTypes): 获取单个的公有构造方法;
public Constructor getDeclareConstructors(Class... parameterTypes): 获取“某个构造方法”,可以是私有的、或受保护、默认、公有;调用构造方法:
Constructor -> newInstance(Object ... initargs)
-
- newInstance 是Constructor类的方法(管理构造函数的类)
api的解释为:
newInstance(Object ... initargs)
使用此Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。它的返回值是T类型,所以newInstance是创建了一个构造方法的声明类的新实例对象,并为之调用。
参考:https://blog.csdn.net/lwl20140904/article/details/80163880







网友评论