java的反射(反射所有公有成员)


1.类的加载器(了解即可)

在使用任何类之前,程序都会针对存在的各个类的class文件各自创建有且只有一个的class文件对象加载进内存(反射的基础)

System ClassLoader 系统加载器:将我们写的类跟外加的类包加载进内存

其他还有 根类加载器,扩展类加载器

2、反射:运行状态中对于任何一个类都能知道跟调用所有的属性跟方法

用于不改变源代码,而想使用新的方法

1)每个类都存在一个静态成员对象class(它是此类的全称Class类对象)

对象的getClass()返回的也是此类的Class类对象

Class类的静态方法forName( String A)A必须为全称  返回A此类Class类对象

以上方法获取的Class对象唯一

2)Class文件对象中获取需要的成员 (Class A)

//第一种
Constructor[] cons = A.getConstructors();//获取所有公共的构造方法,注意别弄错成default
Constructor con = A.getConstructors();//获取特定的构造器  根据()内的参数获取的指定构造方法()参数的类型必须是Class类型
con.newInstance(Object...);//运行获取到的构造方法(()内可选填入所需参数),返回一个泛型,未指定所以返回Object,同时可以强制转换成class文件对象的类型
//每次调用方法创建的对象都是不唯一的
//第二种快捷创建对象  限制:被创建对象必须含有空参构造器,同时权限必须是public则可以直接创建对象,不必进行构造器的获取
Object obj = A.newInatance();//对象直接创建 这个()不能传递参数

此方法创建的对象 可以调用此类型本可以调用的所有方法

所以说习惯性创建类时就算不用到也要随手加一个空参构造函数public A(){}



你可能感兴趣的:(java的反射(反射所有公有成员))