内置注解
-
@Override(覆盖,重写)
定义在java.lang.Override中,用于修饰方法,只能用于重写父类的方法的时候使用
-
@Deprecated(不赞成,强烈反对)
定义在java.lang.Deprecate中,此注解可用于修饰方法,属性和类,表示不鼓励程序员使用这样的元素(但可以使用)通常是因为它很危险或者存在更好的选择。
并且表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。
-
SuppressWarnings(镇压警告)
定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。
与前两个注释有所不同的是,这个注解需要添加一个系统定义好的参数才能正确使用。
相关参数如下:
参数 | 说明 |
---|---|
deprecation | 使用了过时的类或者方法的警告 |
unchecked | 执行了未检查的转换时的警告,如使用集合时未指定泛型 |
fallthrough | 当在switch语句使用时发生case穿透 |
path | 在类路径、源文件路径等中有不存在路径的警告 |
serial | 当在可序化的类上缺少serialVersionUID定义时的警告 |
finally | 任何finally字句不能完成时的警告 |
all | 关于以上所有情况的警告 |
— 压制一种的写法为:
— 压制两种或两种以上的写法为:
元注解
-
元注解的作用是负责注解其他注解。java定义了4个标准的meta-annotation类型,它们被用来提供对其他annotation类型做出说明。
-
四个类型分别为
-
@Target
-
用于描述注解的使用范围()
-
-
@Retention(保留,维持)
表示需要在什么级别保存该注释信息,用于解释注释的生命周期
作用等级:SOURCE<CLASS<RUNTIME
-
@Documented
-
@Inherited
-
自定义注解
反射机制
动态语言
表示程序运行时,可以改变程序结构或变量类型,java不是动态语言,但是有一定的动态性,可以利用反射机制、字节码操作活得类似动态语言的特性。
反射机制
指的是可以与运行时加载,探知,使用编译期间完全未知的类。
Class类介绍
-
java.lang.Class类十分特殊,用来表示java中类型(class、interface、enum、annotation、primitive type、void)本身
— Class类的对象包含了某个被加载类的结构,一个被加载的类对应一个Class对象。
— 当一个Class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM便会自动产生一个Class对象。
-
Class类是Reflection的根源。
— 针对任何想动态加载、运行的类,只有先获得相应的Class对象。
Class类的对象获取方法
-
运用getClass()
-
运用Class.forName() (最常被使用)
-
运用.class语法
Class clazz=Class.forName(包名+类名);
Class类常用的方法
clazz是上面的类名。
-
获取类的名字
-
clazz.getName() —获得包名+类名
-
clazz.getSimpleName() —获得类名
-
-
获取属性信息
-
clazz.getFields() —获得public的field
-
clazz.getDeclaredFieds() —获得所有的field
-
-
获取方法信息
-
clazz.getMethods() —获得public的方法
-
clazz.getDeclaredMethods() —获得所有的方法
-
Method method=clazz.getDeclaredMethod(“方法名",方法的返回值类型(没有的话为空)); —获取单个方法
-
-
获取构造器信息
-
Constructor[] constructors=c.getDeclaredConstructors();\\获得所有构造器
-
Constructor[] constructors=c.getConstructors();\\获得私有构造器
-
反射机制的常见作用
-
动态加载类、动态获取类的信息(属性,方法,构造器)
-
动态构造对象
-
动态调用类和对象的任意方法、构造器
-
动态调用和处理属性
-
获取泛型信息
-
处理注解