1. 程式人生 > >【知了堂學習筆記】JAVA反射及註解--輕鬆學會註解

【知了堂學習筆記】JAVA反射及註解--輕鬆學會註解

Java註解在程式開發中廣泛被使用,註解的使用更加的規範了程式,一般註解有兩個用法:

1.對程式本身做解釋 2.被其他程式讀取

註解比較常見的有如下幾種:

內建註解:

  1. @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語句的程式碼。

感謝觀看!