1. 程式人生 > 資訊 >網信辦通報抖音、快手、百度等 105 款 App 違法違規收集使用個人資訊

網信辦通報抖音、快手、百度等 105 款 App 違法違規收集使用個人資訊

基本註解

作用在程式碼的註解是
  • @Override - 檢查該方法是否是重寫方法。如果發現其父類,或者是引用的介面中並沒有該方法時,會報編譯錯誤。

  • @Deprecated - 標記過時方法。如果使用該方法,會報編譯警告。

  • deprecation:使用了不贊成使用的類或方法時的警告;
    unchecked:執行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合儲存的型別;
    fallthrough:當 Switch 程式塊直接通往下一種情況而沒有 Break 時的警告;
    path:在類路徑、原始檔路徑等中有不存在的路徑時的警告;
    serial:當在可序列化的類上缺少 serialVersionUID 定義時的警告;
    finally:任何 finally 子句不能正常完成時的警告;
    all:關於以上所有情況的警告
  • @SuppressWarnings - 指示編譯器去忽略註解中宣告的警告

元註解(對其他註解進行修飾的註解)是:
  • @Retention - 標識這個註解怎麼儲存,是隻在程式碼中,還是編入class檔案中,或者是在執行時可以通過反射訪問。不寫該註解預設為CLASS

    • 僅編譯期:RetentionPolicy.SOURCE

    • 僅class檔案:RetentionPolicy.CLASS

    • 執行期:RetentionPolicy.RUNTIME

  • @Documented - 標記這些註解是否包含在使用者文件中(生成在javadoc中)。

  • @Target - 標記這個註解應該是哪種 Java 成員。當註解未使用此註解修飾時可以應用在任何元素上

    //@Target(ElementType.ANNOTATION_TYPE)
    @Target({ElementType.ANNOTATION_TYPE,ElementType.FIELD})//定義Annotation可以應用在原始碼的哪些位置
    public @interface AnnotationTest {

    }
    public enum ElementType {
    TYPE,//應用在類,介面(包括註解型別),列舉

    FIELD,//應用在欄位宣告,包括列舉常量

    METHOD,//方法宣告

    PARAMETER,//形參宣告

    CONSTRUCTOR,//建構函式宣告

    LOCAL_VARIABLE,//區域性變數宣告

    ANNOTATION_TYPE,//註解型別宣告

    PACKAGE,//包宣告

    TYPE_PARAMETER,//型別引數宣告

    TYPE_USE//型別使用宣告
    }
  • @Inherited -子類匯繼承父類中被@Inherited修飾的註解

從 Java 7 開始,額外添加了 3 個註解:
  • @SafeVarargs - Java 7 開始支援,忽略任何使用引數為泛型變數的方法或建構函式呼叫產生的警告。

  • @FunctionalInterface - Java 8 開始支援,標識一個匿名函式或函式式介面。

  • @Repeatable - Java 8 開始支援,標識某註解可以在同一個宣告上使用多次。

    @Target({ElementType.ANNOTATION_TYPE,ElementType.FIELD})//定義Annotation可以應用在原始碼的哪些位置
    @Retention(RetentionPolicy.CLASS)
    public @interface AnnotationTest {
    Test2[] value();//用來存放多個相同註解
    }
    @Repeatable(value = Annotation.class)//@Repeatable括號內的就相當於用來儲存該註解內容的容器
    public @interface Test2 {
    int type() default 0;
    }
    @Test2(type = 2)
    @Test2(type = 1)
    public class base {

判斷註解是否存在

  • Class.isAnnotationPresent(Class)

  • Field.isAnnotationPresent(Class)

  • Method.isAnnotationPresent(Class)

  • Constructor.isAnnotationPresent(Class)

    w.class.isAnnotationPresent(Test2.class)//類.isAnnotationPresent(註解)存在true

反射獲取註解

  • Class.getAnnotation(Class)

  • Field.getAnnotation(Class)

  • Method.getAnnotation(Class)

  • Constructor.getAnnotation(Class)

Test2 annotation = base.class.getAnnotation(Test2.class);
System.out.println(annotation.value());