天天看點

Java注解全面總結,有了這些中高端面試專題-大廠還會遠嗎

boolean hasAnnotation = TestAnnotationMain.class.isAnnotationPresent(AnnotationTest.class);

    if (hasAnnotation) {

        AnnotationTest annotation = TestAnnotationMain.class.getAnnotation(AnnotationTest.class);

        System.out.println(annotation.name());

    }

}
           

}

![](https://upload-images.jianshu.io/upload_images/3012005-037c41da49c434e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)



如果我們想給一個類的屬性進行指派可以這麼做  

1.建立一個注解如下



           

@Documented

@Retention(RetentionPolicy.RUNTIME)

public @interface AnnotationTest1 {

String value(); //value來定義
           

}

2.引用該主解



           

public class Test {

@AnnotationTest1(value = "小雲") //引用注解進行指派

public String name;
           

}

3.測試



           

public class TestAnnotation1Main {

public static void main(String[] args) {

    try {

        Field name = Test.class.getDeclaredField("name");//該該類的字段

        name.setAccessible(true); 

        AnnotationTest1 annotationTest1 = name.getAnnotation(AnnotationTest1.class);//擷取該字段的注解

        if (annotationTest1 != null) {

            System.out.println(annotationTest1.value()); //輸出值

        } 

    } catch (NoSuchFieldException e) {

        e.printStackTrace();

    }

}
           

}

> 擷取方法上的注解類 如AnnotationTest2



           

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface AnnotationTest2 {

//todo無任何方法或者屬性
           

}

public class Test {



    @AnnotationTest1(value = "小雲")

    public String name;



    @AnnotationTest2 //目的擷取該AnnotationTest2 

    public void fun() {

        System.out.println("方法執行");

    }

} 

```



擷取



```

public class TestAnnotation1Main {

    public static void main(String[] args) {

        try {

            Field name = Test.class.getDeclaredField("name"); //擷取該類的聲明字段

            name.setAccessible(true);

            AnnotationTest1 annotationTest1 = name.getAnnotation(AnnotationTest1.class);//擷取該字段的注解

            if (annotationTest1 != null) {

                System.out.println(annotationTest1.value()); //輸出值

            }



            Method fun = Test.class.getDeclaredMethod("fun");

            if (fun != null) {

                Annotation[] annotations = fun.getAnnotations();

                for (int i = 0; i < annotations.length; i++) {

                    System.out.println(annotations[i].annotationType().getSimpleName());

                }

            }

        } catch (NoSuchFieldException | NoSuchMethodException e) {

            e.printStackTrace();

        }

    }

} 

```



舉例



```

@Documented

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

}



public class MyTest { //進行擷取注解方法的全部資料

    @MyAnnotation

    public void mytestLoad() {

        System.out.println("測試加載");

    }

    @MyAnnotation

    public void mytestRequest() {

        System.out.println("測試請求");

    }

    @MyAnnotation

    public void mytestProgress() {

        System.out.println("測試進度");

    }

    @MyAnnotation

    public void mytestError() {

        System.out.println(1 );

    }

   ///該方法不執行

   public void mytestNoAnno(){

        System.out.println("沒有注解的方法");

    }

}



public class TestMain {

    public static void main(String[] args) {

        MyTest myTest = new MyTest();

        Method[] methods = myTest.getClass().getDeclaredMethods();

        for (int i = 0; i < methods.length; i++) {

            Method method = methods[i];

            if (method.isAnnotationPresent(MyAnnotation.class)) {

                try {

                    method.setAccessible(true);

                    method.invoke(myTest, null);//調用該類的注解方法

                } catch (IllegalAccessException e) {

                    e.printStackTrace();

                } catch (InvocationTargetException e) {

                    e.printStackTrace();

                }

            }

        }

        System.out.println("==================輸出完成!====================");

    }

} 

```



![](https://img-blog.csdnimg.cn/img_convert/cff9431623e52f7a304f34d42aca7e46.png)



下載下傳

==



[**Annotation案例代碼下載下傳**](

)



總結

==



我們在開發中長見的注解如下:



| 常用注解 | 解釋 |

| --- | --- |

| @Override | 方法重寫 |

| @SuppressWarnings | 提示警告 |


> **Java網盤:pan.baidu.com/s/1MtPP4d9Xy3qb7zrF4N8Qpg
> 提取碼:2p8n**



# 總結

機會是留給有準備的人,大家在求職之前應該要明确自己的态度,熟悉求職流程,做好充分的準備,把一些可預見的事情做好。

對于應屆畢業生來說,校招更适合你們,因為絕大部分都不會有工作經驗,企業也不會有工作經驗的需求。同時,你也不需要僞造高大上的實戰經驗,以此讓自己的履歷能夠脫穎而出,反倒會讓面試官有所懷疑。

你在大學時期應該明确自己的發展方向,如果你在大一就确定你以後想成為Java工程師,那就不要花太多的時間去學習其他的技術語言,高數之類的,不如好好想着如何夯實Java基礎。下圖涵蓋了應屆生乃至轉行過來的小白要學習的Java内容:

**請轉發本文支援一下**

**[CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊】](

)**

![](https://img-blog.csdnimg.cn/img_convert/02c18b75c2a584cdeecdc513d02b2912.png)

悉求職流程,做好充分的準備,把一些可預見的事情做好。

對于應屆畢業生來說,校招更适合你們,因為絕大部分都不會有工作經驗,企業也不會有工作經驗的需求。同時,你也不需要僞造高大上的實戰經驗,以此讓自己的履歷能夠脫穎而出,反倒會讓面試官有所懷疑。

你在大學時期應該明确自己的發展方向,如果你在大一就确定你以後想成為Java工程師,那就不要花太多的時間去學習其他的技術語言,高數之類的,不如好好想着如何夯實Java基礎。下圖涵蓋了應屆生乃至轉行過來的小白要學習的Java内容:

**請轉發本文支援一下**

**[CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視訊】](

)**

[外鍊圖檔轉存中...(img-tbr9xqUM-1631409345785)]

![](https://img-blog.csdnimg.cn/img_convert/b49693fb56c3efcdf2cdf7b3b5cfbca4.png)