------- 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培訓、期待與您交流! ----------