java注解
1 Annotation
- 不是程序本身,可以對(duì)程序做出解釋
- 可以被其他程序讀取(編譯器)
2 Annotation的格式
- @Override
3 Annotation可在哪里用
- 在類里面都可以用
public class Demo{
@Override
public String toString(){
return "";
}
}
public class Demo{
@Override//這里會(huì)報(bào)錯(cuò)
public String tostring(){
return "";
}
}
4 常見(jiàn)注解
- @Deprecated 不建議使用
- @Override 重寫
- @SuppressWarnings抑制編譯時(shí)的警告信息
SuppressWarnings(value = "all")
deprecation unchecked fallthrough path serial finally all 為參數(shù)
5 自定義注解
//@interface用于定義一個(gè)注解
@Targer{value=ElementType.Method }
public @interface MyAnnotation{
String studentName();
String studentName default ""; //用0或者空值表示默認(rèn)值,-1表示不存在,之一一個(gè)參數(shù)通常定義為value
String[] schools() default {};
}
@Target用于描述注解的使用范圍PACKAGE,TYPE,CIBSTRUCTOR,FIELD,METHOD,LOCAL VARIABLE,PARAMETER
@Retention表示在什么級(jí)別保存注釋信息 SOURCE CLASS RUNTIME 注解的什么周期
6 注解的作用
- 使用注解完成類與表結(jié)構(gòu)的映射關(guān)系(ORM 對(duì)象關(guān)系映射)
- 類與表結(jié)構(gòu)對(duì)應(yīng)
- 屬性和字段對(duì)應(yīng)
- 對(duì)象和記錄對(duì)應(yīng)
@Table = (table)
public class Student{
@Filed(columnName = "id",type = "int", length = 10)
private int id;
private String studentName;
private int age;
}
@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table{
String value();
}
@Target(value = {ElementType.FIELD}) // 修飾屬性
@Retention(RetentionPolicy.RUNTIME)
public @interface AFiled{
String columnName();
String type();
int length();
}
- 使用反射處理讀取注解信息,模擬處理注解信息的流程
public class Demo{
pubolic static void main(String [] args){
try{
Class clz = class.forname("package.Student")
//獲得類的所有注解
Annotation [] annotation = clz.getAnnotations;
Table st = (Table) clz.getAnnotation(Table.class);
//獲得類的屬性的注解
Filed f = clz.getDeclaredFiled("studentName");
AFiled afiled = (AFiled)f.getAnnotation(clz.class);
AFiled.columnName;
//根據(jù)獲得的表面,就可以寫SQL語(yǔ)句了
}
}
}
7 反射機(jī)制性能
- setAccessible
- 為true時(shí)反射對(duì)象在使用時(shí)取消Java語(yǔ)言的訪問(wèn)檢查。職位false應(yīng)該做java語(yǔ)言訪問(wèn)檢查。
- 禁用安全檢查,可以提高反射的運(yùn)行速度。但安全性會(huì)降低
8 反射操作泛型
- java采用泛型擦除機(jī)制,java新增了ParameterizedType,幾種類型來(lái)代表不能被歸一到class類中的類型。但又于原始類相同的類
getGenericParameterTypes();//獲得參數(shù)信息
getGenericReturnType();//獲得返回信息
9 反射操作注解
//獲得類注解
Annotation[] annotation = clz.getAnnotations();
Table st = (Table)clz.getAnnotation(Table.class);
Filed f= clz.getDeclaredFiled("studentName");
Filed1 filed1 = f.getAnnotation(Filed1.class);