黑马程序员_反射

来源:互联网 发布:数据库代理 编辑:程序博客网 时间:2024/06/05 16:07

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

反射的主要用途是通过读取配置文件中的数据,通过反射技术来创建实例。

反射获取字节码文件对象的方式:class.forname(String classname),这个对象是class类型的,

需要注意里面的参数是需要带有包名的。

反射拿字节码文件对象时候回报出一个ClassNotFoundException 找不到该对象的错误。

反射创建对象需要几个步骤:

一:通过class.forname()获取字节码文件对象

二:通过字节码文件对象获取指定的构造方法

1.getConstructor(参数)获取指定的public修饰的构造方法

2.getDeclaredConstructor(参数)获取指定的构造方法包含私有的

3.getConstructors(参数)获取所有用public修饰的构造方法

4.getDeclaredConstructors(参数)获取所有的构造方法包含私有

三:通过构造方法用newInstance()方法创建对象

当要通过私有构造方法创建对象时,需要开启暴力访问  setAccessible(true)

反射获取方法:

1.getMethods()获取当前类与父类中所有public修饰的方法

2.getDeclaredMethods()获取当前类中所有方法包含私有(不包含私有)

3.getMethod(方法名,参数类型) 获取指定public修饰的方法

4.getDeclaredMethod(方法名,参数类型)获取指定的包含私有方法

调用方法的方式和调用构造方法是差不多的


执行调用的方法:

  invoke(对象,参数)


获取成员变量:

1.getFields()获取所有public修饰的成员变量

2.getDeclaredfields()获取所有成员变量包含私有

3.getField() 获取指定的public修饰的成员变量

4.getDeclaredFiled()获取指定的成员变量包含私有

通过反射获取成员变量并使用:

前面的步骤还是一样的主要是怎么操作成员变量

1.set(对象,赋的值);

2.get(对象)  注意返回的值为object类型

私有的需要把前面的几个步骤改为私有获取的步骤

反射是通过编译的.class文件运行的,而编译后的.class文件会有一种泛型擦除的现象,

所以反射可以向有泛型约束的集合中添加任意元素。




0 0
原创粉丝点击