Anntation(註解)-----Java之輔助工具(大有前途)
之前Junit工具就有用到註解,可以單獨除錯程式,如 @Test ,@Override等這些就是註解。原先JUnit工具可以點選檢視點選開啟連結。現在介紹如何做出的註解
後設資料:
所謂後設資料就是資料的資料。也就是說,後設資料是描述資料的。就象資料表中的欄位一樣,每個欄位描述了這個欄位下的資料的含義。
後設資料可以用於建立文件,跟蹤程式碼中的依賴性,甚至執行基本編譯時檢查。許多後設資料工具,如XDoclet,將這些功能新增到核心Java語言中,暫時成為Java程式設計功能的一部分。
一般來說,後設資料的好處分為三類:文件編制、編譯器檢查和程式碼分析。程式碼級文件最常被引用。後設資料提供了一種有用的方法來指明方法是否取決於其他方法,它們是否完整,特定類是否必須引用其他類,等等。
什麼是註解:
Java中的註解就是Java原始碼的後設資料,也就是說註解是用來描述Java原始碼的。 基本語法就是:@後面跟註解的名稱。如 @Test.
Java中預定義註解 :(Java.Lang.Anntation)
①Override:標識某一個方法是否正確覆蓋了它的父類的方法。
②Deprecated:表示已經不建議使用這個類成員了。 它是一個標記註解。
③SuppressWarnings:用來抑制警告資訊。
自定義註解1:
自定義註解的語法很簡單,跟定義介面類似,只是在名稱前面加上@符號。
<span style="font-size:18px;">public @interface MyAnno {
<span style="white-space:pre"> </span>}//最簡單的,不帶任何註釋的</span>
<span style="font-size:18px;">使用:</span>
<span style="font-size:18px;"><span style="white-space:pre"> </span></span><pre name="code" class="java">@MyAnno//這是限制類
public class UserModel{
}
為註解新增成員
<span style="font-size:18px;">//定義
public @interface MyAnno {
public String schoolName();
}</span>
使用:
<span style="font-size:18px;">
@MyAnno(schoolName="湖南城市學院")
public class UserModel{
}
</span>
<span style="font-size:18px;">//使用2
@MyAnno(schoolName="城院Java高手訓練營")
public class UserModel{</span><span style="font-size:14px;">
}
</span>
以上只是簡單地介紹,不僅如此,還可以對註解進行註解,也就是說可以限制,是否作用於類 @Target(ElementType.TYPE),變數,方法@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE }),下面的程式碼有詳細介紹
對註解的註解:
☆指定目標 Target
在瞭解如何使用Target 之前,需要認識另一個類,該類被稱為ElementType (通過API詳細學習) ,它實際上是一個列舉。這個列舉定義了註釋型別可應用的不同程式元素。
☆設定保持性 Retention(@Retention(RetentionPolicy.SOURCE) )編譯器要丟棄的註釋
@Retention(RetentionPolicy.Class)編譯器將把註釋記錄在類檔案中,但在執行時 VM 不需要保留註釋。這是預設的行為。
@Retention(RetentionPolicy.RUNTIME)編譯器將把註釋記錄在類檔案中,在執行時 VM 將保留註釋,因此可以反射性地讀取。 (很重要,進行類反射的時候,後面的例子會看到)
RetentionPolicy (通過API詳細學習)列舉類中定義了3種註解保持性,分別決定了Java 編譯器以何種方式處理註解。
☆新增公共文件 Documented
在預設的情況下在使用javadoc自動生成文件時,註解將被忽略掉。如果想在文件中也包含註解,必須使用Documented為文件註解
☆設定繼承 Inherited
在預設的情況下,父類的註解並不會被子類繼承。如果要繼承,就必須加上Inherited註解。
下面給出具體的例項:
註解類:
<span style="font-size:24px;">package cn.hncu.Annotation;
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;
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.TYPE })//定義,可以使用方法,變數,
public @interface MyAnno {
public String getname() default "哈哈";//設定預設值,以後可以根據引數修改來進行不同的操作
// public String getname2() ;//不設定
}
</span>
使用註解的簡單類
/**
*
*/
package cn.hncu.Annotation;
/**
* @author xinxin
*
*/
@MyAnno
public class MyTestAnnoimp {
@MyAnno
private int age;
private String name;
public static void main(String[] args) {
}
@MyAnno
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MyTestAnno [age=" + age + ", name=" + name + "]";
}
}
對實用類進行判斷是否用到了此註解
/**
*
*/
package cn.hncu.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
/**
* @author xinxin
*
*/
public class Demo {
public static void main(String[] args) throws Exception {
Class c1=Class.forName("cn.hncu.Annotation.MyTestAnnoimp");
//判斷類是否是註解型別,之前沒有@Target(ElementType.TYPE),flg一直顯示為false
boolean flg=c1.isAnnotationPresent(MyAnno.class);
Method ms[] = c1.getDeclaredMethods();//判斷方法是否是該種型別的註解
for(Method m: ms){
boolean boo = m.isAnnotationPresent(MyAnno.class);
System.out.println("mm:"+boo+" :: "+m.getName());
}
System.out.println(MyAnno.class);
System.out.println(flg);
if(flg){
MyAnno my= (MyAnno) c1.getAnnotation(MyAnno.class);//符合就輸出做出相應的反應
System.out.println(my.getname());
//得到相應使用者名稱之後就可以作出相應的事了
}else{
System.out.println("nonono");
}
}
}
相關文章
- Java之註解(Annotation)Java
- Java之註解與反射Java反射
- Java ”框架 = 註解 + 反射 + 設計模式“ 之 註解詳解Java框架反射設計模式
- java 前途 如何Java
- Java面試題(19)Java元註解之@RetentionJava面試題
- Android 註解系列之APT工具(三)AndroidAPT
- Java必知必會之註解Java
- java程式設計思想之註解Java程式設計
- java進階之自定義註解Java
- 通用輔助生成: 使用任意輔助模型加速解碼模型
- java真的沒前途Java
- Java基礎知識整理之註解Java
- 二. 重識Java之夯實註解Java
- 多方面解讀:學Java有前途嗎?Java
- java註解Java
- 註解 javaJava
- Java學習之註解Annotation實現原理Java
- 學Java有前途嗎?Java
- Java註解詳解Java
- Java 註解詳解Java
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 註解專題(一)Java元註解,內建註解Java
- Java中的註解-自定義註解Java
- JAVA 註解 AnnontationJava
- Java註解AnnotatonJava
- Java反射-註解Java反射
- Java™ 教程(註解)Java
- Java —— 註解(Annotation)Java
- Java(5)註解Java
- java註解,反射Java反射
- Java Annotation 註解Java
- Java--註解Java
- Java 註解(Annotation)Java
- 學習java技術有前途嗎?當然有前途Java
- Java註解詳解「註解專案實戰」Java
- Java註解(Annotation)詳解Java
- 學java是否有前途呢?Java
- 我的java前途很渺茫Java