当前位置: 首页 > 图灵资讯 > 图灵百科> 【图灵百科】Java注解 & 反射

【图灵百科】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。