Logo

郎哥编程

内置的注解

2020-01-05 239

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注解,当子类重写的方法名称和父类方法名称不一致时,编译器就会给出警告信息。如下图所示:

image.png    

                                        

@Deprecated

这也是一个标记注解,用来通知编译器使用该注解的类、方法、属性已经过时(废弃不用),编译器会显示警告信息,提醒开发者正在使用一个过时的类、方法或属性。

案例2:建立Work类,在Work类定义成员变量name,定义方法showWork(),并在定义的成员变量和方法前面添加@Deprecated注解。建立WorkTest类,验证@Deprecated注解的作用。

在built包下新建Work类。代码如下:

image.png

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

在built包下新建WorkTest类。代码如下:

image.png

在上面的代码,编译器给出了警告信息,黄色的图标和下划线,但不影响到程序的正常运行,尽管不影响使用,但建议还是不要使用JDK废弃的方法,后面的JDK更新后可能会删除这些方法。

程序执行结果如下图所示:

image.png 

@SuppressWarnings

该注解用来阻止编译器发出警告信息。编译器在编译代码时,会输出一些安全警告信息,但会忽略@SuppressWarnings注解标记的元素产生的警告信息。

该注解可用于标记类、成员变量、方法、参数和局部变量,注解的作用范围为源代码级,注解信息不会保留在class文件中,注解的属性为value,是String类型的数组,可以忽略多种类型的警告信息。

案例2的WorkTest类编译器给出了showWork()方法废弃不用的警告信息,如果希望编译器忽略类似的警告信息,可以在main()方法前面添加@SuppressWarnings注解,注解的值为“deprecation”,该值会让编译器忽略@Deprecated注解的信息。代码如下所示:

 image.png 

从上面的代码可以看出,添加@SuppressWarnings注解后,警告信息已经没有了。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论