Java为我们提供了三种Annotation方便我们开发。
1 Override-函数覆写注解
如果我们想覆写Object的toString()方法,请看下面的代码:
1 classAnnotationDemo2 {3 privateString info;4 publicAnnotationDemo(String info)5 {6 this.info =info;7 }8
9 publicString tostring()10 {11 return "info的值是:" + this.info;12 }13 }14
15 public classMain16 {17 public static voidmain(String[] args)18 {19 AnnotationDemo ad = new AnnotationDemo("你好");20 System.out.println(ad);21 System.out.println("Main Done//~~");22 }23 }
上面的代码,我们期望能在AnnotationDemo类中覆写toString()方法,结果在运行的时候发现,程序调用的是Object的toString方法。原因是,我们的函数代码编写有瑕疵,将本应是toString()的方法名写成了tostring().该bug在我们运行代码后才能暴露出来。如果我们在tostring()上加上@Override注解,就可以显示的告诉JAVA编译器,我的函数是要覆写父类方法,请执行检查。请看代码:
1 packagemain;2
3
4 classAnnotationDemo5 {6 privateString info;7 publicAnnotationDemo(String info)8 {9 this.info =info;10 }11
12 @Override13 publicString tostring()14 {15 return "info的值是:" + this.info;16 }17 }18
19 public classMain20 {21 public static voidmain(String[] args)22 {23 AnnotationDemo ad = new AnnotationDemo("你好");24 System.out.println(ad);25 System.out.println("Main Done//~~");26 }27 }
上面的代码不能通过编译。
2 Depreced-方法过期注解
如果我们在方法上用@Depreced注解,那么就是告诉用户,这个方法已经不推荐使用了。如下面的代码:
1 classAnnotationDemo2 {3 privateString info;4 publicAnnotationDemo(String info)5 {6 this.info =info;7 }8
9 @Deprecated10 public voidshowInfo()11 {12 System.out.println(this.info);13 }14
15 @Override16 publicString toString()17 {18 return "info的值是:" + this.info;19 }20 }21
22 public classMain23 {24 public static voidmain(String[] args)25 {26 AnnotationDemo ad = new AnnotationDemo("你好");27 System.out.println(ad);28 System.out.println("Main Done//~~");29 }30 }
上面的代码在编译的时候会警告用户,showInfo()方法已经不推荐使用了。
3 @SuppressWarning-压制警告
压制警告的意思是,当我们代码有警告信息的时候,而我们不认为该警告会对我们的代码造成威胁,此时可以用@SuppressWarning将警告的提示信息取消。
1 @SuppressWarnings("serial")2 class AnnotationDemo implementsSerializable3 {4 privateString info;5 publicAnnotationDemo(String info)6 {7 this.info =info;8 }9
10 @Deprecated11 public voidshowInfo()12 {13 System.out.println(this.info);14 }15
16 @Override17 publicString toString()18 {19 return "info的值是:" + this.info;20 }21 }
上面的代码实现了Serializable接口,该接口需要类中有一个serialVersionUID字段已标志不同的版本。而实际上我们不需要这个字段,那么在类上将该警告压制住,编译器就不会在提示警告信息了。