javaSE基礎java自定義註解原理分析
註解在JavaSE中算是比較高級的一種用法瞭,為什麼要學習註解,我想大概有以下幾個原因:
1. 可以更深層次地學習Java,理解Java的思想.
2. 有瞭註解的基礎,能夠方便閱讀各種框架的源碼,比如hibernate,SpringMVC等等。裡面就用到瞭大量的註解。即便無法閱讀源碼,以後使用這些框架,會有一種心理上的安全感。
3. 方便今後跟別人吹牛。(當然,這也很重要。)
好瞭,話不多說,我們開始吧。
1. 從註釋的角度來理解註解
我想瞭很久,最終決定以這個小標題作為第一節的標題,我們在編寫Java代碼的時候,為瞭讓我們的代碼看起來通俗易懂,就會加上註釋信息。
比如,我們寫一個方法,會標註上這個方法的作者,作用,版本等信息。是的,作為一個程序員,編寫優雅的註釋是一個非常重要的好習慣。
例:
/** * 用於判斷是否是空字符串 * 方法名:isEmpty * 創建人:剽悍一小兔 * 時間:2016年9月21日-下午6:56:33 * @param str * @return boolean */ public static boolean isEmpty(String str) { return null == str || str.equals("") || str.matches("\\s*"); }
這是一個字符串判空的函數,函數名為isEmpty,雖然看名字大概也能猜到它的作用,可是,一旦加上瞭註釋,瞬間就變得更加清晰瞭,不是嗎?
這種註釋,當代碼被執行的時候,執行機制會自動忽略掉他們,因為這些文字其實是給程序員看的,而不是給執行機制看的。
寫註釋是一種美德。
那麼,註解又是什麼呢?
我個人對它的看法是:所謂的註解,就是寫給電腦看的高級註釋。
你可能經常會看到代碼裡面出現@XXX的標志,乍一看感覺挺高深的。反正我當年就是這種感覺,頭腦裡第一個反應就是這肯定很難!
我還是那句話,如果你總想著復雜,那麼就永遠看不到簡單。
我們寫註釋,是給人看的,而註解就是寫給電腦看的。就這麼簡單。
這麼說可能有點抽象,沒關系,我們來一個快速入門吧。
2.提出問題
新建一個Java項目
項目名稱就叫做Annotation吧
在src旁邊右鍵,新建一個util包,也就是工具包。
弄一個專門處理日期的工具類
隨便寫一個日期格式化的方法。
package util; import java.util.Date; import java.text.SimpleDateFormat; public class DateUtil { public static String formatDate( Date date , String formatPattern ){ return new SimpleDateFormat(formatPattern).format(date); } }
註意,導包的時候要是java.util.Date;,而不是java.sql.Date;
測試:
Date now = new Date();//獲取當前日期 System.out.println(now); System.out.println(formatDate(now,"yyyy-MM-dd hh:mm:ss"));
控制臺打印:
Wed Sep 21 19:24:57 CST 2016
2016-09-21 07:24:57
這說明,我們寫的方法應該是正確的。
很好,那麼接下來要解決一個什麼問題呢?就是說,如果我想通過代碼來獲取關於這個方法的信息,那麼該如何做呢?
寫註釋肯定是不行的,因為註釋是寫個程序員看的,電腦看不懂,更別提獲取註釋的內容瞭,是吧?
於是,註解,這一種高級的註釋就出現瞭。
3.編寫註解
關於註解,要明確三個問題:
要給誰加註解啊?什麼時候註解起作用啊?要註解那些東西呢?
因為是快速入門,所以大概知道這些就足夠瞭。
現在,我們來新建一個註解,毫無疑問,所謂的註解,它還是一個Java類,你不要被它嚇到。
新建一個註解包。
new一個Annotation,就叫MethodNote,意思就是說,這個是加在方法上的,為瞭給方法加一些電腦能看得懂的說明。
第一個問題是要給誰加註解啊?那麼,這個註解類是需要加在方法上的,於是就這樣寫:
這就表示,該註解要加在方法上。
接下來,讓我們來明確第二個問題:什麼時候註解起作用啊?
我們希望在程序運行的時候,註解發揮作用,就是說,當你的程序跑起來瞭,電腦才開始閱讀這些註解。
這句話的意思就是說,我這個註解啊,是在程序跑起來的時候,RUNTIME嘛,就是跑起來的時候,才發揮作用的。
非常好,那麼最後一個問題:要註解那些東西呢?
一個方法,最重要的信息包括:作用,創建時間,作者,版本,返回值等等。我們隨便抽取幾個,就作用和創建時間吧!
這種寫法有點類似於寫接口的方法。
好瞭,我們的第一個註解就編寫完成瞭!寫好瞭就馬上用唄,現在我們給日期格式化的方法加上咱自己編寫的註解。
@MethodNote(createTime = "2016-9-21") public static String formatDate(Date date , String formatPattern){ return new SimpleDateFormat(formatPattern).format(date); }
這就是所謂的註解,其實也很簡單的吧。就是這麼來的,它歸根到底還是一個Java類。
4.通過Java反射獲取方法的註解信息
好瞭,回到正題,我們已經對formatDate方法進行瞭註解,那麼,既然這個註解是寫給電腦看的,那麼電腦就肯定有辦法在其他Java類中獲得這些信息,對吧?
如何獲得呢,對瞭,用反射機制。
上代碼:
public static void main(String[] args) throws NoSuchMethodException, SecurityException { Class classOfDateUtil = DateUtil.class; Method formatDate = classOfDateUtil.getMethod("formatDate", Date.class,String.class); MethodNote methodNote = formatDate.getAnnotation(MethodNote.class); System.out.println("方法描述:" + methodNote.description()); System.out.println("創建日期:" + methodNote.createTime()); }
結果:
方法描述:作者很懶,沒有寫本方法的作用。
創建日期:2016-9-21
結束
本章對Java自定義註解做瞭一個快速入門,希望對你有所幫助,更多關於java自定義註解的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- java Date和SimpleDateFormat時間類詳解
- 新手小白學JAVA 日期類Date SimpleDateFormat Calendar(入門)
- JavaSE系列基礎包裝類及日歷類詳解
- Java 時間格式轉換之impleDateFormat與Data API解析與使用
- Java技能點之SimpleDateFormat進行日期格式化問題