總體來說註解這一塊的內容不是很多,歸納下來:1.註解的定義。2.註解的保存性策略(@Retention)和java內置註解3.註解的反射主要是跟前面的反射機制相結合,反射章節聽完基本都是相同的方法從類-方法--屬性來獲取。 4.註解的作用還是存在在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的 爬蟲和socket對比著我以前學習的python的這兩個模塊一起學習一下再進入javaee的階段。