前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA中的注解

JAVA中的注解

作者头像
星哥玩云
发布2022-09-14 20:34:17
5230
发布2022-09-14 20:34:17
举报
文章被收录于专栏:开源部署开源部署

1、注解概述

1.1、注解的定义

注解就是注释、解释的意思。只不过注解是一种更“官方”的解释性说明信息!

1.2、注解和注释的区别

注解的字面意思是注释、解释的意思,和Java中的注释一样,都有解释、说明的意思。

只不过,注释是程序猿自己写的,解释说明的对象是自己或者是其他程序猿。而注解就不一样了,注解是一种很官方的解释,由JDK或者是咱们程序猿按照特定的格式定义,可以给咱们程序猿看,但更重要的是给JVM看,JVM看了之后就会按照相应的注解信息去解释或执行被标注的程序。

比方:注释就是文言文上我们自己添加的对文言文的说明性信息;注解就是文言文下方官方添加的解释性信息。

总结:注释和注解都有解释说明的作用,只不过二者说明的对象的侧重点不同。注释是给人看的,而注解更多的是给JVM看!JVM会根据注解信息执行响应的操作!

1.3、注解的历史

注解是JDK1.5之后才有的一门技术,本来JDK开发出注解这门技术的时候是想给自己用的,并没想到会给别人用,但是因为java是一门很开放的语言,或者说sun公司是一家很open的公司,所以就把实现注解的接口对外公开了。 很多公司发现有注解这门技术之后,发现很好用,于是就把他发扬光大了。

例如Spring公司、Hibernate、Struts2等公司都支持注解开发!

1.4、注解的作用

  1. 直接作用:解释、说明
  2. 间接作用:替代配置文件(现在知道就行,中级的时候会讲)

1.5、注解的种类

  1. JDK官方注解(原生注解)
  2. 自定义注解
  3. 元注解(元数据)

2、JDK官方注解

​ @override:检查子类是否是重写父类中的方法 ​ @Deprecated:标记过时 ​ @SuppressWarnings(“all”):压制错误警告

2.1、@override代码演示

​ 正确重写了父类方法

代码语言:javascript
复制
public class Person {
    public void eat(){
        System.out.println("人吃饭。。。");
    }
}
public class Student extends Person {
    @Override
    public void eat() {//方法名正确,不会报错!
        System.out.println("学生吃饭。。。");
    }
}

​ 错误重写了父类的方法

代码语言:javascript
复制
public class Person {
    public void eat(){
        System.out.println("人吃饭。。。");
    }
}
public class Student extends Person {
    @Override
    public void eot() {//方法名写错了,编译器会报错! 如果没有注解,则不会报错!
        System.out.println("学生吃饭。。。");
    }
}

错误信息

image20191213160245927.png
image20191213160245927.png

2.2、@Deprecated代码演示

项目1.0

代码语言:javascript
复制
public class DepDemo {
    public void methodA{//这是项目1.0版本的时候的方法

    }
}

项目2.0

代码语言:javascript
复制
public class DepDemo {
    @Deprecated //标记该方法为过时的方法
    public void methodA(){//该方法颜色会改变或有删除线
        //项目2.0版本的时候发现该方法不好!设计有问题,有缺陷!但不能删除或修改该方法!因为之前有人用,不希望以后的人再用他,所以把他标记为过时!

    }
    //用methodB替代methodA
    public void methodB(){

    }
}

添加Deprecated之后的效果图

image20191213155630792.png
image20191213155630792.png

2.3、@SuppressWarnings(“all”)

注解后面的()放的是注解的参数

压制错误警告!

代码语言:javascript
复制
@SuppressWarnings("all")
public class SupreWarDemo {
    public static void main(String[] args) {
        int i;
        ArrayList list = new ArrayList<>();
    }
}

3、自定义注解

3.1、引入

​ 定义类的关键字是class ​ 定义接口的关键字是interface ​ 定义枚举的关键字是enum ​ 那么定义注解的关键字是?@interface ​ 大家现在可以把注解理解成一个特殊的类,定义类的格式和定义注解的格式是一样的, 只不过关键字换成注解的关键字而已。

3.2、格式

代码语言:javascript
复制
public @interface SelfDefAnno {
}

3.3、注解的成员有哪些?

类:成员变量、成员方法、构造方法

注解:成员变量(范围也有限定)

注解定义成员变量和类定义成员变量格式不一样

代码语言:javascript
复制
public @interface SelfDefAnno {
String name();
	int age() default 10;//给默认值
//	Date d(); 不可以 报错原因在下发
	Class clazz();
	Color c();//枚举
	int[] ages();
}
enum Color{
	RED,YELLOW;
}
@interface SelfDefAnno2 {
	String name();
}

报错原因:only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof 只能是8种基本数据类型、Class类型、注解类型,或者这些类型的一维数组

image20191213161002141.png
image20191213161002141.png
image20191213161224981.png
image20191213161224981.png

3.4、自定义注解的使用

类:对象 new 类型()

自定义注解:造对象 @==new

注解的参数就是注解定义时内部的成员变量

代码语言:javascript
复制
@SelfDefAnno(name="zs",age=18,clazz=int.class,c=Color.YELLOW,ages= {1,2,3},s=@SelfDefAnno2(name="zs"))
class A{
	
}

说明:注解前面说过其实就是一个特殊的类!这里的“@”符号其实就相当于是关键字“new”,也就是说使用注解其实就是用注解这个“类”,创建一个对象!

注意:注解在使用的时候,其属性必须全部有值!要么定义的时候给默认值,要么使用的时候给指定值,二者必须出现其一!

注解:注解在使用时,里面的成员变量必须有值!如果不手动给值,他是不会有默认值!

3.5、default关键字和value变量名

​ (1)default关键字的使用 ----->定义的时候给成员变量指定默认值

image20191219141355420.png
image20191219141355420.png

​ (2)value变量名的特殊用法 ---->给成员变量赋值时不用给变量名

image20191219140842898.png
image20191219140842898.png

4、元注解

4.1、概念解释

​ 所谓元注解就是注解的注解,就是加在注解上的注解。

4.2、必须掌握的元注解

  • ​ @Rentention:用于指定该 Annotation 可以保留的域
  • ​ @Target :指定注解用于修饰类的哪个成员,不指定,可以出现在任何位置

@Rentention

代码语言:javascript
复制
@Retention(RetentionPolicy.RUNTIME)//value=RetentionPolicy.RUNTIME
public @interface MetaAnno {

}

程序生命时机

image20191219144855607.png
image20191219144855607.png

@Retention的参数有三个:

  • RetentionPolicy.SOURCE :表示注解只在源码阶段有效!
  • RetentionPolicy.CLASS :表示注解在源码和编译阶段有效!
  • RetentionPolicy.RUNTIME :表示注解在源码、编译和运行时有效!

@Target

代码语言:javascript
复制
@Target(ElementType.FIELD)//value=ElementType.FIELD
public @interface MetaAnno {

}

@Target注解中的参数至少有三个

  • ElementType.FIELE :表示能出现在属性上
  • ElementType.METHOD :表示能出现在方法上
  • ElementType.TYPE :表示可以出现在类上
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、注解概述
    • 1.1、注解的定义
      • 1.2、注解和注释的区别
        • 1.3、注解的历史
          • 1.4、注解的作用
            • 1.5、注解的种类
            • 2、JDK官方注解
              • 2.1、@override代码演示
                • 2.2、@Deprecated代码演示
                  • 2.3、@SuppressWarnings(“all”)
                  • 3、自定义注解
                    • 3.1、引入
                      • 3.2、格式
                        • 3.3、注解的成员有哪些?
                          • 3.4、自定义注解的使用
                            • 3.5、default关键字和value变量名
                            • 4、元注解
                              • 4.1、概念解释
                                • 4.2、必须掌握的元注解
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档