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 =https://www.cnblogs.com/0x3e-time/p/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= https://www.cnblogs.com/0x3e-time/p/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的階段,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/459497.html
標籤:Java
