反射:框架设计的灵魂

框架:半成品的软件。可以在框架基础上进行软件开发,简化编码。

反射:将类的各个组成部分封装为其他对象,这就是反射机制。

java基础反射

1.反射的优点:

1.1可以在程序运行过程中,操作这些对象。

java基础反射

1.2.可以解耦,提高程序的可扩展性。

1.3.能够运行时动态获取类的实例,提高灵活性;

1.4.与动态编译结合

反射的缺点:

1.1使用反射性能较低,需要解析字节码,将内存中的对象进行解析。

解决方案:

1.通过setAccessible(true),关闭JDK的安全检查来提升反射速度。

2.获取Class对象的方式:

2.1Class.forName("全类名"):将字节码文件加载进内存,返回Class对象。

*多用于配置文件,将类名定义在配置文件中。读取文件,加载类

2.2类名.class:通过类名的属性class获取。

*多用于参数的传递

2.3对象名.getClass():getClass()方法在Object类中定义。

*多用于对象的获取字节码的方式。

结论:同一个字节码(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个。

3.class对象功能:

获取功能:

3.1获取成员变量们;

Field[] getFields()

返回一个数组包含 Field物体反射的类或接口的 对象代表所有可访问的公共领域。

Field getField(String name)

返回一个 Field对象反映的类或接口的 对象表示的指定公共成员。

Field getDeclaredField(String name)

返回一个对象,反映了 Field指定声明字段的类或接口的 对象表示。

Field[] getDeclaredFields()

返回 Field物体反射所有字段的类或接口的 对象表示声明数组。

Field:成员变量

操作:获取值:1.get(Object obj);

2.设置值:void set(Object obj,Object value);

3.忽略访问权限修饰符的安全检查

setAccessible(true) //暴力反射

 

3.2获取构造器们

Constructor<T> getConstructor(<?>... parameterTypes)

返回一个 Constructor对象反映指定的公共构造函数的 对象表示的类。

Constructor<?>[] getConstructors()

返回一个数组包含 Constructor物体反射所有的 对象表示的类的公共构造函数。

Constructor<T> getDeclaredConstructor(<?>... parameterTypes)

返回一个 Constructor对象反映指定的构造函数的类或接口的 对象表示。

Constructor<?>[] getDeclaredConstructors()

返回 Constructor物体反射所有的构造函数通过 对象表示的类中声明一个数组。

Constructor:构造方法

1.创建对象:

* T newInstance(Object ...  initargs)

*如果使用空参数构造方法创建对象,操作可以简化:class对象的newInstance方法。

 

3.3获取成员方法们

方法 getMethod(String name, <?>... parameterTypes)

返回一个 方法对象反映的类或接口的 对象表示的指定公共成员方法。

方法[] getMethods()

返回一个数组包含 方法物体反射所有的类或接口的 对象表示的公共方法,包括那些由类或接口的超类和超接口继承的声明。

方法 getDeclaredMethod(String name, <?>... parameterTypes)

返回一个 方法对象反映指定声明方法的类或接口的 对象表示。

方法[] getDeclaredMethods()

返回一个数组包含 方法物体反射所有声明的方法的类或接口的 对象,代表包括公众、保护,默认(包)的访问,和私有方法,但不包括继承的方法。

Method:方法对象

*执行方法:

Object invoke(Object obj,Object ...,args) ;

*获取方法名称:

*String getName:获取方法名

 3.4获取类名

​​​​​​

String getName()

返回单位名称(类,接口,数组类,原始类型,或无效)的 对象表示,作为一个 String

相关文章:

  • 2021-09-02
  • 2021-08-24
  • 2021-05-22
  • 2021-09-26
  • 2022-12-23
猜你喜欢
  • 2022-03-02
  • 2021-07-24
  • 2021-04-29
  • 2021-10-16
  • 2021-11-27
  • 2021-08-24
  • 2021-09-10
相关资源
相似解决方案