java註解Annotation
java中的註解在開發系統中很常用,而且作爲初學者,我們都會用到註解只不過有時候是用的jdk提供的內置註解,所以初學者都不會注意這一個用法。
1.jdk提供的內置註解
- @Override 諸位在繼承某父類,重寫方法時候這個用到最多。我們在重寫父類的toString()方法,自動 生產都會帶着個註解。
- @Deprecated。這是一個表示這個方法已經過期。我們打開jdk源碼有時候可以看到這個註解。
- @SuppressWarnings 這個註解是忽略警告信息。在用Spring的時候也是很常見的。
- @SuppressWarnings 有常見的值,分別對應如下意思
1.deprecation:使用了不贊成使用的類或方法時的警告(使用@Deprecated使得編譯器產生的警告);
2.unchecked:執行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合保存的類型; 關閉編譯器警告
3.fallthrough:當 Switch 程序塊直接通往下一種情況而沒有 Break 時的警告;
4.path:在類路徑、源文件路徑等中有不存在的路徑時的警告;
5.serial:當在可序列化的類上缺少 serialVersionUID 定義時的警告;
6.finally:任何 finally 子句不能正常完成時的警告;
7.rawtypes 泛型類型未指明
8.unused 引用定義了,但是沒有被使用
9.all:關於以上所有情況的警告。
- @SafeVarargs jdk1.7提供,主要使用在參數是變參且 是參數類型是泛型。
- @FunctionalInterface: @FunctionalInterface這是Java1.8 新增的註解,用於約定函數式接口。
函數式接口概念: 如果接口中只有一個抽象方法(可以包含多個默認方法或多個static方法),該接口稱爲函數式接口。函數式接口其存在的意義,主要是配合Lambda 表達式這個Lambda表達式雖然學了,但是沒有在工程項目中使用,填把坑挖下 來使用。Note:當接口有兩個方法時候,就不能用這個註解了。
2.自定義註解
- 創建註解類型的時候用==@inteface==。而且在Idea中創建文件時,如果創建的是註解則文件時綠色的@表示
- 元註解
@Target({METHOD,TYPE}) 表示這個註解可以用用在類/接口上,還可以用在方法上
@Retention(RetentionPolicy.RUNTIME) 表示這是一個運行時註解,即運行起來之後,才獲取註解中的相關信息,而不像基本註解如@Override 那種不用運行,在編譯時eclipse就可以進行相關工作的編譯時註解。
@Inherited 表示這個註解可以被子類繼承
@Documented 表示當執行javadoc的時候,本註解會生成相關文檔
3. 實際應用
在具體開發環節中,我是這樣使用的,通過註解定義表對應的實體類名,還有通過註解定義對應的字段名稱和數據庫表對應的屬性名成。
使用註解定義表的名稱。
package com.yzz.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Table {
/**
* 用於修飾實體類,表示實體類名與數據庫表名之間的映射
* @return
*/
String name() default "";
}
定義方法的註解
package com.yzz.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface MethodName {
String method() default "";
}
javabean的定義
@Table(name="tb_auto")
public class Auto implements Serializable {
@Column(name="aliencenum",type=String.class,isPrimary = true)
private String aliencenum; //車牌號
@Column(name="cid",type=String.class)
private String cid;
@Column(name="atime",type=Date.class)
private Date atime;
參考文獻
how2j關於註解