跟王老師學註解(二):註解的分類及內建註解
主講教師:王少華 QQ羣號:483773664
一、註解的分類
在Java中,根據註解的使用方法和用途,可將註解分成3類,分別是
內建註解(也稱爲基本註解),定義於java.lang包下
元註解(Meta Annotation)
自定義註解
二、內建註解(一)分類
在JDK5.0及以上的版本的java.lang包下提供了3種標準的註解類型,分別是
@Override:
@Deprecated
@SuppressWarnings
(二)@Override
@Override被用作標方法,它說明了被標的方法重寫了父類的方法。
1、它的使用方法很簡單,只要在重寫的子類方法前加上@Override即可,如下代碼所示
1 2 3 4 5 | public class Fruit { public void getObjectInfo(){ System.out.println( "水果的getObjectInfo方法" ); } } |
1 2 3 4 5 6 | public class Apple extends Fruit { @Override public void getObjectInfo() { System.out.println( "蘋果重寫水果的getObjectInfo方法" ); } } |
2、如果不是重寫父類的方法,而使用了@Override註解,會在編譯報錯
因此@Override經常用於防止重寫父類方法時方法名拼寫錯誤,
3、另外,特別注意,@Override只能用於修飾方法,而不能用於修飾其他程序元素!
(三)@Deprecated註解
用於表示某個程序元素(類、方法、成員變量等)已過時,編譯器將不再喜歡使用這個被標的程序元素。
如果使用(無論是當前類還是其他包下的類使用),編譯則會在該程序元素上畫一條斜線,表示程序元素已過時。
(四)、@SuppressWarning註解
1、@SuppressWarning註解
@SuppressWarnings註解表示阻止編譯器警告,被用於有選擇地關閉編譯器對類、方法和成員變量等程序元素及其子元素的警告。
@SuppressWarnings會一直作用於該程序元素的所有子元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @SuppressWarnings ({ "unchecked" , "rawtypes" }) public class Apple extends Fruit { @Override public void getObjectInfo() { System.out.println( "蘋果重寫水果的getObjectInfo方法" ); } public void printObject(){ Apple apple = new Apple(); List list = new ArrayList(); list.add(apple); } } |
@SuppressWarnings("unchecked")註解來標識Apple類取消類型檢查編譯器警告
rawtypes:是eclipse 3.6自帶的註解,傳參時也要傳遞帶泛型的參數
2、當@SuppressWarnings後面的括號中的value值爲如下參數時,編譯器將取消相應的警告
deprecation:編譯器將取消使用了過時程序元素的警告
unchecked:取消執行了未檢查的轉換
unused:取消某程序元素未被使用的警告
fallthrough: 取消當swithc 程序塊直接通往下一種情況而沒有break時的警告
path: 取消在類路徑、源文件路徑等中有不存在的路徑時的警告
serial :取消當在序列化的類上缺少serialVersionUID定義時的警告
finally :取消當有finally子句不能正常完成時的警告
all: 取消所有情況的警告
3、使用@SuppressWarnings的參數
當註解類型裏只有一個value成員變量,使用該註解時可以直接在註解後的括號中指定value成員變量的值,而無須使用name=value結構對的形式。
當註解類型裏有多個value成員變量,可以使用大括號
1 2 3 4 | @SuppressWarnings ({ "serial" , "unchecked" }) public class Apple extends Fruit implements Serializable{ ... } |
三、註解的語法
使用註解時要在其前面加一個“@”符號,同時將註解作爲修飾符使用。
1 | @+AnnotationName+(..逗號分割的多個name..) |
其中value值必須爲編譯時常量、內嵌的Annotation或數組。如果註解類型定義了某個NAME的默認值,則這個結構對參數可以被省略。
(一)不帶參數的註解
1 2 3 4 | @Override public void getObjectInfo() { System.out.println( "蘋果重寫水果的getObjectInfo方法" ); } |
(二)帶一個參數的註解
1 2 3 4 5 6 | @SuppressWarnings (value= "unused" ) public static void main(String[] args) { Apple apple = new Apple(); apple.printObject(); List<Apple> apples; } |
(三)帶多個參數的註解
1 2 3 | @SuppressWarnings ({ "serial" , "unchecked" }) public class Apple extends Fruit implements Serializable{ } |