JavaSE进阶第十九天——注解(JavaSE完结)

23 篇文章 0 订阅
15 篇文章 0 订阅

注解

注解的概念

注解:注解是一种引用数据类型。是一种约束、一种规范。约束类或方法或属性在指定范围内使用。

概念说的很模糊,很抽象对吧。
首先,我们得分清楚什么是注解什么是注释
注解:给机器看的。@符号开头的,一般置于类或方法或属性上方。
在这里插入图片描述注释:给人看的
在这里插入图片描述注释一共有三种形式:

第一种:双斜杠
//注释内容

第二种:/* */
/*
	注释内容
*/

第三种:/** * */  也叫文档注释,可以输出为文档
/**
*	注释内容
*/

搞清楚两者的却别之后,现在我们就可以继续往下讲了。

注解的使用

  1. jdk注解

    	1. @Deprecated:这个注解表示过时。可以用在构造方法、属性、方法、模块等,表示方法、属性、模块等已经过时,不建议使用。
    	3. @Override:这个注解表示重写。用在方法上。最常见的就是我们的方法重写了。不信你去看你重写方法的时候方法上面有没有这个注解。
    
  2. 自定义注解
    步骤:

    • 创建自定义注解
      语法
      public @interface 注解名{
      数据类型 属性名();//这是属性不是方法
      }

      注意:注解的属性看起来很像方法。但是,在注解中这就是属性。

    • 给注解打上元注解 :
      首先,什么是元注解呢?
      元注解实际上就是注解的注解。怎么理解这句话呢?看示例

      在这里插入图片描述
      @Target:指定你的注解使用范围
      例如:@Target({ElementType.TYPE,ElementType.METHOD})表示注解只能使用在类和方法上。
      ElementType是一个枚举类,里面保存的就是注解的范围常量。
      @Retention(RetentionPolicy.RUNTIME)表示这个注解存储在字节码种,可以通过反射找到注解并输出。
      RetentionPolicy枚举中的值只有三个,分别是:

      • Source :你的注解可以在.java文件(源文件)中找到
      • Class :你的注解可以在.class(字节码)文件中
      • Runtime :你的注解存在字节码中,通过反射找到注解并输出

知道了元注解和自定义注解语法后,我们就可以自己编写属于我们自己的注解了。
这里我们写个示例看看吧:

/**
 * 我的注解
 */
@Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.CONSTRUCTOR})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {

    //一个属性时,属性名写value
    String value();
}

/**
 * 打上注解
 */
@MyAnnotation("hello")
public class Student2 {
   // @MyAnnotation("world")
    private String name;
    @MyAnnotation("ok")
    public Student2() {}
    @MyAnnotation("method")
    public void show() {


    }
}

当我们的注解中只有一个属性的时候,我们在添加注解后括号内可以不用写属性的名字,直接给属性赋值就行了。

我们还可以给我们的注解中的属性添加一个默认值:

@Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.CONSTRUCTOR})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	//添加默认值
    String value() default "张三";//默认值为张三
}

当我们指定了元注解@Retention的值为RetentionPolicy.RUNTIME的时候,我们就可以使用反射来获取注解属性了。

/**
*	自定义注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String username();
    String password();
}

/**
*	使用自定义注解
*/
public class MyAnnotationTest {

    @MyAnnotation(username ="lisi",password = "123")
    public void doSome(){
    }
}

/**
*	使用反射获取自定义注解的属性
*/
class AnnotationReflectTest{
    public static void main(String[] args) {
        //获取MyAnnotationTest的doSome()方法上面的注解信息
        Class c = null;
        try {
            c = Class.forName("annotation6.MyAnnotationTest");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //获取方法
        Method doSomeMethod = null;
        try {
            doSomeMethod = c.getDeclaredMethod("doSome");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        //判断该方法上是否存在这个注解    isAnnotationPresent(注解.class)
        if (doSomeMethod.isAnnotationPresent(MyAnnotation.class)){
            //获取注解属性    getAnnotation(注解.class)
            MyAnnotation myAnnotation = doSomeMethod.getAnnotation(MyAnnotation.class);
            System.out.println(myAnnotation.username());
            System.out.println(myAnnotation.password());
        }
    }
}

好了,注解类大概就到这里吧。如有错误请指出。喜欢的话劳驾动动您的金手指点个赞。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值