【知了堂學習筆記】JAVA反射及註解--輕鬆學會註解
Java註解在程式開發中廣泛被使用,註解的使用更加的規範了程式,一般註解有兩個用法:
1.對程式本身做解釋 2.被其他程式讀取
註解比較常見的有如下幾種:
內建註解:
- @Override–>表示方法重寫。 如圖該方法父類沒有,不是重寫,所以程式碼會報錯!
2. @Deprecated–>表示該程式被廢棄,表示不推薦開發者使用。 [email protected](“all”) -->用於壓制警告資訊,根據傳遞的引數不同能壓制不同型別的警告,能幫助我們免去警告提示的煩惱 以最常用的all為例,表示壓制所有警告資訊 其他引數還有: deprecation —>壓制使用過時方法的警告 unchecked -->用於泛型未轉化的警告 fallthrough -->switch語句未使用break,穿透警告 path -->類路徑,源路徑 不存在的警告 serial -->可序列化少了serialversionID警告 finally -->finally不可能成功執行警告 請大家自主嘗試!
自定義註解:
關鍵字@interface
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定義註解 * @author Administrator * */ @Target(value=ElementType.METHOD) //元註解,修飾註解使用位置,對什麼進行修飾 //引數 //PACKAGE(包)、TYPE(方法)、CONSTRUCTOR(建構函式)、FIELD(屬性)、METHOD(方法) @Retention(RetentionPolicy.RUNTIME) //保留策略。修飾註解的有效時期 //引數 //SOURCE -->原始檔有效 //CLASS -->class檔案中有效 //RUNTIME -->程式執行時有效 public @interface sAnnotation { //定義註解,關鍵字@interface,和定義類一致,後面跟註解名 String stuName() default ""; int stuAge() default -1; //-1表示不存在 int stuId() default 0; String[] schools() default {"aaaaaa","bbbbbbbbbbbbb"};//也可以是陣列 }
如上程式碼所示,與註解有關的包在java.lang.annotation中,自定義註解一般包括兩塊,元註解和引數列表。 元註解:用於對其他註解做解釋 元註解一般用兩個:Target、Rentention。 Target用於修飾程式使用範圍,Rentention修飾註解的有效時期
自定義註解括號裡面變數的叫引數,一般定義方法如下: 引數型別 引數名() [default 值]; --------方括號內容可有可無,沒有default值時,使用註解時必須寫上該引數------------------ 注意:(1)引數名有括號 (2)default表示預設值 ,沒有時自動設為預設值 (3)一般用null和-1表示值不存在的情況。(4)引數可以為陣列 (5)並不一定是註解定義了幾個引數,使用時就要寫幾個引數
註解的使用:
註解用法很多,我就由如下程式演示。 程式:把資料庫的學生表以類的形式對映到java中 (1)先定義一段註解 //類名對應於表名,屬性名對應於欄位名
//類名的註解,表示表名
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定義註解,解析類,轉化成sql語句
* @author Administrator
*
*/
@Target(ElementType.TYPE) //修飾表
@Retention(RetentionPolicy.RUNTIME) //執行期用
public @interface sxtTable {
String value() ;//讀取類資訊
}
//屬性的註解,表明欄位名
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 解析屬性
* @author Administrator
*
*/
@Target(ElementType.FIELD) //修飾屬性
@Retention(RetentionPolicy.RUNTIME) //執行期用
public @interface sxtField {
String columnName();
String type() default "varhcar";
int length() default 0;
}
(2)在類中使用註解
/**
* 定義註解操作的類
* @author Administrator
*
*/
@sxtTable("tb_student") //引數對應表的欄位
public class sxtStudent {
@sxtField(columnName="id",type="int", length = 0) //對屬性做說明
private int id;
@sxtField(columnName="sname",type="varchar",length=10) //對屬性做說明
private String stuName;
@sxtField(columnName="sage",type="int",length=3) //對屬性做說明
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
註解使用方法如上程式已經體現,和內建註解一致。
注意:(1)註解引數只有一個是可以省略引數名,只寫值 。如: @sxtTable(“tb_student”) (2)定義註解時寫了default的可以省略引數,值便為設定的預設值 (3)註解只有一個引數時,一般把引數名設定為value() (4)單獨的定義註解一般沒有意義,要和反射一起才有用處
下一期,java反射機制詳解,完善當前程式碼的解讀程式,用反射和註解寫出能根據建立的類自動生成SQL語句的程式碼。