导图社区 Day17
本图整理了java.Annotation(注解)和java.Reflection(反射)的知识,喜欢的可以点个赞收藏一下哟~
网络编程基础总结,内容有网络编程的概述、网络通信的要素、IP、端口、通讯协议、TCP协议的通讯、UDP协议的通信、URL、Tomcat,一起来看。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
Day17
java.Annotation(注解)
什么是注解
不是程序本身,可以对程序作出解释
可以被其他程序读取
格式:@注释名,可以添加一些参数
可以在package、class、method、filed等上面
通过反射机制编程实现访问
内置注解
@Override
@Deprecated
表示不鼓励程序员使用这样的元素
@SuppressWarnings
all
unchecked
value={"unchecked","deprecation"}
用于抑制编译时的警告信息
元注解
@Target
描述注解的使用范围
value = ElementType.TYPE
@Retention
描述注解的生命周期
SOURCE<CLASS<RUNTIME
RetentionPolicy.RUNTIME
@Document
说明该注解将包含在javadoc中
@Inherited
说明子类可以继承父类的该注解
自定义注解
@interface自定义注解
自动继承java.lang.annotation.Annotation接口
其中每一个方法实际上是声明了一个配置参数
default
-1表示不存在
只有一个参数成员:value
通常null、0作为默认值
java.Reflection(反射)
概述
动态语言
类运行时可以改变其结构的语言
静态语言
Reflection(反射)是java视为动态语言的关键
获得反射对象
Class类
对于每个类而言,JRE都为其保留了一个不变的Class类型的对象
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象
这个对象包含了完整的类的结构信息,可通过这个对象看到类的结构
获得Class实例
Class clazz = Person.class;
Class clazz = person.getClass();
Class clazz = Class.forName("demo.Student");
有哪些类型可以有Class对象
class
interface
[]
enum
annotation
primitive type
void
类加载内存分析
加载
静态数据—>方法区运行时数据结构
生成Class对象
链接
java类的二进制代码合并到JVM
验证
准备
正式为类变量(static)分配内存并设置类变量默认初始值的阶段
解析
初始化
执行类构造器<clinit>
类构造器是构造类信息的,不是构造该类对象的构造器
初始化一个类时,若发现其父类没有初始化则先触发其父类的初始化
本类
静态代码块|静态变量—>非静态代码块|实例变量—>构造函数
什么时候会发生类初始化
类的主动引用
new 类对象
调用类静态成员、方法
对类进行反射调用
类的被动引用(不会初始化)
子类引用父类静态变量
数组开辟空间
引用类常量
类加载器
引导类加载器
装在核心类库(rt.jar)
无法访问
扩展类加载器
ext目录下的类
系统类加载器
双亲委派机制
判断自定义类是否可用
获取运行时类完整结构
调用Class的方法
注意
getFields
只能找到public属性
getDeclaredFields
找到全部属性
class对象用途
创建类对象
newInstance()方法
类需有无参构造
类的构造器访问权限需足够
若无无参构造
通过getDeclaredConstructor(Class...parameterTypes)获得本类的指定形参类型的构造器
传参
(User) constructor.newInstance("小白", 001, 18)
通过Constructor实例化对象
调用指定方法/属性
getMethod(String name,Class...parameterTypes)
注意使用该方法是通过invoke激活
Object invoke(Object obj,Object...args)
注意若方法/属性声明为private,需要setAccessible(true)
setAccessible
启动或禁用访问安全检查开关
可提高反射效率
反射操作泛型
反射操作注解
getAnnotation
getAnnotations