java中提供的动态执行API。
可以动态**检查**对象的类型,对象类型的内部结构。
还能动态创建对象,动态执行方法等。
输出类的引用时带有$就是内部类。
getClass是java api。
反射AIP可以动态加载类,动态创建对象。
Class cls = Class.forName("Foo.java");
reflect.Foo@7d4991ad, 这不是地址,这是对象散列值。
Class.newInstance能创建任何对象,只要这个该对象有无参构造器就可以。
使用控制台输入类名的时候一定要带类的包名,否则报错。
使用newInstance()方法时,类中一定要有无参构造方法。
最大的特点是动态创建对象。
Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用在编译期并不知道的类。这样的特点就是反射。
Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。
Class是反射的源。
反射可以动态调用对象的方法:
Foo foo
动态调用方法:是指运行期动态地给出方法名,如果输入的是“test”就执行test()方法,如果输入是
“demo”就执行demo()方法。
动态执行方法:invoke:调用
method.invoke();
1.先在类中找到方法 method对象。
2.在method上调用invoke就是执行方法,需要包含方法的对象作为参数。
method.invoke(包含方法的对象)
私有关键字只是语法上存在,反射属于底层API,底层可以打破这种权限。
在java中只能使用反射与。
##反射API用途之一:访问不可见的(包括私有)属性、方法
##反射的用途之二:将一段程序与另外一段程序进行解耦。