java反射

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用途之一:访问不可见的(包括私有)属性、方法

##反射的用途之二:将一段程序与另外一段程序进行解耦。

 

posted @ 2018-09-08 12:10  寒潭渡鹤影  阅读(190)  评论(0编辑  收藏  举报