1. 程式人生 > >黑馬程式設計師_基礎加強(註解)

黑馬程式設計師_基礎加強(註解)

---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------

註解(annotation)是jdk1.5的新特性

瞭解註解及java提供的幾個基本註解

1)  先通過@SuppressWarnings的應用讓大家直觀地瞭解註解:

通過System.runFinalizersOnExit(true);的編譯警告引出

@SuppressWarnings(“deprecation”)--->壓制警告

2)@Deprecated--->(過時的方法,對於不再使用的方法,可能別人或別的地方有呼叫這個方法,不能刪除完事)

         直接在剛才的類中增加一個方法,並加上@Deprecated標註,在另外一個類中呼叫這個方法。

3)@Override--->提示覆蓋

         Publicboolean equals(Reflect other)方法與HashSet結合講解。

總結:註解相當於一種標記,加了註解就等於打上了某種標記,沒加,則等於沒有某種標記,以後,javac編譯器,開發工具和其他程式可以用反射來了解你的類及各種元素上有無何種標記,看你有什麼標記,就去幹相應的事。標記可以加在包,類,欄位,方法,方法的引數以及區域性變數上。

看java.lang包,可看到JDK中提供的最基本的annotation

·定義一個最簡單的註解:public @interface MyAnnotation{}

·把它加在某個類上:@MyAnnotation public class Annotation Test{}

·用反射進行測試Annotation Test的定義上是否有@MyAnnotation。

·格局反射測試的問題,引出@Retention元註解的講解,其三種取值:

RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME:分別對應:java原始檔、class檔案、記憶體中的位元組碼。

         思考:@Override、@SuppressWarnings和@Deprecated這三個註解的屬性值分別是什麼?答:分別為class,class,runtime。

 

·演示和講解@Target元註解

         Target的預設值為任何元素,設定Target等於ElementType.METHOD,原來加在類上的註解就報錯了,改用陣列方式設定{ElementType.METHOD,ElementType.TYPE}就可以了。

·元註解以及其列舉屬性值不用記,只要會看JDK通過那幾個基本註解的API幫助文件的定義或其原始碼,按圖索驥即可查到,或者直接看java.lang.annotation包下面的類。

為註解增加基本屬性

·什麼是註解的屬性?

         一個註解相當於一個胸牌,如果你胸前貼了胸牌,就是傳智部落格的學生,否則,就不是。如果還想區分出是傳智部落格哪個班的學生,這時候可以為胸牌再增加一個屬性來進行區分。加了屬性的標記效果為:@MyAnnotation(color = “red”)

·定義基本型別的屬性和應用屬性:

         在註解類中增加Stringcolor();

         @MyAnnotation(color = “red”)

·用反射方式獲得註解對應的例項物件後,再通過該物件呼叫屬性對應的方法。

MyAnnotation a =(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

System.out.println(a.color());

可以認為上面這個@MyAnnotation是MyAnnotation類的一個例項物件。

·為屬性指定預設值

         Stringcolor()default “yellow”

·value屬性:

         Stringvalue() default “zxx”;

         如果註解中有一個名稱value的屬性,且你只想設定value屬性(即其他屬性都採用預設值或者你只有一個value屬性),那麼可以省略value = 部分,例如:@MyAnnotation(“lhm”)。

為註解增加高階屬性。

·陣列型別的屬性

1)      int[] arrAttr() default{1,2,3};

2)      @MyAnnotation(arrayAttr = {2,3,4}

3)      如果陣列屬性中只有一個元素,這時候屬性值部分可以省略大括號。

·列舉型別的屬性。

1)  Enum Test.TrafficLamp lamp();

2)  @MyAnnotation(lamp = EnumTest.TrafficLamp.GREEN)

·註解型別的屬性:

1)  MetaAnnotation annotationAttr()[email protected](“xxxx”);

2)  @MyAnnotation(annotation Attr = @MetaAnnotation(“yyy”))

3)  可以認為上面這個@MyAnnotation是MyAnnotation類的一個例項物件,同樣的道理,可以認為上面這個@MetaAnnotation是MetaAnnotation類的一個例項物件。呼叫程式碼如下:

MetaAnnotationma = myAnnotation.AnnotationAttr();

System.out.println(ma.value());

·註解的詳細語法可以通過看java語言規範瞭解,即看java的language specification。

import java.lang.reflect.Method;

import javax.jws.soap.InitParam;

@ItcastAnnotation([email protected]("flx"),color="red",value="abc",arrayAttr=1)
public class AnnotationTest {

	/**
	 * @param args
	 */
	@SuppressWarnings("deprecation")//一個註解相當於一個類,這裡是一個例項物件。
	@ItcastAnnotation("xyz")
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		System.runFinalizersOnExit(true);
		if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
			ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
			System.out.println(annotation.color());
			System.out.println(annotation.value());
			System.out.println(annotation.arrayAttr().length);
			System.out.println(annotation.lamp().nextLamp().name());
			System.out.println(annotation.annotationAttr().value());
		}
		
		Method mainMethod = AnnotationTest.class.getMethod("main", String[].class);
		ItcastAnnotation annotation2 = (ItcastAnnotation)mainMethod.getAnnotation(ItcastAnnotation.class);
		System.out.println(annotation2.value());
	}

	@Deprecated
	public static void sayHello(){
		System.out.println("hi,傳智播客");
	}
}

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import cn.itcast.day1.EnumTest;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
	String color() default "blue";
	String value();
	int[] arrayAttr() default {3,4,4};
	EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
	MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");
}


---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------

相關推薦

黑馬程式設計師_基礎加強註解

---------------------- ASP.Net+Android+IO開發S、.Net培訓、期待與您交流! ---------------------- 註解(annotation)是jdk1.5的新特性 瞭解註解及java提供的幾個基本註解 1)  先通過@S

黑馬程式設計師_基礎加強_Java執行緒通訊和執行緒併發庫

 ------- android培訓、java培訓、期待與您交流! ---------- java5的執行緒鎖技術 Lock&Condition實現執行緒同步通訊 Lock比傳統的synchronized方式更加面向物件,兩個執行緒執行的程式碼塊要實現同步互斥,

黑馬程式設計師--Java基礎--集合

------- android培訓、java培訓、期待與您交流! ---------- 第一部分:集合框架概述 集合的由來:物件用於封裝特有資料,物件多了需要儲存;如果物件的個數不確定,就使用集合容器進行儲存。 Java中有兩種儲存物件:陣列和集合。 它們的區別在於:

黑馬程式設計師——Java基礎--集合

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 第一講 集合的基本知識 一、概述         我們學習的是面向物件的語言,而面向物件的語言對事物的表述都是通過物件體現的。那麼為了方便的操作多個多個

黑馬程式設計師_java基礎加強學習筆記之註解

------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">j

黑馬程式設計師—java基礎加強—內省、註解、泛型

---------------------- android培訓、java培訓、期待與您交流! -------------------- 內省:IntroSpector——》JavaBean——特殊的Java類 當Java執行時可檢查自身,Java 程式中詢問它的一個物

黑馬程式設計師基礎加強註解和泛型

---------------------- android培訓、java培訓、期待與您交流! ----------------------瞭解註解及Java提供的幾個基本註解:註解相當於一種標記,加了註解就等於打上了

黑馬程式設計師基礎加強---註解

------- android培訓、java培訓、期待與您交流! ---------- 元註解:   元註解的作用就是負責註解其他註解。Java5.0定義了4個標準的meta-annotation型別,它們被用來提供對其它 annotation型別作說明。Java5.

黑馬程式設計師---java基礎加強---jdk1.5新特性之註解

----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ----------- 註解(Annotation ) 是JDK 1.5 的新特性,現已應用於Spring , EJB ,JPA... 使用註解是一種趨勢。它可以用於建立

黑馬程式設計師_面向物件思維導圖

----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<ahref="http://edu.csdn.net"target="blank">.

黑馬程式設計師-java基礎加強-反射的深入講解

-------------------------ASP.Net+Unity開發、.Net培訓、期待與您交流!-------------------------- 透徹分析反射的基礎_Class類 Class類1、定義java程式中的各個java類也屬於同一類事物,而描述這

黑馬程式設計師---java基礎加強 反射的深入理解

=================第5單元:反射的深入講解=============== 17.透徹分析反射的基礎_Class類 反射的基礎: Class也就是每個java源程式通過編譯後生成的檔案載入進入記憶體的那個位元組碼檔案, 獲取到該位元組碼,就可以獲取

黑馬程式設計師_基礎測試

                                               -------、java培訓、期待與您交流! ---------- 黑馬程式設計師訓練營基礎測試題及個人程式碼(包含思路、步驟和基本註釋) 1、 編寫程式計算12+22+32

黑馬程式設計師基礎加強---eclipse加強

Ctrl+1 快速修復(最經典的快捷鍵,就不用多說了)Ctrl+D: 刪除當前行 Ctrl+Alt+↓ 複製當前行到下一行(複製增加)Ctrl+Alt+↑ 複製當前行到上一行(複製增加)Alt+↓ 當前行和下面一行互動位置(特別實用,可以省去先剪下,再貼上了)Alt+↑ 當前行和上面一行互動位置(同上)Alt

黑馬程式設計師——Java集合框架之迭代器、Collection層次結構等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 集合框架概述 一、什麼是集合框架   1.什麼是集合?   集合是指把具有相同性質的一類東西匯聚成一個整體,簡單說就是指儲存資料的一個容器。集

黑馬程式設計師——Java IO流之流操作規律總結、File類、Properties類、序列流等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、流操作規律總結  1.明確源和目的:   源:    字元流:FileReader(純文字檔案)。    位元組流:FileInputStream(

黑馬程式設計師——Java面向物件之封裝、繼承、多型、介面等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 五、面向物件的特徵  面向物件主要有三大特徵: 1.特徵一 —— 封裝  1)定義:是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 2)好處:

黑馬程式設計師——Java集合框架之泛型

培訓、java培訓、java學習型技術部落格、期待與您交流!------------               泛型 一、泛型概述 1.什麼是泛型? 泛型就是指將資料型別引數化,把以前固定的資料型別用一個代表資料型別的引數進行表示,該引數可以接受傳入的任意資料型別。可以這

黑馬程式設計師——Java面向物件之匿名物件、程式碼塊、static關鍵字等

   a)子類只繼承父類的預設(預設)建構函式,即無形參建構函式。如果父類沒有預設建構函式,那子類不能從父類繼承預設建構函式。    b)子類從父類處繼承來的父類預設建構函式,不能成為子類的預設建構函式。    c)在建立物件時,先呼叫父類預設建構函式對物件進行初始化,然後呼叫子類自身自己定義的建構函

黑馬程式設計師——Java集合框架之Map集合、Collections與Arrays工具類

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ Map集合 一、概述 Map集合儲存的元素是鍵值對,即將鍵和值一對一對往裡存,而且要保證鍵的唯一性。  問題思考:   1.如何保證鍵的唯一性?