zoukankan      html  css  js  c++  java
  • 注解

    1.什么是注解

    1.1注解入门

    注解起源

    annotation 从JDK5.0开始引入

    注释和注解

    comment 注释

    • 不是程序本身,给人解释程序

    annotation 注解

    • 不是程序本身,可以对程序作出解释
    • 可以被其他程序(编译器)读取,通过反射读取
    注解的格式

    @注释名 可以添加参数值

    @SuppressWarnings(value="unchecked")
    

    @Deprecated 已废弃的,可以写在不推荐使用的方法前

    注解在哪里使用

    可以添加在package,class,method,field等上面,相当于添加了额外的信息

    通过反射机制进行编程来实现对这些元数据的访问

    代码
    public class Test01 extends Object{
        //重写的注解
        @Override
        Public String toString{ //注解有检查的约束,如果上面的toString写的与父类不一致就会报错
            return super.toString();
        }
    }
    

    1.2内置注解

    三个内置注解

    以下三个注解定义在java.lang下,例如@Override在java.lang.Override以此类推。

    • @Override - 检查该方法是否是重写方法,没有重写会报编译错误。只适用于修饰方法。
    • @Deprecated - 标记过时方法,不鼓励程序员使用,因为危险或存在更好的选择。如果使用该方法,会报编译警告。可以用来修饰方法,属性,类。
    • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。该注释需要添加参数。
      • @SuppressWarnings("all")
      • @SuppressWarnings("unchecked")
      • @SuppressWarnings(value={"unchecked","deprecation"})
      • ......

    1.3元注解,自定义注解

    元注解

    meta-annotation 元注解:负责注解其他注解。可以在java.lang.annotation包中找到下面4个类型和它们做支持的类。

    • @Target - 描述注解的使用范围(注解可以用在什么地方)
    • @Retention - 表示需要在什么样的级别保存该注解信息,描述注解的生命周期(SOURCE<CLASS<RUNTIME) 常用
    • @Documented - 标记这些注解是否包含在用户文档中。
    • @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类) 子类可以继承父类的该注解
    自定义注解
    • 使用@interface来声明注解 格式public @interface 注解名 {注解内容}
    • 其中的每一个方法其实是声明了一个配置参数
    • 方法的名称就是参数的名称
    • 返回值的类型就是参数的类型 返回值只能是基本类型class,String,enum
    • 可以通过default来声明默认的参数值
    • 如果只有一个参数,一般参数名为value
    • 注解元素必须要有值,我们定义注解时一般使用空字符串或0作为默认值
    @ MyAnnotation
    public class Test02{
        
        public test(){
            
        }
    }
    //定义注解
    @Target(value = {ElementType.METHOD,ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @interface MyAnnotation{
        //仅使用元注解配置
    }
    
    代码
    public class Test03 {
        //注解可以显示赋值,如果没有默认值,就必须赋值
        @MyAnnotation2(name = "李华")
        public void test(){
    
        }
        // 只有一个参数且名为value时可以省略参数名
        @MyAnnotation3("李华")
        public void test2(){
    
        }
    }
    
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation2{
        //这是注解的参数 格式:参数类型 + 参数名 + ();
        String name() default "";
        String[] schools() default {""};
    }
    
    @Target({ElementType.TYPE,ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface MyAnnotation3{
        //如果只有一个参数,建议使用value
        String value();
    }
    
  • 相关阅读:
    IOS第一天
    Mac环境下svn的使用
    惯用代码
    ORA-12170: TNS: 连接超时
    java字符集
    java移位运算
    mysql面试题
    mysql覆盖索引(屌的狠,提高速度)
    Cannot call sendError() after the response has been committed
    maven生命周期
  • 原文地址:https://www.cnblogs.com/programthinking/p/13791675.html
Copyright © 2011-2022 走看看