【java】注解总结

/**
 * 注解是一种引用数据类型,编译之后也是生成.class文件
 *  语法:
 *      [修饰符列表] @interface 注解类型名{
 *
 *      }
 *   注解注意事项:
 *      1、注解使用时语法格式:@注解类型名
 *      2、注解可出现在类、属性、方法、变量上等...
 *         注解也可出现在注解上。
 */
public class AnnotationTest01 {
    /*
        @Override这个注解只能注解方法
        凡是方法中带有这个注解,编译器都会进行检查,若方法不是重写父类的方法,编译器报错
        防止方法名写错!
     */
    @Override
    public String toString() {
        return super.toString();
    }
}
/**
 * @Deprecated 表示这个注解标注的元素已过时!!
 *      可用于告知自己或别人,这个东西已经过时辣!!!
 */
public class AnnotationTest02 {
    public static void main(String[] args) {
        doSome();//注意:在本类中调用这个被标注的过时方法时,不会出现横线
    }

    @Deprecated
    public static void doSome(){
        System.out.println("ds");
    }

    @Deprecated
    public void dohero(){
        System.out.println("dc");
    }
}
class Dep{
    public static void main(String[] args) {
        AnnotationTest02 at = new AnnotationTest02();
        at.dohero();//在别的类中调用时会出现横线!!
    }
}
/**
 * 元注解:
 *    用来标注"注解类型"的"注解。
 * 常见元注解:
 *    Target、Retention
 * 关于Target注解:
 *    Target注解用来标注"被标记的注解"可以出现在哪些位置上。
 *    @Target(ElementType.METHOD):表示"被标注的注解"只能出现在方法上。
 *    @Target(ElementType.FIELD):出现在属性上。
 *    ....
 *          如:下面的Override,只能出现在方法上!!!
 * 关于Retention注解:
 *    Retention注解用来标注"被标注的注解"最终保存在哪里。
 *
 *    @Retention(RetentionPolicy.SOURCE):表示该注解只能保留在java源文件中。
 *    @Retention(RetentionPolicy.CLASS):表示该注解被保存在class文件中。
 *    @Retention(RetentionPolicy.RUNTIME):表示该注解被保存在class文件中,且可以被反射机制所读取。
 *
 *          如:下面的Override,保留在源文件中。
 */
/*
    这里的自定义Override注解只是我用来举例,实际上Override注解已经在java中写出,有疑惑可去查阅帮助文档!
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

自定义注解:

/**
 * 自定义注解中有属性时!!!
 *  注解当中的属性可以是哪一种类型?
 *      属性的类型可以是:
 *          基本数据类+String+Class+枚举类型
 *          和以上每一种的数组形式
 */
public @interface MyAnnotation {
    /**
     * 注解中可以定义属性,以下是MyAnnotation的name属性
     * 看着像方法,但实际上称为属性name
     * @return
     */
    String name();
    /*
        年龄
     */
    int age() default 20;//属性指定默认值,指定完后,使用时不用再写进括号中!!!
    /*
        颜色
     */
    String color();
    /*
        特殊的属性名!
     */
    String value();
    /*
        邮箱,支持多个
     */
    String[] email();
}
public class MyAnnotationTest {

    /*错误写法:
        MyAnnotation自定义注解当中有属性,
        这里()中必须要给属性赋值,否则报错!
        @MyAnnotation()
        public void doSome(){}
     */

    /*正确写法:(若自定义注解中只有一个属性)
        @MyAnnotation(属性名=属性值)
        @MyAnnotation(name="hellokitty")
     */

    //正确写法:(有多个属性,用逗号隔开)
    //这里age不用再写进括号中了,因为已经指定了默认值!
    //有多个属性时value不可以省略!
    //但若是只有一个属性且是value时,属性名可省略
    //即直接写成@MyAnnotation("有点特殊")
    //tip:当数组属性的属性值只有一个时,可省略大括号!
    @MyAnnotation(name="hellok",color="黄色",value="有点特殊",email={"123@a.com.2@.cn"})
    public void dosome(){}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值