注解(Annotation)
-
来自百度的定义:
- 定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
-
jdk5.0开始引入的一种注释机制
-
作用:不是程序本身,可以对程序做出解释
-
可以被其他程序(如:编译器)读取
内置注解
-
作用在代码的注解
- @Override:定义在java.lang.Override中,适用于修辞方法,表示一个方法声明打算重写超累中的另一个方法声明。这个注解在以前学习Java面向对象时经常见到,不再多写。
- @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(){} }
- @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(){}
}
三种使用方式在一个类中只能选择一种
-
作用在其他注解上的注解
元注解(meta-annotation):负责注解其他注解,定义在java.lang.annotation中- @Target:描述注解的适用范围
- @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
- RetentionPolicy.SOURCE:只在源码级别保存,编译时就被忽略
- RetentionPolicy.CLASS:在编译时被保留,在class文件中存在,但jvm会忽略
- RetentionPolicy.RUNTIME:将被jvm保留,在c所以能在运行时被jvm或其他使用反射机制的代码所读取和使用
- @Documented:说明该注解将被包含在javadoc中,属于标志注解
- @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();
}