欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【Java常用】注解与反射_1.注解

【Java常用】注解与反射_1.注解

2025/9/19 10:57:39 来源:https://blog.csdn.net/qq_53433382/article/details/145611974  浏览:    关键词:【Java常用】注解与反射_1.注解

目录标题

  • 1.什么是注解Annotation
  • 2.内置注解
    • 2.1内置注解
      • 2.2 @SuppressWarnings (关闭警告)
      • 2.3@SuppressWarnings (关闭警告)
  • 3 元注解
  • 4.自定义注解 @interface

1.什么是注解Annotation

◆Annotation是从JDK5.0开始引入的新技术
◆Annotation的作用:
不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别)
但是注解就像是一个特殊的标签贴纸,不仅人能看懂,电脑也能读取

可以被其他程序(比如:编译器等)读取.

// 这是普通注释,只有人能看懂
// 下面是一个注解,电脑也能理解
@Override
public void sayHello() {System.out.println("Hello");
}.//什么是注解
//继承
public class Test01  extends  Object{
//    @Override  重写的注解@Overridepublic  String toString(){return super.toString();}
}

@Ove

rride 这个注解就是告诉编译器:“嘿,这个方法是重写父类的方法”。如果你不小心写错了方法名,编译器会提醒你。

◆Annotation的格式:
注解是以"@注释名"在代码中存在的,还可以添加一些参数如:@SuppressWarnings(value=“unchecked”)
◆ Annotation在哪里使用?
可以附加在package,class,method,field 等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问

生活中的类比:
普通注释就像是你给衣服贴的便利贴
注解就像是衣服上的洗涤标签,不仅有信息,洗衣机还能识别并据此选择洗涤程序

注解可以贴在:
整个程序包(package)上
类(class)上
方法(method)上
变量(field)上

注解有检查和约束的功能

2.内置注解

2.1内置注解

@Override:定义在java.lang.Override 中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明,


//内置注解
//继承class Animal{public void makeSound(){System.out.println("动物叫");}}//继承
public  class Dog extends Animal{@Overridepublic  void makeSound(){System.out.println("wwwwww");}}

2.2 @SuppressWarnings (关闭警告)

@Deprecated:定义在java.ang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

class Calculator {@Deprecated  // 告诉其他程序员:这个方法已经过时了,不建议使用public void oldMethod() {// 旧的计算方法}public void newMethod() {// 新的更好的计算方法}
}
}

2.3@SuppressWarnings (关闭警告)

@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息.口 与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的我们选择性的使用就好了

@SuppressWarnings("unchecked")  // 告诉编译器:我知道这里可能有风险,但请不要警告我
public void someMethod() {// 可能会产生警告的代码
}

@SuppressWarnings(“all”)
@SuppressWarnings(“unchecked”)
@SuppressWarnings(value=f"unchecked",“deprecation”)
等等…

3 元注解

元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来
提供对其他annotation类型作说明这些类型和它们所支持的类在java.lang.annotation包中可以找到.(@Target,@Retention@Documented ,@inherited )
@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

//测试元注解import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
//测试元注解
//@MyAnnotation 放在类上会直接报错:class and interface is exceputed
@MyAnnotation// 在定义注解后加了 element 类型加上type 就不会报错 
public class Test02 {@MyAnnotationpublic  void test(){}}//定义一个注解
//@Target(value = ElementType.METHOD)//自定义的 我的注解 作用范围 只能用在方法上
@Target(value = {ElementType.METHOD,ElementType.TYPE})//自定义的 我的注解 作用范围 既能用在方法上 又能用在类上@interface MyAnnotation{}

@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期>(SOURCE<CLASS < RUNTIME)

一般就写 runtime

@Document:说明该注解将被包含在iavadoc中
@Inherited:说明子类可以继承父类中的该注解

package com.zyy.annotation;
//测试元注解import java.lang.annotation.*;//测试元注解
//@MyAnnotation 放在类上会直接报错:class and interface is exceputed
@MyAnnotation// 在定义注解后加了 element 类型加上type 就不会报错
public class Test02 {@MyAnnotationpublic void test() {}}//定义一个注解
//@Target(value = ElementType.METHOD)//自定义的 我的注解 作用范围 只能用在方法上
@Target(value = {ElementType.METHOD, ElementType.TYPE})//自定义的 我的注解 作用范围 既能用在方法上 又能用在类上
@Retention(value = RetentionPolicy.RUNTIME)
//表示注解在什么时候有效  源码的时候,过了源码变成class 就没效了,runtime就是所有的地方都有效,运行的时候也有效。runtime>class>source
@Documented //表示是否将注解生成在javadoc 中@Inherited//子类可以继承父类的注解 
@interface MyAnnotation {}

4.自定义注解 @interface

自定义注解

使用 @interface自定义注解时,自动继承了iava.lang.annotation.Annotation接囗
分析
@ interface用来声明一个注解,格式:public @ interface 注解名{定义内容}√ 其中的每一个方法实际上是声明了一个配置参数
√ 方法的名称就是参数的名称.
√ 返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum).
√ 可以通过default来声明参数的默认值
√ 如果只有一个参数成员,一般参数名为value
√ 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值


package com.zyy.annotation;import java.lang.annotation.Inherited;public class Test03 {//使用以下的注解@MyAnnotation3(name = "zhang")public void test() {System.out.println("学习中。。。。");}
}@interface MyAnnotation3 {//定义一个参数,参数名是name,类型是String,没有默认值 ,所以必须传String name();//定义一个带默认值的参数int age() default 18;//定义一个String 数组参数String[] hobby() default {"reading"};}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词