最全java反射讲解!!!JAVA动态性——反射机制(一:概念及用途及Type接口)

1. 相关概念:

  • 指的是可以于运行时加载、探知、使用编译期间完全未知的类。
  • 程序在运行状态中,可以动态加载个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意_个方法和属性
  • 加载完类之后,在堆内存中,就产生了一个 Class类型的对象(一个类只有—个Class对象),这个对象就包含了完整的类的结构信息我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射

2. 反射机制的常见用途:

  1. 动态加载类、动态获取类的信息(属性、方法、构造器)
  2. 动态构造对象
  3. 动态谓用类和对象的任意方法、构造器
  4. 动态调用和处理属性
  5. 获取泛型信息
  6. 处理注解

3. 为了了解JAVA的反射机制,我们首先要了解一下Type接口:

Type是Java编程语言中所有类型通用超级接口

包括:

  • raw types(原始类型,包括类,枚举,接口,注解,数组(但不包括泛型数组)),
  • parameterized types(参数化类型,如Set<String>,Map<String,String>,Class<?>),
  • array types(泛型数组和参数类型数组,如T[],List<String>[]),
  • type variables(类型变量,如T,K,V) and
  • primitive types(基本类型,如boolean,char,byte,short,int,long,float,double)

原始类型

 

 

 

 

基本类型

Class类实现,一般意义上的java类

Class是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象;

在程序运行期间,每一个类都对应一个Class对象,这个对象包含了类的修饰符、方法,属性、构造等信息,所以我们可以对这个Class对象进行相应的操作,这就是Java的反射;

 

int,float等java基本类型,其实也是Class

参数化类型

ParameterizedType<interface>的实现类

参数化类型,即泛型;例如:List<T>、Map<K,V>等带有参数化的对象

数组类型

GenericArrayType<interface>的实现类

泛型数组类型,用来描述ParameterizedType、TypeVariable类型的数组;即List<T>[] 、T[]等;

类型变量

TypeVariable<interface>的实现类

类型变量,即泛型中的变量;例如:T、K、V等变量,可以表示任何类;在这需要强调的是,TypeVariable代表着泛型中的变量,而ParameterizedType则代表整个泛型;

通配符

WildcardType<interface>的实现类

泛型表达式(或者通配符表达式),即? extend Number、? super Integer这样的表达式;WildcardType虽然是Type的子接口,但却不是Java类型中的一种;

 其中关于Class类:

java.lang

Class Class<T>

参数类型

T - 由此类对象建模的类的类型。 例如,String.class的类型是Class<String> 。

如果正在建模的类是未知的,请使用Class<?> 。

    1

    2

    3

public final class Class<T>

extends Object

implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class类的类表示正在运行的Java应用程序中的接口

可以表示为Class对象的各种类型:

枚举(enum)

是一种类

注释(annotation)

是一种接口

数组(array)

属于一个反映为类对象的类,该对象由具有相同元素类型维数的所有数组共享。

原始Java类型

(primitive type)

(boolean,byte,char,short,int,long,float,double)

可以看成类对象

关键字void

表示为类对象。

(class)

类 

猜你喜欢

转载自blog.csdn.net/qq_45173404/article/details/106447821
今日推荐