A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨玲 中级黑马   /  2013-2-11 19:51  /  1273 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------
在java中,注解其实就是一种特殊的接口.它为我们在代码中添加信息提供了一种形式
化的方法.它就相当于一种标记,在程序中加了注解就相当于为一个元素加上了一个标
记,而根据标记的不同会有不同的意义.在开发工具中,可以根据这个标记来判断你的元
素是否满足这个标记的含义.在反射时,可以得到注解的标记,通过这个标记可以判断出
元素的一些属性.而对注解的总结我从以下几个方面入手:
1.简单使用java中内置的注解.
2.自定义注解及其使用.
3.注解的生命周期
4.注解的作用域

要理解注解还是直接使用具直观了,先看看java中内置的几个注解吧.
1.java中内置的三种注解:
        @Deprecated //表示一个元素已经过时,不建议再使用
        这个注解可以声明在类,方法,成员变量之前,用于表示这个元素已经过时.

        @Override         //表示这是在覆盖父类的一个方法.
        看它的作用就知道了,把其声明在方法之前,表示这个方法正在覆盖父类的方法.
       
        @SuppressWarnings//表示取消显示指定的编译器警告
        指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定
        的编译器警告.该注解可以放在任意的位置.在添加这个注解时要注意传入参数.

2.自定义注解.
        自定义注解的格式如下:
        public @interface 注解名
        {
                //属性
        }
        先用它定义一个注解吧.
        public @interface MyAnnotation
        {
                //可以为它加入一些抽象的方法,
                String value();
                //由于它等效于接口,所以如果要在内部定义成员变量都只能是常量的,
        }
        来使用一下这个自定义的类,接口是不能直接使用的,要用的话只能是用实现了它的子类,
        而注解有一些特殊,它内部的抽象方法就相当于是它的一个属性,我们只用在使用的时候
        传入相应的属性就成了.如:
        @MyAnnotation(value="abc")
        在注解中value方法是一个比较特殊的属性,如果要传入的属性只有它一个的话我们可以
        把"value="去掉,简写成:
        @MyAnnotation("abc")
        我们还可以为注解中的属性赋初始值,用关键字 default+要赋与它的值,如:
        String value() default "abc";
        同时还可以给其定义数组类型的属性如:
        int[] array();
        当然了,也可以为其指定默认值.如:
        int[] array() default {3,2,5,7};
        在使用的时候如果只指定一个元素可以省略掉大括号,如:
        @MyAnnotation(value="sdf",array=2)//多个 属性用","分隔开
       
        同时注解中的元素也可以是别的任何类型的,注解也可以嵌套使用,还可以继承

对于注解的定义和使用基本也就是这样了,接下来是我感觉注解里面比较重要的部分.

3.注解的生命周期
        在说注解的生命周期之前,需要先清楚一个概念:元注解.何为元注解呢?
        元注解就是为注解为编写的注解.这种注解是用来指定注解的属性的.
        这个注解的生命周期就是用一个元注解的形式来表示的,这个元注解是:Retention
        Retention,中有一个枚举类型的属性用于表示注解的生命周期,这个枚举类型的属性名为:
        RetentionPolicy,它有三个取值.RUNTIME,CLASS,SOURCE,分别表示让注解保留到运行时,
        类文件时,原文件时.
        如果要让一个注解的生命周期保留到运行时就可以在这个注解之上加上:
        @Retention(RetentionPolicy.RUNTIME).
        而我们自定义的注解的生命周期默认为CLASS文件期间.
4.注解的作用域
        注解的作用域也是用一个元注解来表示的,这个元注解是:Target,
        Target 中定义了一个枚举类型的数组,这个枚举类型是:ElementType
        ElementType 它的取值有:
                TYPE:表示作用于类型上
                ANNOTATION_TYPE:表示作用于注解类型上
                CONSTRUCTOR:表示作用于构造函数上
                FIELD:表示作用于成员变量上.
                LOCAL_VARIABLE:表示作用于局部变量上
                METHOD:表示作用于方法上
                PACKAGE:表示作用于包上
                PARAMETER:表示作用于参数上
        如果注解只作用于某一个类型上就可以这样定义:
        @Target(ElementType.TYPE)
        由于定义的是ElementType的数组,所以如果还想作用于方法上,可以这样定义:
        @Target({ElementType.TYPE,Element.METHOD})
至此关于注解的知识总结就这样了,最后以一个比较全的注解类为结尾,这个注解类
保留到运行时,作用于方法和类型上,有两个属性并有其默认值:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,Element.METHOD})
public @interface MyAnnotation
{
        String value() default "abc";
        int[] array() default {3,5,7,9};
}
好了,注解的总结就这些了.

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 新年好!来加分了!

查看全部评分

2 个回复

倒序浏览
本帖最后由 黄玉昆 于 2013-2-11 23:23 编辑

看到你有一个和我当初一样的错误,嘿嘿,给你提一下啊
------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------
对于这个,不要直接复制,你可以去别人的文章中,复制,你这么复制加到文章中是不合适的。写这个是为了宣传一下咱们黑马训练营的。直接复制下面地址中的的那个”期待与您交流!“吧:
http://blog.csdn.net/shengfeixiang/article/details/8537839

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 新年好!恭喜25分了!

查看全部评分

回复 使用道具 举报
黄玉昆 发表于 2013-2-11 23:21
看到你有一个和我当初一样的错误,嘿嘿,给你提一下啊
------- android培训、java培训、期待与您交流! --- ...

呵呵,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马