java注解和反射

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);


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念 ??Annotation(注解)就是Java提供了一種源程序中的元素關(guān)聯(lián)任何信息和任何元數(shù)據(jù)(metad...
    從菜鳥(niǎo)到老菜鳥(niǎo)閱讀 2,251評(píng)論 0 2
  • 內(nèi)容概要 Annotation的概念 Annotation的作用 Annotation的分類 系統(tǒng)內(nèi)置注解 元注解...
    DevinZhang閱讀 4,333評(píng)論 0 29
  • java自定義注解 Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說(shuō)明、配...
    尼爾君閱讀 560評(píng)論 0 0
  • ? “大部分人在二三十歲上就死了, 因?yàn)檫^(guò)了這個(gè)年齡, 他們只是自己的影子。 此后的余生則是在模仿自己中度過(guò), 日...
    莫莉姑娘閱讀 753評(píng)論 0 3
  • 這僵尸進(jìn)程難得我恨不得自己變成僵尸跳到電腦里!
    001cyf閱讀 168評(píng)論 2 1

友情鏈接更多精彩內(nèi)容