Java内置注释
示例
Java标准版附带了一些预定义的注释。您不需要自己定义它们,您可以立即使用它们。它们使编译器能够对方法,类和代码进行一些基本检查。
@Override
此注释适用于方法,并说此方法必须重写超类的方法或实现抽象超类的方法定义。如果将此批注与任何其他类型的方法一起使用,则编译器将引发错误。
混凝土超类
public class Vehicle {
   public void drive() {
        System.out.println("I am driving");
   }
}
class Car extends Vehicle {
    //精细
    @Override
    public void drive() {
        System.out.prinln("Brrrm, brrm");
    }
}抽象类
abstract class Animal  {
   public abstract void makeNoise(); 
}
class Dog extends Animal {
    //精细
    @Override
    public void makeNoise() {
        System.out.prinln("Woof");
    }
}不起作用
class Logger1 {
    public void log(String logString) {
        System.out.prinln(logString);
    }
}
class Logger2 {
    //这将引发编译时错误。Logger2不是Logger1的子类。 
    //日志方法不覆盖任何内容
    @Override
    public void log(String logString) {
        System.out.println("Log 2" + logString);
    }
}主要目的是捕捉错误,认为您在覆盖一种方法,但实际上是在定义一种新方法。
class Vehicle {
   public void drive() {
        System.out.println("I am driving");
   }
}
class Car extends Vehicle {
    // Compiler error. "dirve" is not the correct method name to override.
    @Override
    public void dirve() {
        System.out.prinln("Brrrm, brrm");
    }
}请注意,的含义@Override已随着时间而改变:
在Java5中,这意味着带注释的方法必须重写超类链中声明的非抽象方法。
从Java6开始,还可以确保带注释的方法实现在类超类/接口层次结构中声明的抽象方法。
(在将代码反向移植到Java5时,这有时会引起问题。)
@已弃用
这会将方法标记为不推荐使用。可能有几个原因:
该API有缺陷,无法修复,
使用API可能会导致错误,
该API已被另一个API取代,
该API已过时,
该API是实验性的,可能会发生不兼容的更改,
或以上的任何组合。
弃用的具体原因通常可以在API文档中找到。
如果使用注释,则该注释将导致编译器发出错误。IDE也可能以某种方式突出显示此方法,
class ComplexAlgorithm {
    @Deprecated
    public void oldSlowUnthreadSafeMethod() {
        //这里的东西
    }
    
    public void quickThreadSafeMethod() {
        //客户代码应改用此代码
    }
}@SuppressWarnings
在几乎所有情况下,当编译器发出警告时,最适当的措施是解决原因。在某些情况下(例如,使用非类型安全的预泛型代码的泛型代码),这可能是不可能的,并且最好抑制那些您期望且无法修复的警告,这样您就可以更清楚地看到意外警告。
该注释可以应用于整个类,方法或行。它以警告类别作为参数。
@SuppressWarnings("deprecation")
public class RiddledWithWarnings {
    //几种方法在这里调用不赞成使用的代码
}
@SuppressWarning("finally")
public boolean checkData() {
    //从finally块中调用return的方法
}最好尽可能地限制注释的范围,以防止意外警告也被抑制。例如,将注释的范围限制为单行:
ComplexAlgorithm algorithm = new ComplexAlgorithm();
@SuppressWarnings("deprecation") algoritm.slowUnthreadSafeMethod(); 
//我们在上面的示例中将此方法标记为不推荐使用
@SuppressWarnings("unsafe") List<Integer> list = getUntypeSafeList(); 
//旧库返回,非通用列表,仅包含整数此注释支持的警告可能因编译器而异。JLS中仅特别提及unchecked和deprecation警告。无法识别的警告类型将被忽略。
@SafeVarargs
由于类型擦除,voidmethod(T...t)将转换为voidmethod(Object[]t)意味着编译器并不总是能够验证使用varargs是类型安全的。例如:
private static <T> void generatesVarargsWarning(T... lists) {在某些情况下使用是安全的,在这种情况下,您可以使用批注对方法进行SafeVarargs批注以禁止显示警告。如果您的使用也不安全,这显然会隐藏警告。
@FunctionalInterface
这是用于标记FunctionalInterface的可选注释。如果它不符合FunctionalInterface规范(具有单个抽象方法),它将导致编译器抱怨。
@FunctionalInterface
public interface ITrade {
  public boolean check(Trade t);
}
@FunctionalInterface
public interface Predicate<T> {
  boolean test(T t);
}
      