1. 程式人生 > >java註解學習筆記

java註解學習筆記

ati type類 包括 generated override stack color 類繼承 boolean

今天看了下有關java註解的視頻學習資料在。做點筆記:

學java註解的目的:

能看別人代碼,特別是框架代碼。由於肯定與註解有關。

編程更簡潔,代碼清晰。


java註解是java1.5引入的:註解概念是java提供的一種原程序中的元素關聯不論什麽信息和元數據的途徑和方法。


常見註解(編譯時註解);

@override:方法覆蓋了它的父類的方法

@Deprecated:這個凝視是一個標記凝視。

所謂標記凝視。就是在源程序中增加這個標記後,並不影響程序的編譯。但有時編譯器會顯示一些警告信息。

或者在方法名上加一橫線,意思是建議不使用

@SuppressWarnings(""):對代碼中變量或方法的警告提示,也是想告訴該方法存在潛在風險等。

註解分類:

依照執行機制分類:

1,源代碼註解:註解僅僅在源代碼中存在 ,編譯成.class文件就不存在了。

2,編譯時註解:在源代碼和.class中都存在

3。執行時註解:在執行階段才會起作用的註解,甚至會影響執行邏輯的註解。

依照來源分類:

1。來自JDK的註解:

2。來自第三方的註解:

3。我們自定義的註解:

另外一類叫元註解:對註解的註解。

常見第三方註解:

[email protected] @Service @Repository等

[email protected] @UpdateProvider @Options等

自己定義註解:

[email protected] +註解名

如定論了一個名為Description註解:

@Target({ ElementType.METHOD, ElementType.TYPE }) [email protected],包含METHOD方法聲明,TYPE類接口,PARAMETER參數聲明。PACKAGE包聲明,LOCAL_VARIABLE局部變量聲明,FIELD字段聲明及CONSTRUCTOR構造方法聲明
@Retention(RetentionPolicy.RUNTIME) [email protected]:1。源代碼註解:註解僅僅在源代碼中存在 。編譯成.class文件就不存在了。2,編譯時註解:在源代碼和.class中都存在3,執行時註解:在執行階段才會起作用的註解,甚至會影響執行邏輯的註解。
@Inherited [email protected]

/* */
@[email protected] doc時包括註解信息
//以上4行為元註解
public @interface Description {

/*註解中的成員類型是受限制的:合法的類(int double等)包含原始類型及String,Class,Annotation,Enumeration等
* 假設註解僅僅有一個成員。則成員名必須取名為value(),在使用註解時能夠忽略成員名和賦值符號(=)
* 註解類能夠沒有成員。沒有成員的註解稱為標識註解****/
String desc();//註解中的成員(成員變量)以無參無異常方式聲明
String author();
int age() default 18;//能夠用default為成員指定一個默認值
}
以下是一個對註解進行操作的小樣例:

@Description(author = "child", desc = "在Child上的類註解") //使用註解:使用註解語法 :@<註解名>(成員名1=值1,成員名2=值2.....)多個成員用逗號分隔,依據@Target指定的使用範圍來使用
public class Child{


@Description(author = "ldm", desc = "在Child的name()方法註解")
public String name() {
// TODO Auto-generated method stub
return null;
}
@Description(author = "child", desc = "Child中number()方法註解")
public String number() {
return "100";
}
}

public static void main(String[] args) {
// 首先使用類載入器載入類
try {
Class c = Class.forName("com.ldm.test.Child");
// 找到類上面的註解
boolean isExist = c.isAnnotationPresent(Description.class);// 推斷註解是否存在
if (isExist) {
// 拿到註解實例
Description d = (Description) c.getAnnotation(Description.class);
System.out.println(d.desc());
}
//找到方法上的註解
Method[] ms=c.getMethods();
for (Method m : ms) {
boolean isMExist = m.isAnnotationPresent(Description.class);// 推斷註解是否存在
if(isMExist){
// 拿到註解實例
Description d = (Description) m.getAnnotation(Description.class);
System.out.println(d.desc());
}
}
/**********************************************/
//第二種解析方法
for (Method m : ms) {
Annotation []as=m.getAnnotations();
for (Annotation a : as) {
if(a instanceof Description){
Description d=(Description) a;
System.out.println(d.desc());
}
}
}
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

----------------控制臺打印結果------------------------------------------

在Child上的類註解
在Child的name()方法註解
Child中number()方法註解
在Child的name()方法註解
Child中number()方法註解


java註解學習筆記