了解注解
在學習一個新知識的時候,首先要了解這個知識的的作用,在去學習如何使用,最后了解它的底層原理,
1、注解介紹
JDK5.0開始,Java增加了注解功能,注解可以在程式編譯、加載、運行時被讀取,然后執行相應的操作,
注解和注釋
注釋是用來對類、方法或是屬性進行解釋的,沒有實際作用,
注解可以對類、方法或是屬性進行操作,
2、注解的使用
注解的使用十分簡單,只需要在類、方法或屬性上使用 @注解名就行了,
class Person{
public void wolk(){
System.out.println("人走路");
}
}
class Student extends Person{
@Override//注解:重寫標記
public void wolk() {
System.out.println("學生走路");
}
}
@Override表示子類的方法是重寫的父類的方法,在程式編譯時期會檢查該方法是否滿足重寫的要求,
Java的3個內置注解
- @Override 重寫標記,表示子類方法是重寫的父類方法
- @Deprecated 過時標記 表示該方法不推薦使用,有更好的替代方法
- @SuppressWarnings 壓制警告 可以壓制當前代碼的警告
經常用的就是@Override這個注解了,其他的用的不多,
如何自定義一個注解
在學習如何自己定義一個注解之前,先看看Java內置的注解是如何定義的,
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
其中使用了@interface宣告了Override是一個注解,@Target注解表示@Override使用的位置,@Retention注解表示@Override的生命周期,
@Target、@Retention是元注解,
元注解:用來修飾注解的注解
Java中的元注解有四個:
- @Target
- @Retention
- @Documented
- @Inherited
1. @Target
@Target用來說明注解使用的位置,它有一個ElementType[]屬性,ElementType是一個列舉型別,
public enum ElementType {
TYPE, /** Class, interface (including annotation type), or enum declaration 該注解可以用在類、介面(注解)或列舉上 */
FIELD, /**Field declaration (includes enum constants) 該注解可以用在屬性上(列舉屬性) */
METHOD,/**Method declaration 該注解可以用在方法上 */
PARAMETER,/** Formal parameter declaration 該注解可以用在引數上*/
CONSTRUCTOR,/** Constructor declaration 該注解可以用在構造器上*/
LOCAL_VARIABLE,/** Local variable declaration 該注解可以用在區域變數上*/
ANNOTATION_TYPE,/** Annotation type declaration 該注解可以用在注解型別上 */
PACKAGE,/** Package declaration 該注解可以用在包上*/
/**
* Type parameter declaration
* 該注解可以用在泛型上
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
* 該注解可以用在任意型別上
* @since 1.8
*/
TYPE_USE
}
2. @Retention
@Retention表示該注解的生命周期,@Retention有一個屬性,屬性是一個列舉型別,列舉了注解的三個生命周期,
public enum RetentionPolicy {
SOURCE,//表示注解只保留在原始碼階段,只在原始碼階段起作用
CLASS,//表示注解保留在.class檔案中,在類加載時不會被加載,jvm不可獲得注解資訊,默認值
RUNTIME//表示注解保留在.class檔案中,在類加載時會被加載,jvm可以獲得注解資訊
}
3. @Documented
@Documented表示該注解在使用javadoc命令時,將該注解包含到Java檔案中,
4. @Inherited
@Inherited表示被該注解修飾的類的子類會繼承該注解,
如果一個類被@Inherited修飾,那它的子類如果沒有被其他注解修飾,子類會繼承父類的注解
注解的屬性
注解的屬性可以是以下型別:
- 8個基本資料型別(char、byte、short、int、long、float、double、boolean)
- String
- enum
- class
- annotation
- 也可以是上面幾種型別的資料型別
定義了注解的屬性后,在使用注解時需要給注解的屬性賦值,也可以在定義屬性時使用default設定默認值,
@Target({ElementType.TYPE})
@interface MyAnno{
String value() default "我的注解";
}
寫在最后
寫這個的作用主要是用來復習自己的知識,有寫的不對或不完整的地方,請大家多多包涵,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/191468.html
標籤:Java
