1. 程式人生 > 其它 >java學習之註解

java學習之註解

0x00前言

1.註解是什麼:
(1)可以叫做註釋型別,註解是一種引用資料型別,編譯後也是生成class檔案
(2)提供資訊給編譯器: 編譯器可以利用註解來探測錯誤和警告資訊
比如 @Override提示子類要複寫父類中被 修飾的方法
(3)編譯階段時的處理: 軟體工具可以用來利用註解資訊來生成程式碼、Html文件或者做其它相應處理。
(4)執行時的處理: 某些註解可以在程式執行的時候接受程式碼的提取

0x01基礎使用

0x1註解的基礎屬性

1.自定義一個註解:@interface MyAnnotation在inteface前面加一個@。
2.使用範圍:類,屬性,方法,構造方法,介面上,註解也可以出現在註解上面.所有位置都可以出現;(註解的註解叫做元註解)

0x2java自帶的註解。

a.@Override這是重寫父類方法的必要註解。這個註解只能註解方法
b.這個方法是給編譯器看的,跟執行階段沒關係,編譯器看到這個註解的方法不是重寫父類的編譯器就會報錯。
c.元註解是@Target,@Retention
d.@Target,標註的註解只能出現在那些方法,@Retention,標註的註解最終儲存在哪裡

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)//只能儲存在java原始檔中
public @interface Override {
}

f.@Retention保持性

@Retention(RetentionPolicy.SOURCE)//表示儲存在java原始檔中(你在class編譯獲得class檔案中是找不到它的)
@Retention(RetentionPolicy.CLASS)//表示儲存在class檔案中
@Retention(RetentionPolicy.RUNTIME)//儲存在class檔案中還可以被反射機制訪問道

g.@Deprecated表示這個類已經過時了。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

0x03註解中定義屬性

0x1定義和使用方法

1.可以在註解的中括號了的定義屬性
2.屬性可以是的型別:byte,int,lang,short,float,double,boolean,char,String,Class,列舉型別及其以上屬性的陣列

 @interface MyAnnotation{
//    我們可以在註解中定義屬性,看著像一個方法其實它叫屬性
     String name();
     String [] str1();
     int value();
     char value2();
     boolean value3();

3.使用方法在你用註解修飾的方法的後面要用括號把屬性值賦值。
(1)如果你的屬性值只有一個並且屬性名是value的話=號和=號前面的屬性可以省略
(2)如果你在註解裡面的屬性已經進行了賦初值,就可以不用賦值。
(3)如果屬性是一個數組,但是隻有一個元素的時候可以省略大括號

class MyAnntation{
    @MyAnnotation(name = "XIAOMING",value =1,value2 ='3',value3 = true,str1 = "daiwfwa")
    public void dosome(){

    }
}

0x04反射註解

0x1.獲取類上的註解

(1)判斷是否存在該註解isAnnotationPresent()
(2)存在註解通過getAnnotation();

  public static void main(String[] args) throws Exception{
       Class class_tesr=Class.forName("zhonglin.www.MyAnntation");
       //先判斷是否有
       if (class_tesr.isAnnotationPresent(MyAnntation.class)){
           MyAnnotation myAnnotation=(MyAnnotation)class_tesr.getAnnotation(MyAnnotation.class);
           String value= myAnnotation.name();
       }
   }
}

0x2.獲取類上的註解

(1)如果需要獲得方法上的註解就得獲得方法
(2)跟前篇文章引用Method陣列去獲取getDeclareMethod獲取所有方法

  Method dosomgetfelct=class_tesr.getDeclaredMethod("dosome");
      if (dosomgetfelct.isAnnotationPresent(MyAnnotation.class));

0x05總結

總體來說註解這一塊的內容不是很多,歸納下來:1.註解的定義。2.註解的儲存性策略(@Retention)和java內建註解3.註解的反射主要是跟前面的反射機制相結合,反射章節聽完基本都是相同的方法從類-方法--屬性來獲取。
4.註解的作用還是存在在java的反序列化漏洞,當然在java開發中也會有很大的作用

0x06後言

其實看到這裡,javase基本上就完結了,接下來就是javaee的部分了javaee的部分的大部分是框架只是,框架知識呢就可以和java程式碼審計一起做了,我看的是b站上面的動力節點的java課,對比起了動力節點講的真很全面了,
javase歷經一個月多吧,發現了java和python的相似也不同確實寫python感覺要簡潔好多。接下來呢不慌進入javaee先去吧java的 爬蟲和socks對比著我以前學習的python的這兩個模組一起學習一下再進入javaee的階段。