Reflection的讲解

2023-11-14 23:19:05 浏览数 (1)

通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。 程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。

反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

Java 反射主要提供以下功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
  • 在运行时调用任意一个对象的方法;

用法:

获得 Class 对象

1Class.forName(“类的全限定名”)

2实例对象.getClass()

3类名.class (类字面常量)

实例判断

1.我们通过 instanceof 关键字来判断是否为某个类的实例

2.我们通过反射中 Class 对象的 isInstance() 方法来判断是否为某个类的实例

代码语言:txt复制
public native boolean isInstance(Object obj);

实例创建

1.使用 Class 对象的 newInstance() 方法来创建 Class 对象的实例

代码语言:txt复制
Class<?> c = String.class;
Object str = c.getInstance();

2.通过 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance() 方法来创建实例,这种方法可以用指定的构造器构造类的方法。

代码语言:txt复制
Class<?> c = String.class;
Contructor con = c.getConstructor(String.class);
Object obj = con.newInstance("2333");
sout(obj);

方法获取

  1. getDeclareMethods 方法返回类或接口声明的所有方法。(公共、保护、默认、访问和私有方法。不过没有继承的方法)。
代码语言:txt复制
public Method[] getDeclareMethods() throws SecurityException
  1. getMethods 方法返回某个类的所有 public 方法,包括继承的公用方法。
代码语言:txt复制
public Method[] getMethods() throws
  1. getMethod 返回特定的方法,第一个参数为方法名称,后面的参数对应 Class 的对象。
代码语言:txt复制
public Method[] getMethod(String name, Class<?> ... parameterType) throws

通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。 程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。

反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

Java 反射主要提供以下功能:

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
  • 在运行时调用任意一个对象的方法;

用法:

获得 Class 对象

1Class.forName(“类的全限定名”)

2实例对象.getClass()

3类名.class (类字面常量)

实例判断

1.我们通过 instanceof 关键字来判断是否为某个类的实例

2.我们通过反射中 Class 对象的 isInstance() 方法来判断是否为某个类的实例

代码语言:txt复制
public native boolean isInstance(Object obj);

实例创建

1.使用 Class 对象的 newInstance() 方法来创建 Class 对象的实例

代码语言:txt复制
Class<?> c = String.class;
Object str = c.getInstance();

2.通过 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance() 方法来创建实例,这种方法可以用指定的构造器构造类的方法。

代码语言:txt复制
Class<?> c = String.class;
Contructor con = c.getConstructor(String.class);
Object obj = con.newInstance("2333");
sout(obj);

方法获取

  1. getDeclareMethods 方法返回类或接口声明的所有方法。(公共、保护、默认、访问和私有方法。不过没有继承的方法)。
代码语言:txt复制
public Method[] getDeclareMethods() throws SecurityException
  1. getMethods 方法返回某个类的所有 public 方法,包括继承的公用方法。
代码语言:txt复制
public Method[] getMethods() throws
  1. getMethod 返回特定的方法,第一个参数为方法名称,后面的参数对应 Class 的对象。
代码语言:txt复制
public Method[] getMethod(String name, Class<?> ... parameterType) throws

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞