Java反射-初步入门

时间:2021-02-25 23:33:39

Java反射-初步入门

学反射先了解什么是反射。

百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

上面提到了类和对象,先了解什么是类和对象。

java中类:

1.抽象描述

类:类是客观存在的、抽象的、概念东西。

对象:对象是具体的,指一个具体的东西。

打比方:饮料是一个类,可乐、雪碧就是对象。

总结一句话:类是对象的模版,对象是类的具体实现。

2.具体描述

Java中创建一个类:

//User是创建的类,User自己写的类名

public class User{

Java中对象:

1.对象声明

User user;          //User是上面的类,user是自己写的对象名

2.对象创建

User user=new User();  //User是类,user是起的对象名 这是创建对象。

Class(大写的C)类:用于描述一切类、接口。枚举是一种类,注解是一种接口。

Class实例:就是指JVM中的一份字节码。

想用反射就需要得到一份字节码。(一个类在JVM中只有一份字节码)

得到Class实例的三种方式:

  1. 类名.class()
  2. Class.forName(里面写的是类的字符串(包名+类名))
  3. 通过对象获得Class实例:对象名.getClass()

第一种方式:

Class clazz1=User.class();

第二种方法:

Class clazz2=Class.forName("com.chengxuyuanzhilu.User");

第三种方法:

User user=new User();

Class clazz3=user.getClass();

clazz1==clazz2==clazz3因为表示的都是JVM中的一份字节码(User.class)

在八大包装类型中都有一个常量TYPE,TYPE表示该包装类对应的基本类型的Class实例。如:

Integer.TYPE==int.class;

java 反射API

知道怎么得到Class实例接下来就很简单了

使用jdk API可看到Class中的方法,就可以用反射调用了。当然我们也可以尝试引入java源码,直接读源码

获得类中的构造器

API中的关于构造器的方法(四个方法)

公共的构造器

Java反射-初步入门

Declared所有的构造器和访问权限无关

Java反射-初步入门

新建一个TestClass类,其中有三个构造方法 一个私有的

Java反射-初步入门

通过反射获取这两个构造方法(除私有的构造方法),控制台输出

Java反射-初步入门

如何得到私有的构造方法呢

Java反射-初步入门

调用构造方法创建对象

上面知道如何得到构造方法了,接下来就可以用构造方法中的方法创建对象了。

Jdk api搜索Constructor就可以看到其中的方法了,我们要使用的就是通过构造方法得到对象。

Java反射-初步入门象。

API中的关于Method的方法(四个方法)

getMethods获取包括自身和继承过来的所有public方法

Java反射-初步入门

获取自身所有的方法(不包括继承的,和访问权限无关)

Java反射-初步入门

得到方法

TestClass中的方法

Java反射-初步入门

通过反射得到方法

Java反射-初步入门

然后api 搜索Method 通过反射使用里面的方法了

invoke(Object obj, Object... args)            对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

Java反射-初步入门

使用反射调用静态方法

调用静态方法method.invoke(null) 参数改为null

使用反射获取字段

Api class  里面有同样有四种获取字段的四种方法

Java反射-初步入门

获得字段 可以通过api 搜索Field 就可以使用其中的方法了

Field set get方法

Java反射-初步入门

看完后 是不是感觉反射很简单了