注解

注解的概述和分类


*  注解的概念:

*          Java提供了一种和源程序中的元素关联的任何信息和任何元数据的方法和渠道

*          源程序: Java文件

*          元素: 构造方法/成员方法/成员变量/访问权限修饰符/注解...

*          任何信息: 就类似于Java中的注释,起到对元素的解释说明

*          任何元数据: 学完了元注解之后再来讲解

*          

*  注解可以理解为一种使用相关信息来绑定Java文件元素的方式

*  

*  Java中常见的注解

*          @Override: 表示必须对方法重写

*          @Deprecated : 表示方法过时

*          @SuppresWarning : 表示忽略警告

*          @FunctionalInterface : 表示函数式接口

*          函数式接口: 如果一个接口只有一个抽象方法,那么该接口就是函数式接口,此接口再使用的时候可以使用Lambda表达式改进

*  

*  注解的分类        

*          按照运行机制分类:

*                  源码注解: 注解只在源码中存在,当编译生成.class文件的时候,就不存在了

*                  编译时注解: 注解在源码和.class文件中存在,当程序运行的时候它就不存在了

*                  运行时注解: 在运行的时候还能够起作用的注解,它会动态影响到程序执行逻辑

*                  元注解: 对注解进行注解

*          按照来源分类

*                  JDK自带的注解

*                  第三方注解:后面框架中会学习到

*                  自定义注解: @Column

*                  元注解

*/

public class AnnotationDemo01 {

               @SuppressWarnings("deprecation")

               public static void main(String[] args) {



                       Date date = new Date();

                       date.setMinutes(100);

               }

}

class Father{

       public void show() {

               System.out.println("111");

       }

}

class Son extends Father{

//        @Override

       private String name;


//        public void show(String name) {

//                System.out.println("2222");

//        }

//        @Override

//        public void show(String name) {

//                // TODO Auto-generated method stub

//                super.show();

//        }

}

注解的语法

*         1.使用@interface关键字来定义注解

*         2.成员是以没有参数和没有异常的方式声明

*         3.可以使用default为成员指定一个默认值

*         4.注解的成员类型可以是哪些?

*                 Invalid type ArrayList<String> for the annotation attribute MyAnnotation.list;

*                 only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof

*                 基本类型,Class,注解,枚举,一维数组

*  5.如果注解只有一个成员,则成员的命名必须叫做value,再使用这个注解的时候可以不写等于号

*  6.没有任何成员的注解叫做标识注解,它本身的存在与否就是一种意义,就类似于注释

*                          

*/

public class AnnotationDemo02 {

}

@interface MyAnnotation{


       String name() default "zhangsan";

       int age() default 18;

//        String address() throws Exception;


//        ArrayList<String> list();

       Class c();

       Override override();

       ElementType eType();

       String[] list();

}

interface Inter{

       String address() throws Exception;

}

@interface MyAnno{

//        String id();

       String value();

}

元注解

@Target:标识它所标识的注解能够作用在什么元素上

*                  如果一个注解的@Target上面的注解范围显示了ANNOTATION_TYPE,那么表示该注解是元注解

*          @Retention: 表示它所标识的注解的生命周期

*                          RetentionPolicy.SOURCE:表示该注解只在源码中存在

*                          RetentionPolicy.CLASS: 表示该注解只在源码和编译时存在

*                          RetentionPolicy.RUNTIME: 表示该注解在源码和编译时以及运行时存在

*          @Inherited: 表示该注解可以被继承

*          @Document: 表示该注解可以在生成API文档的时候显示在文档上

注解的使用

* 普遍的格式

*                 @注解名称(成员变量名称1 = 成员变量的值1, 成员变量名称2 = 成员变量的值2,...)

*

* 如果注解的成员只有一个,那么可以省略等于号

*                 格式:

*                         @注解名称(成员的值)

* 如果注解是一个一维数组

*                 格式:

*                         @注解名称({成员变量值1,成员变量值2,...})

*/

public class AnnotationDemo03 {

}

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.ANNOTATION_TYPE,ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})

@Documented

@interface MyAn{


       String name();

       int age();

       double weight();

}

@MyAn(name = "张三", age = 18, weight = 20.5)

interface Inter2{


}

@MyAn(name = "张三", age = 18, weight = 20.5)

class Student{


       @MyAn(name = "张三", age = 18, weight = 20.5)

       private String name;

       private int age;


       public Student() {

               super();

       }

       public Student(String name, int age) {

               super();

               this.name = name;

               this.age = age;

       }

       public String getName() {

               return name;

       }

       public void setName(String name) {

               this.name = name;

       }

       public int getAge() {

               return age;

       }

       @MyAn(name = "张三", age = 18, weight = 20.5)

       public void setAge(int age) {

               this.age = age;

       }



}

@Documented

public @interface TestDocumented {

       String name();

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容