国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

注解 (65)

2019-11-15 00:14:17
字體:
供稿:網(wǎng)友
注解 (65)1:所有注解都是類2:所有注解類都默認(rèn)是Annotation接口的子類。3:定義方式:

public @interface SomeAnotation{

}

4:可以注解的位置

     類上

方法上

成員變量上。

返回值上

參數(shù)上

局部變量

import org.junit.Test;@MyTestpublic class RunTest {    @MyTest    PRivate int age;    @MyTest()    public void tt(@MyTest()int a){        @MyTest        int xx=0;    }}

5:如果定義了一個注解之后,沒有說明這個注解可以注解的位置,則這個注解就可以注解在所有位置上

以下定義某個注解只可以注解到方法上:import java.lang.annotation.ElementType;import java.lang.annotation.Target;//設(shè)定注解可以注解的位置@Target(value={ElementType.METHOD})public @interface MyTest {}

6:用途

6.1:在編譯時起到限制的作用.

    public class MyServlet extends HttpServlet {    @Override    public void doGet(ServletRequest req,String name)            throws ServletException, IOException {    } }

6.2:在運(yùn)行時組反射使用

所有類的字節(jié)碼Class,Method,Field,Constractor都擁有一個方法:

boolean

isAnnotationPresent(Class<? extends Annotation>annotationClass) 如果指定類型的注解存在于此元素上,則返回 true,否則返回 false。

注解存在的范圍:

一個類:Retention,用于定義注解存在的策略:

java.lang.annotation

枚舉 RetentionPolicy

三個常量:

枚舉常量摘要

CLASS 編譯器將把注釋記錄在類文件中,但在運(yùn)行時 VM 不需要保留注釋。 在.class存在,在運(yùn)行時擦除

RUNTIME 編譯器將把注釋記錄在類文件中,在運(yùn)行時 VM 將保留注釋,因此可以反射性地讀取。運(yùn)行時存在。

SOURCE 編譯器要丟棄的注釋。只在.java文件中存在@Overied

以下是經(jīng)常使用的標(biāo)準(zhǔn)定義:

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target(value={ElementType.METHOD})public @interface MyTest {}
以下是myUnit的測試類:    核心方法:    public class MyUnit {    public static void main(String[] args) throws Exception {        System.err.println("請輸入準(zhǔn)備被測試的類:");        Scanner sc = new Scanner(System.in);        String clsName = sc.nextLine();//clsName = "cn.itcast.demo.RunTest";        //根據(jù)類名獲取這個類的字節(jié)        Class cls = Class.forName(clsName);        //實(shí)例化這個類,調(diào)用默認(rèn)構(gòu)造方法        Object obj = cls.newInstance();                //獲取這個類中的所有方法        Method[] ms = cls.getDeclaredMethods();//只獲取用戶定義的方法,private && public        //cls.getMethods();獲取這個類所方法,包括從父類中繼承的方法        //遍歷判斷某個方法上是否存在注解        for(Method m:ms){            boolean boo2 = m.isAnnotationPresent(MyTest.class);//false             if(boo2){                if(m.getModifiers()==Modifier.PRIVATE){                    System.err.println("這個私有的方法:"+m.getName()+",不支持運(yùn)行...");                    continue;                }                //運(yùn)行這個方法                m.invoke(obj);            }        }

7、注解的實(shí)例化

永遠(yuǎn)都不要實(shí)例化注解類,因注解是由系統(tǒng)通過反射實(shí)例化的。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 台南市| 泽普县| 林周县| 镇雄县| 明溪县| 大丰市| 海阳市| 大丰市| 天门市| 扎赉特旗| 南涧| 明星| 建阳市| 梁山县| 昆明市| 金昌市| 堆龙德庆县| 那坡县| 龙江县| 虹口区| 仙居县| 丰顺县| 阳西县| 容城县| 彰化县| 阳朔县| 陕西省| 保定市| 自治县| 平舆县| 石嘴山市| 光山县| 海口市| 大石桥市| 平塘县| 饶平县| 廊坊市| 青海省| 文山县| 平原县| 永修县|