1.1 註釋和註解的區別

共同點:都可以對程序進行解釋説明。

不同點:註釋,是給程序員看的。只在Java中有效,在class文件中不存在註釋的。

當編譯之後,會進行註釋擦除。

註解,是給虛擬機看的。當虛擬機看到註解之後,就知道要做什麼事情了。

1.2 如何使用註解

在以前看過註解@Override。

當子類重寫父類方法的時候,在重寫的方法上面寫@Override。

當虛擬機看到@Override的時候,就知道下面的方法是重寫的父類的。檢查語法,如果語法正確編譯正常,如果語法錯誤,就會報錯。

1.3 Java中已經存在的註解

@Override:表示方法的重寫

@Deprecated:表示修飾的方法已過時

@SuppressWarnings("all"):壓制警告

除此之外,還需要掌握第三方框架中提供的註解:

比如:Junit

@Test 表示運行測試方法

@Before 表示在Test之前運行,進行數據的初始化

@After 表示在Test之後運行,進行數據的還原

1.4 自定義註解

自定義註解單獨存在是沒有什麼意義的,一般會跟反射結合起來使用,會用發射去解析註解。

針對於註解,只要掌握會使用別人已經寫好的註解即可。

關於註解的解析,一般是在框架的底層已經寫好了。

1.5 特殊屬性

value:

當註解中只有"一個屬性",並且屬性名是"value",使用註解時,可以省略value屬性名

代碼示例:

//註解的定義
public @interface Anno2 {
    public String value();

    public int age() default 23;
}

//註解的使用
@Anno2("123")
public class AnnoDemo2 {

    @Anno2("123")
    public void method(){

    }
}

1.6 元註解

可以寫在註解上面的註解

@Target :指定註解能在哪裏使用

@Retention :可以理解為保留時間(生命週期)

Target:

作用:用來標識註解使用的位置,如果沒有使用該註解標識,則自定義的註解可以使用在任意位置。

可使用的值定義在ElementType枚舉類中,常用值如下

  • TYPE,類,接口
  • FIELD, 成員變量
  • METHOD, 成員方法
  • PARAMETER, 方法參數
  • CONSTRUCTOR, 構造方法
  • LOCAL_VARIABLE, 局部變量
Retention:

作用:用來標識註解的生命週期(有效範圍)

可使用的值定義在RetentionPolicy枚舉類中,常用值如下

  • SOURCE:註解只作用在源碼階段,生成的字節碼文件中不存在
  • CLASS:註解作用在源碼階段,字節碼文件階段,運行階段不存在,默認值
  • RUNTIME:註解作用在源碼階段,字節碼文件階段,運行階段

1.7 註解小結:

掌握如何使用已經存在的註解即可。

@Override:表示方法的重寫

@Deprecated:表示修飾的方法已過時

@SuppressWarnings("all"):壓制警告

@Test:表示要運行的方法

在以後的實際開發中,註解是使用框架已經提供好的註解。

自定義註解+解析註解,一般會出現在框架的底層。當以後我們要自己寫一個框架的時候,才會用到自定義註解+解析註解。