国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

35_張孝祥Java高新技術(shù)_為注解增加各種屬性

2019-11-14 22:48:33
字體:
供稿:網(wǎng)友
35_張孝祥java高新技術(shù)_為注解增加各種屬性

注解的作用之所以那么強(qiáng)大,就是因?yàn)樗?font color="#ff0000">屬性

  • 注解很像接口,屬性很像方法.

 

  • 什么是注解的屬性
    • 一個(gè)注解相當(dāng)于一個(gè)胸牌,如果你胸前貼了胸牌,就是傳智播客的學(xué)生,否則,就不是。如果還想?yún)^(qū)分出事傳智播客

哪個(gè)班的學(xué)生,這個(gè)時(shí)候可以為胸牌在增加一個(gè)屬性進(jìn)行區(qū)分。加了屬性的標(biāo)記效果為:@MyAnnotation(color=”red”)

  • 定義基本類型的屬性和應(yīng)用屬性:
    • 在注解類中增加String color();//實(shí)際上默認(rèn)是像接口一樣,是 public final的
    • @MyAnnotation(color=”red”)
  • 用反射方式獲得注解對應(yīng)的實(shí)例對象后,再通過該對象調(diào)用屬性對應(yīng)的方法
MyAnnotation a=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);System.out.PRintln(a.color());

可以認(rèn)為上面這個(gè)@MyAnnotation是MyAnnotation類的一個(gè)實(shí)例對象.

  • 為屬性指定缺省值
    • String color() default “yellow”;
  • value屬性:
    • String value() default “zxx”;
    • 如果注解中有一個(gè)名稱為value的屬性,且你只想設(shè)置value屬性(即其他屬性都采用默認(rèn)值或者)

 

 

 

  • 一個(gè)注解定義的案例:
package com.itcast.day2;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import com.itcast.day1.EnumTest;/** * 定義注解 * @author liujl * *///Retention默認(rèn)為class階段,注解MyAnnotation的生命周期為運(yùn)行階段@Retention(RetentionPolicy.RUNTIME)//默認(rèn)值為任何元素,若在數(shù)組里只填寫METHOD則使用注解的類編譯報(bào)錯(cuò)@Target({ElementType.METHOD,ElementType.TYPE})public @interface MyAnnotation {    String value();//牛逼的名稱,居然可以在@時(shí)默認(rèn)不寫名字    String color() default "blue"; //String類型    int[] arrayAttr() default {1,2,3};//數(shù)組類型     Class clazz() default java.lang.String.class;//字節(jié)碼    EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.GREEN;    MetaAnnotation metaAnnotation() default @MetaAnnotation("test");     }/** * Rentention * 關(guān)于java程序的三個(gè)階段 * source階段: .java--->編譯--->.class * class階段:  .class-->進(jìn)入jvm檢查階段--->字節(jié)碼 * runtime階段: 已經(jīng)通過安全檢查--被調(diào)入內(nèi)存,被視為字節(jié)碼 *  */
package com.itcast.day2;import com.itcast.day1.EnumTest;/** * 使用注解MyAnnotation * @author hp * */@MyAnnotation(value="123",color="456",arrayAttr=333,clazz=java.lang.Integer.class,lamp=EnumTest.TrafficLamp.RED,metaAnnotation=@MetaAnnotation("334455"))public class MyAnnotationTest {}
package com.itcast.day2;/** * 用反射的方式得到注解,并打印其屬性 * @author liujl * */public class MyAnnotationTestRun {    public static void main(String[] args) {        if(MyAnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){            MyAnnotation MyAnnotation=MyAnnotationTest.class.getAnnotation(MyAnnotation.class);            //value很牛逼,如果注解中只有它時(shí)可以省略名稱-value,而直接填值"xxx"            System.out.println(MyAnnotation.value());            System.out.println(MyAnnotation.color());//String            System.out.println(MyAnnotation.clazz().getName());//字節(jié)碼            System.out.println(MyAnnotation.arrayAttr()[0]);//數(shù)組            System.out.println(MyAnnotation.lamp().nextLamp());//枚舉 紅燈下一盞是綠燈            System.out.println(MyAnnotation.metaAnnotation().value());//注解 注解的屬性也是一個(gè)注解 @代表"實(shí)例化"一個(gè)注解                    }    }}/**運(yùn)行結(jié)果:123456java.lang.Integer333GREEN : 45334455 */
package com.itcast.day1;/** * 注解 MyAnnotation用到的枚舉類型 * @author liujl * */public class EnumTest {    public enum TrafficLamp{                //RED,GREEN,YELLOW這些元素都是枚舉TrafficLame的子類的實(shí)例        RED(30){//內(nèi)部類            @Override            public TrafficLamp nextLamp() {//實(shí)現(xiàn)抽象方法                return GREEN;            }        },        GREEN(45){            @Override            public TrafficLamp nextLamp() {                return YELLOW;            }        },        YELLOW(5)/*調(diào)用YELLOW子類有參數(shù)構(gòu)造,子類.super(5)調(diào)用了父類TrafficLamp的有參構(gòu)造*/{            @Override            public TrafficLamp nextLamp() {                return RED;            }        };        private int time;        public abstract TrafficLamp nextLamp();//抽象方法        private TrafficLamp(int time){this.time=time;}//構(gòu)造方法要私有化                        @Override        public String toString() {            return this==RED?"RED : "+this.time:this==GREEN?"GREEN : "+this.time:"YELLOW : "+this.time;        }    }}
Java Language and Virtual Machine Specifications  ( Java語言和虛擬機(jī)說明書)http://docs.Oracle.com/javase/specs/index.html

java1.5說明書  http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html

打開后,搜索   Annotation Types ,就可以知道關(guān)于注解的詳細(xì)介紹。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白河县| 林口县| 大石桥市| 济宁市| 松溪县| 凌海市| 巴塘县| 木里| 镇远县| 安岳县| 博白县| 宁河县| 楚雄市| 涿州市| 高青县| 双流县| 鄂尔多斯市| 普定县| 苗栗市| 乐平市| 贺州市| 苍南县| 江都市| 五常市| 阿城市| 拉孜县| 广昌县| 洪泽县| 金坛市| 宜君县| 承德县| 禄丰县| 遵化市| 清流县| 仁怀市| 灵武市| 阿巴嘎旗| 西藏| 清远市| 池州市| 缙云县|