亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javaSE基礎(chǔ)java自定義注解原理分析

 更新時(shí)間:2021年10月15日 11:08:18   作者:spring小楊  
這篇文章主要介紹了javaSE基礎(chǔ)對(duì)java自定義注解原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多度進(jìn)步,早日升職加薪

注解在JavaSE中算是比較高級(jí)的一種用法了,為什么要學(xué)習(xí)注解,我想大概有以下幾個(gè)原因:

1. 可以更深層次地學(xué)習(xí)Java,理解Java的思想.

2. 有了注解的基礎(chǔ),能夠方便閱讀各種框架的源碼,比如hibernate,SpringMVC等等。里面就用到了大量的注解。即便無法閱讀源碼,以后使用這些框架,會(huì)有一種心理上的安全感。

3. 方便今后跟別人吹牛。(當(dāng)然,這也很重要。)

好了,話不多說,我們開始吧。

1. 從注釋的角度來理解注解

我想了很久,最終決定以這個(gè)小標(biāo)題作為第一節(jié)的標(biāo)題,我們在編寫Java代碼的時(shí)候,為了讓我們的代碼看起來通俗易懂,就會(huì)加上注釋信息。

比如,我們寫一個(gè)方法,會(huì)標(biāo)注上這個(gè)方法的作者,作用,版本等信息。是的,作為一個(gè)程序員,編寫優(yōu)雅的注釋是一個(gè)非常重要的好習(xí)慣。

例:

/**
 * 用于判斷是否是空字符串
 * 方法名:isEmpty
 * 創(chuàng)建人:剽悍一小兔
 * 時(shí)間:2016年9月21日-下午6:56:33
 * @param str
 * @return boolean
 */
public static boolean isEmpty(String str) {
    return null == str  || str.equals("")
            || str.matches("\\s*");
}

這是一個(gè)字符串判空的函數(shù),函數(shù)名為isEmpty,雖然看名字大概也能猜到它的作用,可是,一旦加上了注釋,瞬間就變得更加清晰了,不是嗎?

這種注釋,當(dāng)代碼被執(zhí)行的時(shí)候,執(zhí)行機(jī)制會(huì)自動(dòng)忽略掉他們,因?yàn)檫@些文字其實(shí)是給程序員看的,而不是給執(zhí)行機(jī)制看的。

寫注釋是一種美德。

那么,注解又是什么呢?

我個(gè)人對(duì)它的看法是:所謂的注解,就是寫給電腦看的高級(jí)注釋。

你可能經(jīng)常會(huì)看到代碼里面出現(xiàn)@XXX的標(biāo)志,乍一看感覺挺高深的。反正我當(dāng)年就是這種感覺,頭腦里第一個(gè)反應(yīng)就是這肯定很難!

我還是那句話,如果你總想著復(fù)雜,那么就永遠(yuǎn)看不到簡單。

我們寫注釋,是給人看的,而注解就是寫給電腦看的。就這么簡單。

這么說可能有點(diǎn)抽象,沒關(guān)系,我們來一個(gè)快速入門吧。

2.提出問題

新建一個(gè)Java項(xiàng)目

Paste_Image.png

項(xiàng)目名稱就叫做Annotation吧

Paste_Image.png

在src旁邊右鍵,新建一個(gè)util包,也就是工具包。

Paste_Image.png

弄一個(gè)專門處理日期的工具類

Paste_Image.png

隨便寫一個(gè)日期格式化的方法。

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);
	}
	
}

注意,導(dǎo)包的時(shí)候要是java.util.Date;,而不是java.sql.Date;

測試:

Date now = new Date();//獲取當(dāng)前日期
System.out.println(now);
System.out.println(formatDate(now,"yyyy-MM-dd hh:mm:ss"));

控制臺(tái)打?。?/p>

Wed Sep 21 19:24:57 CST 2016
2016-09-21 07:24:57

這說明,我們寫的方法應(yīng)該是正確的。

很好,那么接下來要解決一個(gè)什么問題呢?就是說,如果我想通過代碼來獲取關(guān)于這個(gè)方法的信息,那么該如何做呢?

寫注釋肯定是不行的,因?yàn)樽⑨屖菍憘€(gè)程序員看的,電腦看不懂,更別提獲取注釋的內(nèi)容了,是吧?

于是,注解,這一種高級(jí)的注釋就出現(xiàn)了。

3.編寫注解

關(guān)于注解,要明確三個(gè)問題:

要給誰加注解???什么時(shí)候注解起作用?。恳⒔饽切〇|西呢?

因?yàn)槭强焖偃腴T,所以大概知道這些就足夠了。

現(xiàn)在,我們來新建一個(gè)注解,毫無疑問,所謂的注解,它還是一個(gè)Java類,你不要被它嚇到。

新建一個(gè)注解包。

Paste_Image.png

new一個(gè)Annotation,就叫MethodNote,意思就是說,這個(gè)是加在方法上的,為了給方法加一些電腦能看得懂的說明。

Paste_Image.png

第一個(gè)問題是要給誰加注解啊?那么,這個(gè)注解類是需要加在方法上的,于是就這樣寫:

Paste_Image.png

這就表示,該注解要加在方法上。

接下來,讓我們來明確第二個(gè)問題:什么時(shí)候注解起作用???

我們希望在程序運(yùn)行的時(shí)候,注解發(fā)揮作用,就是說,當(dāng)你的程序跑起來了,電腦才開始閱讀這些注解。

Paste_Image.png

這句話的意思就是說,我這個(gè)注解啊,是在程序跑起來的時(shí)候,RUNTIME嘛,就是跑起來的時(shí)候,才發(fā)揮作用的。

非常好,那么最后一個(gè)問題:要注解那些東西呢?

一個(gè)方法,最重要的信息包括:作用,創(chuàng)建時(shí)間,作者,版本,返回值等等。我們隨便抽取幾個(gè),就作用和創(chuàng)建時(shí)間吧!

Paste_Image.png

這種寫法有點(diǎn)類似于寫接口的方法。

好了,我們的第一個(gè)注解就編寫完成了!寫好了就馬上用唄,現(xiàn)在我們給日期格式化的方法加上咱自己編寫的注解。

@MethodNote(createTime = "2016-9-21")
public static String formatDate(Date date , String formatPattern){
	return new SimpleDateFormat(formatPattern).format(date);
}

這就是所謂的注解,其實(shí)也很簡單的吧。就是這么來的,它歸根到底還是一個(gè)Java類。

4.通過Java反射獲取方法的注解信息

好了,回到正題,我們已經(jīng)對(duì)formatDate方法進(jìn)行了注解,那么,既然這個(gè)注解是寫給電腦看的,那么電腦就肯定有辦法在其他Java類中獲得這些信息,對(duì)吧?

如何獲得呢,對(duì)了,用反射機(jī)制。

上代碼:

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("創(chuàng)建日期:" + methodNote.createTime());
}

結(jié)果:

方法描述:作者很懶,沒有寫本方法的作用。
創(chuàng)建日期:2016-9-21

結(jié)束

本章對(duì)Java自定義注解做了一個(gè)快速入門,希望對(duì)你有所幫助,更多關(guān)于java自定義注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring中的NamespaceHandler與BeanDefinitionParser詳解

    Spring中的NamespaceHandler與BeanDefinitionParser詳解

    這篇文章主要介紹了Spring中的NamespaceHandler與BeanDefinitionParser詳解,由Spring啟動(dòng)過程之obtainFreshBeanFactory() ,可以看到NamespaceHandler、BeanDefinitionParser為解析配置文件中的Element起重要作用,那么它本身是如何被加載的呢,需要的朋友可以參考下
    2023-12-12
  • Spring?MVC如何實(shí)現(xiàn)接口Controller定義控制器

    Spring?MVC如何實(shí)現(xiàn)接口Controller定義控制器

    這篇文章主要介紹了Spring?MVC如何實(shí)現(xiàn)接口Controller定義控制器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡單的攔截器操作

    Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡單的攔截器操作

    這篇文章主要介紹了Java通過動(dòng)態(tài)代理實(shí)現(xiàn)一個(gè)簡單的攔截器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • zookeeper實(shí)現(xiàn)分布式鎖

    zookeeper實(shí)現(xiàn)分布式鎖

    這篇文章主要為大家詳細(xì)介紹了基于zookeeper實(shí)現(xiàn)分布式鎖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java延時(shí)的3種實(shí)現(xiàn)方法舉例

    Java延時(shí)的3種實(shí)現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于Java延時(shí)的3種實(shí)現(xiàn)方法舉例,java開發(fā)中常會(huì)用到延時(shí)任務(wù),文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    SpringMVC?@RequestMapping注解屬性詳細(xì)介紹

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析

    Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析

    這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實(shí)現(xiàn)示例

    使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實(shí)現(xiàn)示例

    本文主要介紹了使用?EasyCode生成springboot+mybatis基礎(chǔ)程序的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java中for(;;)和while(true)的區(qū)別

    Java中for(;;)和while(true)的區(qū)別

    這篇文章主要介紹了 Java中for(;;)和while(true)的區(qū)別,文章圍繞for(;;)和while(true)的相關(guān)自來哦展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)大家有所幫助
    2021-11-11
  • Java8 Map中新增的方法使用總結(jié)

    Java8 Map中新增的方法使用總結(jié)

    這篇文章主要介紹了Java8 Map中新增的方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論