高端網(wǎng)站建設(shè)公司興田德潤可以不上海網(wǎng)絡(luò)推廣排名公司
1. 注解
1.1 注釋和注解的區(qū)別?(掌握)
共同點:都可以對程序進行解釋說明。
不同點:注釋,是給程序員看的。只在Java中有效。在class文件中不存在注釋的。
? 當(dāng)編譯之后,會進行注釋擦除。
? 注解,是給虛擬機看的。當(dāng)虛擬機看到注解之后,就知道要做什么事情了。
##1.2 如何使用注解(掌握)
在以前看過注解@Override。
當(dāng)子類重寫父類方法的時候,在重寫的方法上面寫@Override。
當(dāng)虛擬機看到@Override的時候,就知道下面的方法是重寫的父類的。檢查語法,如果語法正確編譯正常,如果語法錯誤,就會報錯。
1.3 Java中已經(jīng)存在的注解(掌握)
@Override:表示方法的重寫
@Deprecated:表示修飾的方法已過時
@SuppressWarnings(“all”):壓制警告
除此之外,還需要掌握第三方框架中提供的注解:
比如:Junit
@Test 表示運行測試方法
@Before 表示在Test之前運行,進行數(shù)據(jù)的初始化
@After 表示在Test之后運行,進行數(shù)據(jù)的還原
1.4 自定義注解(了解)
自定義注解單獨存在是沒有什么意義的,一般會跟反射結(jié)合起來使用,會用發(fā)射去解析注解。
針對于注解,只要掌握會使用別人已經(jīng)寫好的注解即可。
關(guān)于注解的解析,一般是在框架的底層已經(jīng)寫好了。
1.5 特殊屬性(掌握)
value:
? 當(dāng)注解中只有"一個屬性",并且屬性名是"value",使用注解時,可以省略value屬性名
代碼示例:
//注解的定義
public @interface Anno2 {public String value();public int age() default 23;
}//注解的使用
@Anno2("123")
public class AnnoDemo2 {@Anno2("123")public void method(){}
}
1.6 元注解(了解)
可以寫在注解上面的注解
@Target :指定注解能在哪里使用
@Retention :可以理解為保留時間(生命周期)
Target:
? 作用:用來標(biāo)識注解使用的位置,如果沒有使用該注解標(biāo)識,則自定義的注解可以使用在任意位置。
? 可使用的值定義在ElementType枚舉類中,常用值如下
- TYPE,類,接口
- FIELD, 成員變量
- METHOD, 成員方法
- PARAMETER, 方法參數(shù)
- CONSTRUCTOR, 構(gòu)造方法
- LOCAL_VARIABLE, 局部變量
Retention:
? 作用:用來標(biāo)識注解的生命周期(有效范圍)
? 可使用的值定義在RetentionPolicy枚舉類中,常用值如下
- SOURCE:注解只作用在源碼階段,生成的字節(jié)碼文件中不存在
- CLASS:注解作用在源碼階段,字節(jié)碼文件階段,運行階段不存在,默認值
- RUNTIME:注解作用在源碼階段,字節(jié)碼文件階段,運行階段
注解的解析:
1.7 模擬JUnit自帶的@Test注解(了解)
代碼示例:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}public class MyTestMethod {@MyTestpublic void method1(){System.out.println("method1");}public void method2(){System.out.println("method2");}@MyTestpublic void method3(){System.out.println("method3");}
}public class MyTestDemo {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {//1,獲取class對象Class clazz = Class.forName("com.itheima.test2.MyTestMethod");//獲取對象Object o = clazz.newInstance();//2.獲取所有方法Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {//method依次表示類里面的每一個方法method.setAccessible(true);//判斷當(dāng)前方法有沒有MyTest注解if(method.isAnnotationPresent(MyTest.class)){method.invoke(o);}}}
}
1.8 注解小結(jié):
掌握如何使用已經(jīng)存在的注解即可。
@Override:表示方法的重寫
@Deprecated:表示修飾的方法已過時
@SuppressWarnings(“all”):壓制警告
@Test:表示要運行的方法
在以后的實際開發(fā)中,注解是使用框架已經(jīng)提供好的注解。
自定義注解+解析注解(很難的,了解),一般會出現(xiàn)在框架的底層。當(dāng)以后我們要自己寫一個框架的時候,才會用到自定義注解+解析注解。