java高新_註解(黑馬程序員)

------- android培訓、java培訓、期待與您交流! ----------

1.註解Annotation的工作原理:

jdk1,.5中提供了註解功能,允許開發者自定義和使用自己的註解類型。Annotation並不直接影響代碼的語義,但是他可以被看做是程序員的工具,他反過來對程序的語義有所影

響!

註解語法比較簡單除了@符號使用,其他和java一樣。java中內置了3種註解,定義在了java.lang包中。

@Override 表示當前方法是覆蓋父類的方法。

@Deprecated表示當前元素不贊成使用,是過時的方法!

@SuppressWarnings表示編譯器警告如:SuppressWarnings("deprecation").//表示不要提示方法過期!

一個註解就是相當於一個類,上面的註解就是相當於創建了一個類!

註解的作用:相當於一種標記,在程序中加了註解,就相當於爲程序打上了標記。沒加就相當於沒標記,以後javac編譯器,開發工具,可以反射來了解你的類和各種元素上的標記。

首先來創建一個註解類:

public @interface Test { }

這就是一個註解,當然你要爲他添加元註解,才能更好的使用!

@Rentention()是聲明生命週期的註解,表示註解要留到哪一個階段?可選的參數有RententionPolicy包括:

RetentionPolicy.SOURCE 註解將被編譯器丟棄

RetentionPolicy.CLASS 註解在class文件中可用,但會被JVM丟棄

RetentionPolicy.RUNTIME JVM將在運行期也保留註釋,因此可以通過反射機制讀取註解的信息

@target()表示註解該用到什麼地方?可選參數有ElenmentType:

ElementType.FIELD域聲明,

ElementType.PARAMETER參數聲明,

ElementType.METHOD方法聲明

等等。

需要注意的是:寫屬性的時候必須是@Annotation(color = “red”)!只有是value屬性纔可以直接寫入!

如何反射獲取註解呢?

首先獲得Class來通過isAnnotationPersent(Test.Class);判斷註解是否爲指定註解!

在調用getAnnotation()來獲得該註解。由於註解也是個類!這樣就可以通過類的方式來獲取註解屬性了!

--------------------------------------------------------------------------------------

關於類加載器的東西還是簡單說一下吧:

jvm中有多個類加載器負責加載特定的類!

類加載器也是java類,元是bootstrap加載器,是c++的jvm內核。是特殊的一個,他加載的類有System類等等。

有高級到低級(或者有父輩到子輩):

BootStrap-------------------加載------------------->JRE\lib\rt.jar

|

ExtClassLoader----------加載-------------------->JRE\lib\ext\*.jar

|

AppClassLoader----------加載------------------->Classpath下的jar或目錄

|

自己的類加載器-----------加載-----------》特定目錄

以上的圖爲類加載器的關係,我們可以看出來加載的層次!

那麼當java虛擬機要加載一個類的時候,到底該派出哪個類來加載?

1首先當前線程類加載器去加載線程中的類。

2如果類a引用類b,那麼java虛擬機會使用加載類a的加載器加載類b

3.每個加載器優先委託給上一級加載器!當所有父加載都不行,會有異常!

問題:你自己寫你個java.lang.System可不可以?

答案是不一定,我們自己寫的會在ClassPath下那麼加載器還是BootStrap優先加載,會加載程序自帶的,不會加載我們的。但是我們可以自己寫一個類加載器!

------- android培訓、java培訓、期待與您交流! ----------

發佈了27 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章