java注解

一 、什么是注解?

注解是Java机制中用来修饰一个类、方法、属性的东西。运用注解我们可以影响类、方法、属性

二、Java自带的注解

Java本身提供了三个内置注解,他们分别是:

1. @Deprecated      表示java不赞成使用这些被描述的对象,如果我们使用了这些类、方法或者字段,编译器会给我们警告
2. @Override        表示子类要重写父类的方法,如果没重写,编译器会警告
3. @SuppressWarnings     使忽略编译器警告,比如在某个方法中我们做了一个不安全的类型转换,                                        用@SuppressWarnings修饰这个方法 ,编译器就不会警告了

三、元注解

元注解用来注解注解,java提供了4个元注解:

@Retention @Target @Documented @Inherited

@Retention用来定义当前注解的作用范围:

  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @interface MyAnnotation {  
  3.   
  4.     String   value() default "";  
  5.   
  6. }

上面的代码表示Myannotation这个注解只在运行时有效

  • RetentionPolicy.SOURCE : 注解只存在于源码中,不会存在于.class文件中,在编译时会被忽略掉
  • RetentionPolicy.CLASS:注解只存在于.class文件中,在编译期有效,但是在运行期会被忽略掉,这也是默认范围
  • RetentionPolicy.RUNTIME:在运行期有效,JVM在运行期通过反射获得注解信息

@Target注解用来约束自定义注解可以注解Java的哪些元素:

  1. @Target({ElementType.METHOD})  
  2. public @interface MyAnnotation {  
  3.     String   value();  
  4. }  

上面的代码表示Myannotation这个注解只能注解类的方法

  • ElementType.CONSTRUCTOR 用于描述构造器
  • ElementType.FIELD 用于描述域
  • ElementType.LOCAL_VARIABLE 用于描述局部变量
  • ElementType.METHOD 用于描述方法
  • ElementType.PACKAGE 用于描述包
  • ElementType.PARAMETER 用于描述参数
  • ElementType.TYPE   用于描述类、接口(包括注解类型) enum声明

@Inherited注解表示当前注解会被注解类的子类继承

如果一个父类被注解修饰了,则它的子类会继承注解

@Documented的作用是告诉JavaDoc工具,当前注解本身也要显示在java Doc中。

四、自定义注解

自定义一个注解和定义类、接口相似,是同等级的。

例子:

定义注解:

  1. @interface MyAnnotation {  
  2.     String   value();  
  3.     String   name();  
  4.     int      age();  
  5.     String[] newNames();  


五、使用注解:通过反射机制

例子://自定义一个注解
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.TYPE)  
public @interface MyAnnotation {  
    public String name();  
    public String value();  

//用注解修饰一个类

@MyAnnotation(name = "hello name",value = "hello value") class MyClass {  

  
}
public class test {  
    public static void main(String[] args) {  
        //通过反射获得MyClass的注解信息  
        MyAnnotation myAnnotation=MyClass.class.getAnnotation(MyAnnotation.class);  
        System.out.println(myAnnotation.name());  
        System.out.println(myAnnotation.value());  
    }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值