java的注解

注解在java-1.5版本中引入的蔑水;
注解提供了一種原程序中的元素關(guān)聯(lián)任何信息和任何元數(shù)據(jù)的途徑和方法挣输;

Paste_Image.png

一.java中的常見注解( JDK自帶的注解 )

  • @Override 代表子類實(shí)現(xiàn)父類的方法(注意:只要有該注解僚害,父類必須定義該方法喉脖,否則子類會報錯)
  • @Deprecated() 如果父類或接口的某個方法發(fā)現(xiàn)以后不用了此再,但是之前繼承該類的子類可能還在使用饵较,所以不能直接刪除,要使用 @Deprecated()注解表示該方法已過時, 這時在子類實(shí)例化后使用該方法的時候镐捧,會產(chǎn)生警告信息潜索,可以使用 SuppressWarnings("desc") 忽略編輯器的警告
Paste_Image.png

二.注解的分類

Paste_Image.png
  • 源碼注解: 注解只在源碼中存在,編譯為class后注解就消失了,比如(@Override, @Deprecated,SuppressWarnings("desc"))
  • 編譯時注解: 注解在源碼和class文件中都存在
  • 運(yùn)行時注解: 注解在運(yùn)行階段依然起作用懂酱,甚至?xí)绊戇\(yùn)行時的邏輯
  • 元注解:注解的注解

三.自定義注解

Paste_Image.png

Paste_Image.png
  • 使用自定義注解:


    Paste_Image.png
  • 新建annotation注解
package comments;
/*
 * 自定義注解
 */
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*
 * 元注解:注解的注解
 */
//注解的作用域竹习,方法和類/接口
@Target({ ElementType.METHOD, ElementType.TYPE })
//注解的聲明周期,在運(yùn)行時起作用
@Retention(RetentionPolicy.RUNTIME)
//允許子類繼承父類的注解列牺,但不允許子類方法繼承父類方法的注解
@Inherited
//生成javadoc時會包含注解
@Documented
public @interface Description {
    
    //成員以無參無異常的方式聲明
    String desc();
    String author();
    int age() default 18;
}
  • 在其他類中使用注解
package comments;
public class Child implements People {

    @Override
    @Description(author = "liangxifeng", desc = "獲取人員姓名")
    public String getName() {
        // TODO Auto-generated method stub
        return null;
    }
}
  • 注解只有一個成員
public @interface Description {
    String value();
}

@Description("只有一個成員的使用")
  • 注解無成員
public @interface Description {
}

@Description()

四.解析注解

  • 通過反射獲取類整陌,函數(shù)或成員上的 運(yùn)行時 注解信息,從而實(shí)現(xiàn)動態(tài)控制程序運(yùn)行的邏輯瞎领;
  • 在Child類中使用以上自定義的注解
@Description(author="liangxifeng", desc="我是Child類", age=28)
public class Child implements People {

    @Override
    @Description(author="lxf", desc="我是Child類中的getName方法")
    public String getName() {
        // TODO Auto-generated method stub
        return null;
    }
}
  • ParseAnn類中獲取Child類中的類注解和方法注解信息
package comments;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
 * 解析注解
 * @author lxf
 *
 */
public class ParseAnn {

    /**
     * @param args
     * @throws ClassNotFoundException 
     */
    public static void main(String[] args) throws ClassNotFoundException {
        // TODO Auto-generated method stub
        //1. 使用類加載器加載類
        Class c = Class.forName("comments.Child");
        //2.找到類上面的注解
        boolean isExit = c.isAnnotationPresent(Description.class);
        //3.拿到注解實(shí)例
        if(isExit)
        {
            Description d = (Description) c.getAnnotation(Description.class);
            System.out.println(d.age());//輸出:28
        }   
        //4.找到方法上的注解
        Method[] ms = c.getMethods();
        for (Method method : ms) {
            boolean isExitM = method.isAnnotationPresent(Description.class);
            if(isExitM)
            {
                Description d = (Description) method.getAnnotation(Description.class);
                System.out.println(d.author()); //輸出:lxf
            }
        }   
        //4.另外一種找到方法上的注解
        for (Method m : ms) {
            //獲取所有注解
            Annotation[] as = m.getAnnotations();
            for(Annotation a : as)
            {
                if( a instanceof Description )
                {
                    Description d = (Description)a;
                    System.out.println(d.author()); //輸出:lxf
                }
            }
        }
    }
}

五.總結(jié)

Paste_Image.png

六.項(xiàng)目Demo(使用java反射機(jī)制以及注解獲取實(shí)體類屬性和值泌辫,并拼接sql語句)

具體代碼演示請點(diǎn)擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市九默,隨后出現(xiàn)的幾起案子震放,更是在濱河造成了極大的恐慌,老刑警劉巖荤西,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伍俘,居然都是意外死亡邪锌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門癌瘾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觅丰,“玉大人,你說我怎么就攤上這事妨退「咎眩” “怎么了蜕企?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冠句。 經(jīng)常有香客問我轻掩,道長,這世上最難降的妖魔是什么懦底? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任唇牧,我火速辦了婚禮,結(jié)果婚禮上聚唐,老公的妹妹穿的比我還像新娘丐重。我一直安慰自己,他們只是感情好杆查,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布扮惦。 她就那樣靜靜地躺著,像睡著了一般亲桦。 火紅的嫁衣襯著肌膚如雪崖蜜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天烙肺,我揣著相機(jī)與錄音纳猪,去河邊找鬼。 笑死桃笙,一個胖子當(dāng)著我的面吹牛氏堤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播搏明,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鼠锈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了星著?” 一聲冷哼從身側(cè)響起购笆,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虚循,沒想到半個月后同欠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡横缔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年铺遂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茎刚。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡襟锐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膛锭,到底是詐尸還是另有隱情粮坞,我是刑警寧澤蚊荣,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站莫杈,受9級特大地震影響互例,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜姓迅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一敲霍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丁存,春花似錦肩杈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至聋伦,卻和暖如春夫偶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背觉增。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工兵拢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逾礁。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓说铃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘹履。 傳聞我的和親對象是個殘疾皇子腻扇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容