看了注解,然后又看了简单的注解的例子,自己还是亲自动手,操作一下代码,来的印象深刻些。

一下是一个简单的例子:代码注释很详细了。

package com.xxx.model.configcenter; 
 
import java.lang.annotation.*; 
import java.lang.reflect.Method; 
 
 
/** 
 * 简单注解(1):标注在方法上 
 */ 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Target(ElementType.METHOD) 
@interface Name { 
    String aa(); 
} 
 
/** 
 * 简单注解(2):标注在类上 
 */ 
@Target(ElementType.TYPE) 
@Documented 
@Retention(RetentionPolicy.RUNTIME) 
@interface Description { 
    String value();//属性 
} 
 
@Description(value = "此注解标注在类上,这是一个学生类") 
class Student { 
    @Name(aa = "此注解标注在方法是上,这是一个方法") 
    public void say() { 
        System.out.println("aaa"); 
    } 
 
    @Name(aa = "此注解标注在方法是上,说明这个学生来源") 
    public void des() { 
        System.out.println("大师兄。"); 
    } 
} 
 
/** 
 * 测试注解的用法 
 * <p> 
 * Created by lxk on 2016/9/25 
 */ 
class TestAtInterface { 
    public static void main(String[] args) { 
        //调用注解解析器 
        parseAtInterface(); 
    } 
 
    /** 
     * 注解解析器 
     */ 
    private static void parseAtInterface() { 
        Class studentClass;//学生类即本文件内的Student类 
        try { 
            //这个是Java反射的简单用法。我下文会附上Java反射的相关目录,只要肯看完,Java反射绝对可以了解 
            //这个反射在框架里面用的还是蛮多的,很有必要知道,就像hashmap的源码有必要了解一下一样 
            studentClass = Class.forName("com.xxx.model.configcenter.Student");//会异常 
            if (studentClass.isAnnotationPresent(Description.class)) {//如果该注解存在,present是存在不是parent 
                Description description = (Description) studentClass.getAnnotation(Description.class); 
                System.out.println(description.value()); 
            } 
            Method[] methods = studentClass.getMethods(); 
 
            System.out.println(methods.length); 
            for (Method method : methods) { 
                //下一句代码是看看这个类一共有多少方法,每个类都继承object类,当然包含父类的一些方法 
                //想看看的话可以打开,为了测试效果,我注释了。 
                //System.out.println(method.getName()); 
                if (method.isAnnotationPresent(Name.class)) {//如果该注解存在 
                    Name name = (Name) method.getAnnotation(Name.class); 
                    System.out.println(name.aa()); 
                } 
            } 
        } catch (ClassNotFoundException e) { 
            e.printStackTrace();//实际开发里面的log可不能这么处理 
        } 
    } 
} 

以上是代码的例子,因为我的测试,都是把代码放在一个文件里面搞的测试,省去了建很多个文件的麻烦,也是为了测试的简单。然后就可以解释为什么有些给权限比如public。。。的省略了。可以直接拷贝出去放在一个文件里面就直接运行了,对于复制粘贴党来说。多安逸啊。

下面上测试的运行结果图。


   *  自定义注解 
       *   一个自定义注解必须有 
            @Target  说明这个注解标注在哪个部位 
            @Retention  说明注解的作用范围 
       *  @interface 说明是当前的文件或者说是类是一个注解类 
       *  注解类中可以有属性 
             比如:String value();还可以有其他的,不止一个。可以多个或者一个都没有 
   *  注解解析器 
       用来解析标注在类上的注解

上面是简单的概览式的总结。

关于Java反射的理解和例子的以及HashMap的源码的理解的链接如下:(有时间真的看看,不然怎么进阶呢。)

(链接1)注意看字:这个只是开始了解反射可以干嘛,然后你继续挨着看几篇就可以看明白反射了。呀库锁库哟!

(链接2)注意:这个是讲述1.7的Java HashMap的原理,这个真的还是了解下比较好。当然我也是连着总结了好几篇,不介意的,挨个都翻阅一下还是很有收获的。





评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!