Java内置的注解主要给编译器提供类的编译信息,主要有@Override、@Deprecated、@SuppressWarnings注解,这三个注解java程序员应该经常见到,下面对这三个注解分别进行说明。
@Override
这是一个标记注解,注解的元数据就是自身。该注解的出现位置是在类成员方法前面,通知编译器使用该注解的方法重写了父类的方法。在编译过程中,当编译器检测到某个方法添加了“@Override”注解时,编译器就会检查当前方法在父类是否存在,如果父类没有该方法,编译器就会给出警告信息。
案例1:建立Job类(职业类),在Job类内部定义成员变量name(职业名称),定义showJob()方法,输出name到控制台。建立Software类,继承Job类,并重写showJob()方法。
在PCoreUnit9项目新建built包,在built包下新建Job类。代码如下:
package built;
/**
* @ClassName: Job
* @Description: 注解与反射(内置的注解)案例1
* @author 编程训练营
* @date
*
*/
public class Job {
// 职业名称
String name;
public Job(String name)
{
this.name = name;
}
// 输出job信息
public void showJob()
{
System.out.println(this.name);
}
}Job类定义showJob()方法,用于输出Job类的信息。
在built包下新建Software类。代码如下:
public class Software extends Job {
/**
* 创建一个新的实例 Software.
*
* @param name
*/
public Software(String name) {
super(name);
// TODO Auto-generated constructor stub
}
/**
* @Title: showjob
* @Description: 重写父类的showJob方法
* @param 参数
* @return void 返回类型
* @throws
*/
public void showjob()
{
System.out.println(this.name);
}
}在Software类代码中,showjob()方法要重写父类的showJob()方法,但方法名称拼写错了,编译器不会发现这样的错误,编译器会把showjob()当成一个新的方法,这就违背了程序原来的设计。
如果在showjob()方法前面添加@Override注解,当子类重写的方法名称和父类方法名称不一致时,编译器就会给出警告信息。如下图所示:
@Deprecated
这也是一个标记注解,用来通知编译器使用该注解的类、方法、属性已经过时(废弃不用),编译器会显示警告信息,提醒开发者正在使用一个过时的类、方法或属性。
案例2:建立Work类,在Work类定义成员变量name,定义方法showWork(),并在定义的成员变量和方法前面添加@Deprecated注解。建立WorkTest类,验证@Deprecated注解的作用。
在built包下新建Work类。代码如下:

在上面的代码中,因为在name成员变量和showWork()方法前面添加了@Deprecated注解,编译器识别后会通过代码编辑器在name和showWork()方法名称上画一条直线提醒开发者name和showWork()方法已废弃不用。
在built包下新建WorkTest类。代码如下:

在上面的代码,编译器给出了警告信息,黄色的图标和下划线,但不影响到程序的正常运行,尽管不影响使用,但建议还是不要使用JDK废弃的方法,后面的JDK更新后可能会删除这些方法。
程序执行结果如下图所示:
@SuppressWarnings
该注解用来阻止编译器发出警告信息。编译器在编译代码时,会输出一些安全警告信息,但会忽略@SuppressWarnings注解标记的元素产生的警告信息。
该注解可用于标记类、成员变量、方法、参数和局部变量,注解的作用范围为源代码级,注解信息不会保留在class文件中,注解的属性为value,是String类型的数组,可以忽略多种类型的警告信息。
案例2的WorkTest类编译器给出了showWork()方法废弃不用的警告信息,如果希望编译器忽略类似的警告信息,可以在main()方法前面添加@SuppressWarnings注解,注解的值为“deprecation”,该值会让编译器忽略@Deprecated注解的信息。代码如下所示:
从上面的代码可以看出,添加@SuppressWarnings注解后,警告信息已经没有了。