成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java 注解學習筆記

瀏覽:3日期:2022-08-22 08:44:05

注解說明

Java注解又稱Java標注,是Java語言5.0版本開始支持加入源代碼的特殊語法元數據。為我們在代碼中添加信息提供了一種形式化的方法,使我們可以在稍后某個時刻非常方便的使用這些數據。Java語言中的類、方法、變量、參數和包等都可以被標注。和Javadoc不同,Java標注可以通過反射獲取注解內容。在編譯器生成類文件時,注解可以被嵌入到字節碼中。Java虛擬機可以保留注解內容,在運行時可以獲取到注解內容。

內置注解

Java定義了一套注解,共有7個,3個在java.lang中,剩下4個在java.lang.annotation中。

1.作用在代碼的注解是:

@Override - 檢查該方法是否是重寫方法。如果發現其父類,或者是引用的接口中并沒有該方法時,會報編譯錯誤。 @Deprecated - 標記過時方法。如果使用該方法,會報編譯警告。 @SuppressWarnings - 指示編譯器去忽略注解中聲明的警告。

2.作用在其他注解的注解(或者說元注解)是:

@Retention - 標識這個注解怎么保存,是只在代碼中,還是編入class文件中,或者是在運行時可以通過反射訪問。 @Documented - 標記這些注解是否包含在用戶文檔中。 @Target - 標記這個注解應該是哪種Java成員。 @Inherited - 標記這個注解是繼承于哪個注解類(默認注解并沒有繼承于任何子類)

3.從Java 7開始,額外添加了3個注解:

@SafeVarargs - Java 7開始支持,忽略任何使用參數為泛型變量的方法或構造函數調用產生的警告。 @FunctionalInterface - Java 8開始支持,標識一個匿名函數或函數式接口。 @Repeatable - Java 8開始支持,標識某注解可以在同一個聲明上使用多次。

元注解

元注解就是上面說到的作用在其他注解上的注解。

1.@Retention:表明該注解的生命周期

生命周期類型 描述 RetentionPolicy.SOURCE 標記的注釋僅保留在源級別中,并由編譯器忽略。 RetentionPolicy.CLASS 標記的注釋在編譯時由編譯器保留,但Java虛擬機(JVM)會忽略。 RetentionPolicy.RUNTIME 標記的注釋由JVM保留,因此運行時環境可以使用它。

2.@Documented:表明該注解標記的元素可以被Javadoc或類似的工具文檔化

3.@Target: 表明該注解可以應用的java元素類型

Target類型 描述 ElementType.TYPE 可以應用于類的任何元素。 ElementType.FIELD 可以應用于字段或屬性。 ElementType.METHOD 可以應用于方法級注釋。 ElementType.PARAMETER 可以應用于方法的參數。 ElementType.CONSTRUCTOR 可以應用于構造函數。 ElementType.LOCAL_VARIABLE 可以應用于局部變量。 ElementType.ANNOTATION_TYPE 可以應用于注釋類型。 ElementType.PACKAGE 可以應用于包聲明。 ElementType.TYPE_PARAMETER 1.8版本新增,應用于類型變量 ElementType.TYPE_USE 1.8版本新增,應用于任何使用類型的語句中(例如聲明語句、泛型和強制轉換語句中的類型)

4.@Inherited:表明使用了@Inherited注解的注解,所標記的類的子類也會擁有這個注解

5.@Repeatable:Java SE 8中引入的,@Repeatable注釋表明標記的注釋可以多次應用于相同的聲明或類型使用(即可以重復在同一個類、方法、屬性等上使用)。

自定義注解

其實說了這么多,都是一些總結性的知識點,我敢說到現在,大家還是對注解是云里霧里的。想要更好的認識注解,只有我們自己定義一個注解,來實現一個我們的注解,通過實現一個我們自己的注解來熟悉注解的工作流程。

Java中自定義注解和創建一個接口相似,聲明一個注解要用到以下東西:

修飾符:訪問修飾符必須為public,不寫默認為pubic; 關鍵字:關鍵字為@interface; 注解名稱:注解名稱為自定義注解的名稱,使用時還會用到; 注解類型元素:注解類型元素是注解中內容,可以理解成自定義接口的實現部分。

同時需要注意以下事項:

注解方法不能有參數; 注解方法的返回類型局限于原始類型,字符串,枚舉,注解,或以上類型構成的數組; 注解方法可以包含默認值; 注解可以包含與其綁定的元注解,元注解為注解提供信息。

規則知道了,下面我來編碼實現一個自定義的注解。比如我們在實現一個自定義的ORM框架的時候,都會通過注解來實現數據表名與JAVA類的映射,表字段與JAVA類字段的映射關系,下面就來簡單實現這個功能。

定義Table注解:

package com.jellythink.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(value={ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Table { String value();}

定義字段注解:

package com.jellythink.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(value={ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface FieldMapping { String name(); String type(); int length();}

應用注解:

package com.jellythink;import com.jellythink.annotation.FieldMapping;import com.jellythink.annotation.Table;@Table('tb_student')public class Student { @FieldMapping(name = 'id', type = 'int', length = 10) private int id; @FieldMapping(name = 'name', type = 'varchar', length = 6) private String stuName; @FieldMapping(name = 'age', type='int', length = 4) private String stuAge; // 省略getter and setter}

讀取注解信息:

package com.jellythink;import com.jellythink.annotation.Table;import com.jellythink.annotation.FieldMapping;import java.lang.reflect.Field;public class Main { public static void main(String[] args) { try { Class clazz = Class.forName('com.jellythink.Student'); // 查詢類上的注解 Table tbStudent = (Table)clazz.getAnnotation(Table.class); System.out.println(tbStudent.value()); // 查詢屬性上的注解 Field stuId = clazz.getDeclaredField('id'); FieldMapping fieldStuId = stuId.getAnnotation(FieldMapping.class); System.out.println(fieldStuId.name() + '--' + fieldStuId.type() + '--' + fieldStuId.length()); Field stuName = clazz.getDeclaredField('stuName'); FieldMapping fieldStuName = stuName.getAnnotation(FieldMapping.class); System.out.println(fieldStuName.name() + '--' + fieldStuName.type() + '--' + fieldStuName.length()); Field stuAge = clazz.getDeclaredField('stuAge'); FieldMapping fieldStuAge = stuName.getAnnotation(FieldMapping.class); System.out.println(fieldStuAge.name() + '--' + fieldStuAge.type() + '--' + fieldStuAge.length()); // 通過上面查詢到的數據拼接成SQL語句 String name = '果凍'; String sql = 'select * from ' + tbStudent.value() + ' where ' + fieldStuName.name() + ' = ’' + name + '’'; System.out.println('SQL=' + sql); } catch (Exception e) { // Handle the exception } }}

通過上面的代碼,有木有感受到自定義注解還是非常簡單的;同時有沒有感覺到注解這個功能是非常強大的。

總結

總的來說,注解這個功能很強大,但是使用起來確是非常簡單的,這就是牛叉東西的特點,好用又讓人不感覺到復雜。以后再遇到注解東西,內心就不再犯怵,不再迷茫了。

以上就是Java 注解學習筆記的詳細內容,更多關于Java 注解的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲日本电影在线| 欧美粗暴jizz性欧美20| 中文字幕欧美一区| 91福利视频网站| 欧美精选一区| 菠萝蜜视频在线观看一区| 午夜精品影院在线观看| 久久综合色之久久综合| 欧美三区在线观看| 久久精品女人| 国产亚洲毛片在线| 99视频一区二区| 激情综合色丁香一区二区| 最新成人av在线| 欧美国产日本视频| 91成人在线精品| 亚洲激情午夜| 国产精品成人观看视频免费| 国产精品99久久久久久久女警| 亚洲h在线观看| 中文字幕av一区二区三区高| 日韩欧美亚洲另类制服综合在线| 欧美最猛性xxxxx直播| 国产视频一区三区| 亚洲二区视频| 99在线|亚洲一区二区| 91免费观看视频在线| 高清成人在线观看| 国产福利精品一区| 国产传媒一区在线| 国产一区二区三区蝌蚪| 青青草97国产精品免费观看无弹窗版 | 亚洲一级二级| 91小视频在线免费看| 99麻豆久久久国产精品免费优播| 国产高清久久久久| 成+人+亚洲+综合天堂| 99国产精品久| 欧美午夜电影在线观看| 国产精品v亚洲精品v日韩精品| 欧美在线视频二区| 91麻豆福利精品推荐| 97精品久久久午夜一区二区三区 | 在线中文字幕不卡| 欧洲av一区二区嗯嗯嗯啊| 欧美性videosxxxxx| 91精品福利视频| 欧美日韩一区在线观看| 欧美人与禽zozo性伦| 欧美一级一区二区| 久久影院电视剧免费观看| 久久综合网色—综合色88| 26uuu另类欧美亚洲曰本| 欧美精品一区二区三区久久久| 欧美精品一区二区不卡| 国产欧美一区二区精品秋霞影院| 中文字幕精品一区二区精品绿巨人| 日本一区二区三区四区在线视频| 亚洲欧美综合另类在线卡通| 天堂蜜桃91精品| 国产一区二区91| 欧美日韩国产综合视频在线| 国产精品一卡| 51精品视频一区二区三区| 欧美大胆一级视频| 国产精品嫩草影院com| 亚洲v精品v日韩v欧美v专区| 日本亚洲天堂网| 99在线精品视频| 麻豆九一精品爱看视频在线观看免费| 欧美日韩你懂的| 国产欧美久久久精品影院| 亚洲成人激情社区| 成人激情午夜影院| 国产午夜久久| 精品国产乱码久久久久久浪潮| 国产精品国产三级国产普通话三级| 婷婷中文字幕综合| 国产成人av一区二区三区在线| 99久久国产综合精品麻豆| 免费亚洲一区| 国产欧美精品一区aⅴ影院| 亚洲精品乱码久久久久久日本蜜臀| 久久9热精品视频| 国产精品v亚洲精品v日韩精品| 欧美色综合网站| 亚洲精品v日韩精品| 国产真实精品久久二三区| 亚洲美女毛片| 欧美精品一区二区三| 亚洲一区二区三区四区的| 91在线丨porny丨国产| 久久久99爱| 综合久久综合久久| 国产成人日日夜夜| 欧洲精品一区二区| 亚洲码国产岛国毛片在线| 国产在线播放一区| 噜噜噜在线观看免费视频日韩| 国产精品毛片大码女人| 国产一区二区伦理片| 免费国产自线拍一欧美视频| 国产精品国产a级| 大白屁股一区二区视频| 欧美在线一区二区三区| 亚洲免费在线视频一区 二区| 99久免费精品视频在线观看| 欧美日韩性生活| 日韩电影在线观看一区| 国产欧美日本在线| 国产午夜精品久久久久久免费视 | 久久综合九色综合97_久久久| 亚洲一区成人在线| av在线播放不卡| 欧美二区三区91| 日韩av一二三| 麻豆久久婷婷| 一区二区在线免费| 91久久综合| 亚洲欧美日韩国产中文在线| 色综合天天性综合| 日韩欧美国产不卡| 国产xxx精品视频大全| 日韩三级在线免费观看| 国产高清亚洲一区| 精品少妇一区二区三区| 97成人超碰视| 国产三级精品三级在线专区| 成人一区二区三区中文字幕| 日韩一区二区三区在线视频| 国产福利精品一区二区| 日韩手机在线导航| 成人教育av在线| 国产精品久久久久桃色tv| 国产精品二区三区四区| 国产精品美女一区二区在线观看| 99久久99久久精品免费观看 | 欧美激情aⅴ一区二区三区| 国产伦理精品不卡| 日本不卡一区二区三区| 亚洲一区在线电影| 中文字幕一区二| 26uuu国产在线精品一区二区| 欧美精品在欧美一区二区少妇| 色欧美88888久久久久久影院| 一区二区三区av| 亚洲黄色一区| 一区在线免费| 国内综合精品午夜久久资源| 不卡欧美aaaaa| 久久精品人人做人人爽电影蜜月| 欧美体内she精高潮| 国产精品18久久久久| 精品少妇一区二区三区在线播放| 91麻豆福利精品推荐| 亚洲欧洲一区二区在线播放| 国产精品一区视频| 麻豆久久一区二区| 精品国精品自拍自在线| 亚洲国产一区二区在线| 欧美性xxxxxxxx| 欧美日韩一区二区三区免费看| 欧美在线观看一二区| 在线观看欧美精品| 色悠久久久久综合欧美99| 美女成人午夜| 日本黄色一区二区| 欧美中文字幕一区二区三区亚洲| 欧美性做爰猛烈叫床潮| 日本精品一区二区三区四区的功能| 一本一本大道香蕉久在线精品 | 欧美日韩1区| 欧美chengren| 色综合天天狠狠| 欧美激情亚洲| 欧美日韩亚洲一区二区三区四区| 欧美在线日韩| 国产自产在线视频一区| 伊人久久大香线蕉av超碰演员| www.日韩在线| 91丨porny丨在线| 午夜精品亚洲一区二区三区嫩草| 91在线观看高清| 欧美人与禽猛交乱配| 激情久久五月| 亚洲一区成人| 久久久久中文| 欧美日韩国产另类不卡| 色噜噜狠狠色综合中国| 欧美色涩在线第一页| 日韩一区二区三区视频| 26uuu国产日韩综合| 欧美激情综合网| 亚洲天堂av老司机| 亚洲最快最全在线视频| 天天综合日日夜夜精品| 免费人成在线不卡| 久久99精品久久久久久国产越南 | 亚洲一区二区伦理| 色域天天综合网|