【图灵百科】Java注解 & 反射
2022-02-16 13:43:01
一.注解
1.1.什么是注释?
JDK5.0开始引入Annotation。
Annotation的作用:
不是程序本身,可以解释程序。(这和注释(注释)没什么区别)
不能被其他程序(如编译器等)读取。
Annotation格式:
注释以@注释名存在于代码中,还可以添加一些参数值,比如@suppreswarning(value=unchecked)
Annotation的使用范围(package.class.method.field等。)相当于给它们添加额外的辅助信息,我们可以通过反射机制编程访问这些元数据。
1.2.注释分类。
1.2.1.内置注释。
@overide:定义在java.lang.overide中,此注释仅适用于修辞方法,表示一种方法声明计划重写另一种方法声明。
@deprecated:定义在java.lang.deprecated中,可用于修辞.属性.类,表示不鼓励使用此类元素,通常是因为它有危险或更好的选择。
@supreswarning:定义为java.lang.supreswarning,用于抑制编译过程中的警告信息。
与前两种注释不同,您需要添加一个参数才能正常使用,这些参数已被定义。
@Suppreswarning(“all”)
@suppreswarning(“unchecked”)
@suppreswarning(value={unchecked,“deprecation”)
…
@Safevargs:当使用可变数量参数时,如果参数类型为泛型T,则会发出警告。此时,使用@Safevargs删除此警告。只能用于参数长度可变的方法或结构方法,方法必须声明为static或final,否则会出现编译错误。
@functionalinterface:用于约定函数接口。函数接口的意义主要用于Lambda表达式。
1.2.2.元注释。
元注释的作用是负责注释其他注释。Java定义了四种标准的meta-anotation类型,用于解释其他anotation类型。
这些类型和他们支持的类型可以在java.lang.annotion包中找到。(@target,@retention,documented,inherited)
@target:用于描述注释的使用范围(即被描述的注释可以用在哪里)
@retention:表示需要在什么级别保留注释信息来描述注释的生命周期(Source@documented:表示注释将包含在javadoc中。
@Inherited:说明子类可以继承父类中的注释。
@Repeatable:当没有@Repeatable修改时,注释只能在同一位置出现一次。
@Target中的属性说明:
Elementype.TyPE:可修饰类.接口或枚举类型。
Elementype.FIELD:可修改成员变量。
Elementype.METHOD:可以修改方法。
Elementype.PARAMETER:可修改参数。
Elementype.CONSTRUCTOR:可修饰结构器。
Elementype.LOCAL_VARIABLE:可修改局部变量。
Elementype.ANNOTATION_TYPE:可修改注释。
PACKAGE:可以修改包。
@Retention中的属性说明。
RetentionPolicy.SOURCE:注释只存在于源代码中,编译成class后就消失了。@Override就是这个注释。
RetentionPolicy.CLASS:注意java文件编程成.class文件后,仍然存在,但运行后消失。@Retention的默认值,即当没有显式指定@Retention时,就会是这种类型。
RetentionPolicy.Runtime:注释运行后仍然存在。程序可以通过反射获取这些信息,如自定义注释@JDBCConfig。
1.3.自定义注释。
下面是一个简单的自定义注释。如果注释中有一个属性,属性名称为value,您可以在使用注释时直接填写属性值。您不需要使用属性名=属性值。如果您设置了默认值,则无需填写。
@Retention.Runtime)
@target(elementtype.TyPE)
public@interfacemantion
privatestringvalue()defalut”;
}
二.反射
2.1.什么是反射。
Reflection(反射)是Java被视为动态语言的关键。反射机制允许程序通过ReflectionAPI获取任何类型的内部信息,并可以直接操作任何对象的内部属性和方法。clasc=class.forname(“java.lang.string”)
加载类别后,一个Class类型的对象(一个类别只有一个Class对象)产生在堆内存的方法区域,包含完整类别的结构信息。我们可以通过这个对象看到类别的结构。这个对象就像一面镜子,通过这面镜子看到类的结构,所以我们的形象被称为:反射。
2.2.Java反射机制的研究与应用。
在操作过程中判断任何对象所属的类别。
在运行过程中构建任何类别的对象。
判断任何类别的成员变量和方法。
运行时获取范型信息。
调用任何对象的成员方法和变量。
操作时处理注释。
生成动态代理。
。。。
2.3.Java反射优缺点。
优点:可实现动态创建对象和编译,灵活性高。
缺点:对性能有影响。反射的使用基本上是一种解释操作。我们可以告诉JVM我们想做什么,以满足我们的需要。这种操作总是比直接执行相同的操作慢。
2.4.反射相关的主要API。
Java.lang.Class:代表一类。
java.lang.reflection.Method:代表方法。
java.lang.reflection.Field:代表类成员变量。
java.lang.reflection.constructor:代表性结构器。
。。。
在Java中,Object类中定义了以下方法,将所有子类继承Publicfinalnatinatinatinatinatinatinasetclass();这种方法的返回值类型是Class类,这是Java反射的来源。事实上,从程序的运行结果来看,所谓的反射也很容易理解,即可以通过对象反射找到类的名称。
2.5.常用的Class类方法。
方法能说明。
Staticclassforname(Strname)是指定类名name的Class对象。
Tnewince(),Ta缺货CSS对象的实例。
String。