其他分享
首页 > 其他分享> > 注解与反射的学习

注解与反射的学习

作者:互联网

注解

反射

Reflection是Java被视为动态语言的关键,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

Class c=Class.forName("java.lang.String");
正常方式:引入需要的“包类”名称->通过new实例化->取得实例化对象
反射方式:实例化对象->getClass()方法->得到完整的“包类”名称

优点:可以实现动态创建对象和编译,体现出很大的灵活性

缺点:对性能有影响,使用反射基本上是一种解释操作。告诉JVM,我们希望做什么并且它满足我们的要求,这类操作总是慢于执行相同的操作。

Class类:在Object类中定义了以下的方法,此方法将被所有子类继承

public final Class getClass();

反射相关的主要API
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器 

class类的常用方法

方法名 功能说明
static ClassforName(String name) 返回指定类名name的Class对象
Object newInstance() 调用缺省构造函数,返回Class对象的一个实例
getName() 返回此Class对象所表示的实体(类,接口,数组或者void)的名称
Class getSuperClass() 返回当前Class对象的父类的Class对象
Class[] getinterfaces() 获取当前Class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器
Constructor[] getConstructors() 返回一个包含某些Constructors对象的数组
Method getMothed(String name,Class.. T) 返回一个Method对象,此对象的形参类型为paramType
Field[] getDeclaredFields() 返回Field对象的一个数组

获取Class类的实例

Class clazz=Person.class;
Class clazz=person.getClass();
Class clazz=Class.forName("类路径");

哪些类型可以有Class对象

class:外部类,成员(成员内部,静态内部类),局部内部类,匿名内部类
Interface:接口
[]:数组
enum:枚举
annotation:注解@interface;
primitive type:基本数据类型
void

类的加载与ClassLoader

什么时候会发生初始化

类加载器

获取运行时的完整结构

通过反射获取运行时类的完整结构

Field,Method,Constructor,Superclass,Interface,Annotation

有了Class对象,能做什么

标签:初始化,java,反射,对象,学习,注解,Class,加载
来源: https://www.cnblogs.com/MRday/p/16594452.html