註解的作用:
1,生成文檔。這是最常見的,也是java 最早提供的註解。常用的有@see @param @return 等
2,跟蹤代碼依賴性,實現替代配置文件功能。比較常見的是spring 2.5 開始的基於註解配置。
作用就是減少配置。現在的框架基本都使用了這種配置來減少配置文件的數量。
以後java的程序開發,最多的也將實現註解配置,具有很大用處;
3,在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出。java的內置了3個基本註解,保存在java.lang中:
1,@SuppressWarnnings("deprecation")用於取消警告
2,@Deprecated標識該處已經過時。
3,@Override標識重寫父類的方法或實現接口的方法
注:
註解相當於一種標記,在程序中加了註解就等於打上了某種標記
註解可以在包,類,字段,方法,方法參數及局部變量上使用。
以下是兩個元註解:
//設置該註解類的生命週期爲存在至運行時,這種稱爲元註解:
其定義的生命週期有三種值:SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)
//設置該註解使用的位置,可以設置多個位置,以數組的方式存儲
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})
註解的屬性:
註解中的屬性相當於是某種標示。相當於一個公司的胸牌,如果有胸牌就是該公司員工,否則就不是。
註解的屬性的返回值類型有:
1--8大基本數據類型:float,double,byte,short,int,long,char,boolean
2--String類型
3--Class類型
4--Annotation註解類型
5--枚舉類型
6--以及以上各種類型的數組類型
注:註解中有一個比較特殊的屬性value()如果只想給value屬性賦值,則就給其他屬性設默認值即可。
註解的定義語法:
@元註解//可以定義註解的生命週期,及註解使用的位置等。
@interface 註解名稱{
//代碼體
返回值類型 屬性名() [default 默認值]//defualt語句是爲屬性設置缺省默認值,可以省略
}
註解的綜合示例代碼:
自定義的一個註解:
package com.itheima.annotationdemos;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 自定義的一個註解
* @author wuyong
*
*/
@Retention(RetentionPolicy.RUNTIME)//默認值是CLASS
public @interface AnnotationUnit {
String value();
}
綜合的簡單示例代碼:
其中的代碼要用到上面的自定義註解。
package com.itheima.annotationdemos;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.management.DescriptorKey;
/**
* 註解的反射調用
* @author wuyong
* 三個基本的註解
*@SuppressWarnnings("deprecation")用於取消警告
*@Deprecated標識該處已經過時。
*@Override標識重寫父類的方法或實現接口的方法
*總結:
* 1,註解相當於一種標記,在程序中加了註解就等於打上了某種標記
* 沒加則等於沒有任何標記。標記可以在包,類,字段,方法,方法參數及局部變量上。
*/
@AnnotationClass1(100)
public class AnnotationDemo {
/**
* @param args
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) {
//調用一個過時的方法
System.runFinalizersOnExit(true);
//判斷指定類型的註解存在於此元素上,則返回 true,否則返回 false。
if (AnnotationDemo.class.isAnnotationPresent(AnnotationClass1.class)) {
//如果存在該元素的指定類型的註解,則返回對應註解,否則返回 null。
AnnotationClass1 ad = (AnnotationClass1)AnnotationDemo.class.getAnnotation(AnnotationClass1.class);
//利用獲得的註解對象來進行相應的操作,比如打印出註解,及其屬性。
System.out.println(ad);
System.out.println("布爾類型屬性:" + ad.isBoolean());
System.out.println("char類型屬性:" + ad.isChar());
System.out.println("long類型屬性:" + ad.isLong());
System.out.println("Byte類型屬性:" + ad.isByte());
System.out.println("Double類型屬性:" + ad.isDouble());
System.out.println("Float類型屬性:" + ad.isFloat());
System.out.println("Short類型屬性:" + ad.isShort());
System.out.println("String類型屬性:" + ad.isString());
System.out.println("Class類型屬性:" + ad.isClass());
System.out.println("Array類型屬性的長度:" + ad.isArray().length);
System.out.println("Annotation類型屬性的value值:" + ad.isAnnotation().value());
}
}
//標識該方法爲過時的
@Deprecated
public void show() {
System.out.println("被標識失效的方法");
}
//標識重寫
@Override
public boolean equals(Object obj) {
return true;
}
}
/**
* 註解的定義和反射調用
* @author wuyong
*註解屬性的返回值類型有:
* 1--8大基本數據類型:float,double,byte,short,int,long,char,boolean
* 2--String類型
* 3--Class類型
* 4--Annotation註解類型
* 5--枚舉類型
* 6--以及以上各種類型的數組類型
*/
//設置該註解類的生命週期爲存在至運行時,次種稱爲元註解:有三種值:SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)
//設置該註解使用的位置,可以設置多個位置,以數組的方式存儲
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})
@interface AnnotationClass {
/**
* 以下是註解的屬性
* defualt語句是爲屬性設置缺省值
* @return
*/
//字符串類型
String isString() default "blue";
//int類型
int value();//該屬性是最特殊的,即如果註解中只有一個value屬性時,賦值時就可以省略掉’value =‘ 這一部分直接寫值。
//布爾類型
boolean isBoolean() default true;
//單精度浮點型
float isFloat() default 1;
//雙精度浮點類型
double isDouble() default 1.12;
//char類型
char isChar() default 'a';
//byte類型
byte isByte() default 11;
//short類型
short isShort() default 22;
//long類型
long isLong() default 1990;
//Class類型
Class isClass() default String.class;
//數組類型
int[] isArray() default {1,2,3};
//Annotation註解類型
AnnotationUnit isAnnotation() default @AnnotationUnit("red");
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity開發</a>、<a href="http://www.itheima.com"target="blank">.Net培訓</a>、期待與您交流! ----------------------