day_31Java注解---Annotation

本文深入探讨了Java中Annotation的使用,包括内置的Annotation如@Override、@Deprecated、@SuppressWarnings,以及如何自定义Annotation和利用反射关联它们。通过具体代码案例,展示了如何实现方法覆盖、压制警告,并自定义Annotation来提高代码的可读性和功能性。


星期二, 十二月 01, 2015 18:30:08   

 

给编译器看的注释---Annotation

 

功能建立在反射机制之上,通过An可以对程序进行注释操作。

系统内建Anon、如何自定义、反射和n的关联,

以及如何通过ation生产Donted。

 

本章要点

   掌握Annotation的相关概念

   熟悉自定义Annotation的方法

   了解反射和Annotation的关联

 

一、Annotation

 

    Annotation  实际上表示的是一种注释的语法。

在java中最早的程序是提倡程序与配置代码相分离,

而最新的理论是将所有的配置直接写到程序之中,如果想完成这样的功能,就要使用Annotation。

伦理片 http://www.dotdy.com/

 

二、系统内建的Annotation

 

    在jdk1.5之后的系统中,内建了3个Annotation:

        @Override、@Deprecated、@SuppressWarinings。

 

2.1 @Override

    表示进行正确的覆写操作

 

   即使覆盖的方法名称写错了,也不会有任何的提示。

此时,为了保证程序可以正确地进行覆盖操作,在覆盖的时候可以明确地使用@Override表示方法是属于覆盖的操作。

  

 代码案例:

Overridetest代码   收藏代码
  1. package day30;  
  2.   
  3. public class OverrideTest {  
  4.     public static void main(String[] args) {  
  5.         Student s = new Student();  
  6.         System.out.print("..."+s.say());  
  7.     }  
  8. }  
  9. class Person {  
  10.     public String say() {  
  11.         return "Person_say()";  
  12.     }  
  13. }  
  14. //要求增加此类的子类,覆盖其方法  
  15. class Student extends Person {  
  16. /*为了保证程序可以正确地进行覆盖操作,  
  17. * 在覆盖的时候可以明确地使用@Override表示方法是属于覆盖的操作。*/  
  18. @Override  
  19. public String say() {  
  20.     return "Student_say()";  
  21.     }  
  22. }  
  23.    

 

运行结果:

...Student_say()

 

2.3@Deprecated

  @Deprecated注释表示不建议使用的操作。

例如之前在讲解线程的时候,曾经讲解过线程中的stop()、resume()、suspend()等方法是不建议使用的。

  

代码案例:

Deprecatedtest代码   收藏代码
  1. package day30;  
  2.    
  3. public class DeprecatedTest {  
  4.     public static void main(String[] args) {  
  5.         System.out.print((new Info()).getInfo());  
  6.     }  
  7. }  
  8.    
  9. class Info {  
  10. /*@Deprecated注释表示不建议使用的操作。*/  
  11. @Deprecated  
  12.     public String getInfo() {  
  13.         return "getInfo()....";  
  14.     }  
  15. }  

 

运行结果:

getInfo()....

 

2.4 @SuppressWarnings

 

 @SuppressWarnings表示的是压制警告。

如果有一些警告信息则可压制掉,不出现警告的提示。

 

@SuppressWarnings(“deprecation”)

 

使用SuppressWarnings操作的时候可以同时压制多个警告

通过SuppressWarnings的类,可以发现在此类中存在一个value的字符串数组。

 

 

 

Person类中既继承了Info类,又实现了序列化的接口,所有此时会出现多个警告。

或者可以明确的表示,是为SuppressWarnings中的value属性赋值。

 

代码案例:

 

Suppresswarningstest代码   收藏代码
  1. package day30;  
  2.    
  3. import java.io.Serializable;  
  4.    
  5. public class SuppressWarningsTest {  
  6.     @SuppressWarnings("deprecation")  
  7.     public static void main(String[] args) {  
  8.         System.out.print((new Infos()).getInfos());  
  9.     }  
  10. }  
  11.    
  12. class Infos {  
  13.     @Deprecated  
  14.     public String getInfos() {  
  15.         return "....getInfos";  
  16.     }  
  17. }  
  18.    
  19. @SuppressWarnings(value = {"serial","deprecation"})  
  20. class Persona extends Infos implements Serializable {  
  21. /*Person类中既继承了Info类,又实现了序列化的接口,所此时会出现多个警告。*/  
  22.    
  23. }  

 

 

运行结果:

....getInfos

 

三、自定义Annotation

影音先锋电影 http://www.iskdy.com/ 

 

    3.1定义Annotation的语法

      public @interface Annotation的名称{}

 

   案例:

    public @interface MyAnnotation{

    }

 

如果现在使用此Annotation的话,若不在同一个包中,则需要导入,导入之后使用@的形式反问,语法@MyAnnotation

    @MyAnnotation

    public class Info{

    }

      

在一个Annotation中实际上也可以定义若干个属性。

       public @interface MyAnnotation{

                 public String key();

                 public String value();

       }

 

   在此时Annotation中定义了key和value两个变量,若此时要使用Annotation的话,则必须明确地给出具体的内容。

 

    @MyAnnotation(key="MLDN",value="www.baidu.com")

 

 

 

如果现在希望为一个Annotation设置默认内容的话,可以通过default完成。

       public @interface MyAnnotation{

                 public String key()  default “LXX”;

                 public String value() default “HA”;

       }

 

如果没有设置内容,则将默认值去除继续使用。

 

Annotation中的变量内容可以通过枚举指定范围。

 public enum Color {

     RED,GREEN,BLUE;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值