java的反射机制相关方法(未完)

 

首先了解java程序的几个过程:

1.java源码阶段(通过javac编译)==>2.class字节码阶段(jvm类加载器)==>3.runtime阶段

 

反射: java反射机制是在运行中,对任意一个实体,能够知道这个类所有的属性和方法,对于任意一个实体,都能够调用它的属性和方法.这种动态获取信息和动态调用对象方法的功能成为java语言的反射机制.

 

一句话,在程序运行过程中去操作类和对象.

 

 

Class


 

Class代表类的实体, 在java运行是代表类和接口,在这个类中提供了很多的方法,

其相关的方法

 

 

方法

用途

asSubClass(Class<T> clazz)

把传递的类的对象转换成代表其子类的对象

getClassLoader()

获得类的加载器

getClasses

返回一个数组,包含该类中所有公共类和接口对象

getDeclaredClasses

返回一个数组,数组中包含该类中所有类和接口的对象

forName(String className)

根据类名返回类的对象

getName()

获得类的全限定名字(全类名)

newInstance()

创建类的实例

getPackage()

获得类的包

getSimpleName()

获得类的名字

getSuperclass()

获得当前类继承的父类的名字

getInterfaces()

获得当前类实现的类或是接口

.class

获得当前对象的类

 

 

 

 

 

获取类中相关字段的方法

 

getField(String name)

获得某个共有字段对象

getFields()

获得所有共有字段对象

getDeclaredField(String name)

获得某个字段对象

getDeclaredFields()

获得所有字段对象

 

 

获得类中注解相关方法

 

getAnnotation(Class<A> annontationClass)

返回改类中与参数类型匹配的公有注解对象

 

 

 

获得类中构造器相关方法

 

getConstructor(Class…<?> parameterTypes)

获得该类中与参数类型匹配的公有构造方法

getConstructors()

获得该类的所有公有构造方法

getDeclaredConstructor(Class…<?> parameterTypes)

获得该类中于参数类型匹配的构造方法

getDeclaredConstructors()

获得该类所有构造方法

 

 

 

获得类中方法相关的方法

 

getMethod(String name,Class<?> parameterTypes)

获得该类某个共有方法

getMethods()

获得该类所有共有方法

getDeclaredMethod(String name,Class<?> parameterTypes)

得该类某个方法

getDeclaredMethods()

获得该类所有方法

 

 

类中其他重要的方法:

 

isAnnotation()

如果是注解类型则返回true

isAnnontationPresent(Class<? extends Annontation annotationClass>)

判断这个Class是否有指定注解

如果是指定注解类型则返回true

isArray()

如果是数组类型则返回true

isEnum()

如果是枚举类型则返回true

isInstance(Object obj)

如果obj是该类实例则返回true

isInterface

如果是接口类型返回true

 

 

Field类:


 

 

Field代表类的成员变量,成员变量(字段)和成员属性是两个概念,比如,当一个User类中有一个name变量,那么这个时候,我们就说它有name这个字段.但是如果没有getName和setName这两个方法,那么这个类就没有name属性.反之,如果这个类拥有getAge和setAge这两个方法,不管有没有age字段,我都认为它有age这个属性.

 

 

方法

用途

get(Object obj)

获得obj中对应的属性值

set(Object obj,Object value)

设置obj 中对应属性值

setAccessible

暴力反射,忽略权限访问限制符

 

 

Method类


Method代表类的方法(不包括构造方法)

 

Invoke(Object obj,Object ... args)

传递Object对象及参数调用该对象对应的方法

setName

获取方法名

setAccessible

暴力反射,忽略权限访问限制符

 

Invoke方法的用处:SpringAop在切面方法执行的前后进行某些操作,就是使用的invoke方法.

 

 

Constructor类(用的比较少)


Constructor代表类的构造方法

 

 

方法

用途

newInstance(Object.. initargs)

根据传递的参数创建类的对象

 

Constructor类在实际开发中使用极少,几乎不会使用Constructor,因为:Constructor违背了java的一些思想,比如:私有构造不让用户去new对象:单例模式保证全局只有一个该类的实例,而Constructor则可以破坏这个规则.

 

 

 

案例:写一个小工具,可以帮助我们创建任意的对象,并且执行其中任意方法.

案例:通过反射,验证运行中泛型会被插除.

 

posted @ 2020-08-21 15:40  与f  阅读(268)  评论(0编辑  收藏  举报