以前在開發中,就總納悶,爲何繼承接口時,會出現@Override註解,有時候還會提示寫註解@SuppressWarnings?java
那麼什麼是註解呢?ide
註解就是某種註解類型的一個實例,咱們能夠用它在某個類上進行標註,這樣編譯器在編譯咱們的文件時,會根據咱們本身設定的方法來編譯類。測試
註解都是什麼呢?看下面這張圖就明白了!spa
上面的圖能夠看出,註解大致上分爲三種:標記註解,通常註解,元註解code
這裏面Override這個沒測試出來,由於目前的Eclipse會自動幫咱們排錯,若是類型不符,是沒有辦法進行覆蓋的。blog
而Deprecated註解,除了多個刪除線,並無什麼攔截功能。繼承
上面的測試,也僅僅是針對IDE,若是是利用javac,應該會有提示的。接口
其餘的很少說了,標準元註解 都是幹嗎的呢?ip
@Documented 標記生成javadoc開發
@Inherited 標記繼承關係
@Retention 註解的生存期
@Target 標註的目標
首先聲明一個接口,並未它添加註解內容!
1 package testAnnotation; 2 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.Retention; 5 import java.lang.annotation.RetentionPolicy; 6 7 @Documented 8 @Retention(RetentionPolicy.RUNTIME) 9 public @interface Person{ 10 String name(); 11 int age(); 12 }
而後利用反射機制查看類的註解內容
1 package testAnnotation; 2 3 @Person(name="xingoo",age=25) 4 public class test3 { 5 public static void print(Class c){ 6 System.out.println(c.getName()); 7 8 //java.lang.Class的getAnnotation方法,若是有註解,則返回註解。不然返回null 9 Person person = (Person)c.getAnnotation(Person.class); 10 11 if(person != null){ 12 System.out.println("name:"+person.name()+" age:"+person.age()); 13 }else{ 14 System.out.println("person unknown!"); 15 } 16 } 17 public static void main(String[] args){ 18 test3.print(test3.class); 19 } 20 }
運行結果,讀取到了註解的內容
testAnnotation.test3 name:xingoo age:25