Java注解概述和自定义注解

注解(Annotation)

  • 来自百度的定义:

    • 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
  • jdk5.0开始引入的一种注释机制

  • 作用:不是程序本身,可以对程序做出解释

  • 可以被其他程序(如:编译器)读取

内置注解

  1. 作用在代码的注解

    1. @Override:定义在java.lang.Override中,适用于修辞方法,表示一个方法声明打算重写超累中的另一个方法声明。这个注解在以前学习Java面向对象时经常见到,不再多写。
    2. @Deprecated(过时的):定义在java.lang.Derecated中,用于修辞方法、属性、类,表示过时
    public class annotation2 {
        public static void main(String[] args) {
            TestClass testClass = new TestClass();
            testClass.test1();
        }
    }
    class TestClass{
        @Deprecated
        public void test1(){}
    }
    
    1. @SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息

    ​ 部分@SuppressWarnings参数:

@SuppressWarnings("抑制的警告的具体类型");:
    deprecation:使用了不赞成的类或方法
    unchecked:执行了未检查的转换时的警告,如未使用泛型
    fallthrough:当switch下程序块直接通往下一种情况而没有break时的警告
    path:在类路径、源文件路径等中有不存在的路径时的警告
    serial:当在可序列化缺少serialVersionUID定义时的警告
    finally:任何finally子句不能正常完成时的警告
    all:关于以上所有情况的警告

​ @SuppressWarnings注解的使用:

// 1、@SuppressWarnings("all")
// 2、@SuppressWarnings({"deprecation", "unchecked"})
// 3、@SuppressWarnings(value = {"deprecation", "unchecked", "finally"})
public class annotation2 {
    public static void main(String[] args) {
        TestClass testClass = new TestClass();
        testClass.test1();
    }
}
class TestClass{
    @Deprecated
    public void test1(){}
}

三种使用方式在一个类中只能选择一种

  1. 作用在其他注解上的注解
    元注解(meta-annotation):负责注解其他注解,定义在java.lang.annotation中

    1. @Target:描述注解的适用范围
    2. @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
      1. RetentionPolicy.SOURCE:只在源码级别保存,编译时就被忽略
      2. RetentionPolicy.CLASS:在编译时被保留,在class文件中存在,但jvm会忽略
      3. RetentionPolicy.RUNTIME:将被jvm保留,在c所以能在运行时被jvm或其他使用反射机制的代码所读取和使用
    3. @Documented:说明该注解将被包含在javadoc中,属于标志注解
    4. @Inherited:说明子类可以继承父类中的该注解

自定义注解

package com.Annotation;

import java.lang.annotation.*;

public class annotation {
    // 注解可以显示赋值,如果没有默认值,则必须赋值
    // 注解无顺序
    @Myannotation(name = "name", school = {"四川", "成都"})
    public void test(){}

    // 若注解只有一个参数,可默认如下写法
    @Myannotation2("q")
    public void test2(){}
}

@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
@interface Myannotation{
    //注解的参数:参数类型+参数名
    String name() default "";
    int age() default 0;
    int id() default -1;    // 若默认值为-1,代表不存在
    String[] school();
}

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
@interface Myannotation2{
    String[] value();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值