当前位置:编程学习 > JAVA >>

Java中的Annotation(1)----三个基本Annotation

Annotation简介
从JDK5.0开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解,也有地方称之为注释),其实说白了就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
 
Annotation提供了一条为程序元素设置元数据的方法,从某些方面来看,Annotation就像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被存储在Annotation的“name=value”对中。Annotation是一个接口,程序可以通过反射来获取指定程序元素的Annotation对象然后通过Annotation对象取得注释里的元数据。
 
Annotation能被用来为程序元素(类、方法、成员变量等)设置元数据。值得指出的是:Annotation不能影响程序代码执行,无论增加、删除Annotation,代码都始终如一地执行。如果希望让程序中的Annotation能在运行时起一定作用,只有通过某种配套的工具对Annotation中的信息进行访问和处理,访问和处理Annotation的工具统称APT(AnnotationProcessing Tool)。
 
Java中提供三个基本的Annotation
限定重写父类方法:@Override
@Override就是用来指定方法重写的,它可以强调一个子类必须要覆盖父类的方法。如下程序中使用@Override指定子类Apple的info方法必须重写父类方法
 
 
[java] 
public class Fruit  
{  
    public void info()  
    {   
        System.out.println("水果的info方法。。。");   
    }  
}   
  
class Apple extends Fruit  
{  
    //使用@Override指定下面方法必须重写父类方法   
    @Override   
//  public void info()   
    public void inf0()  
    {   
        System.out.println("苹果重写水果的info方法。。。");   
    }  
}  
 
public class Fruit
{
public void info()
System.out.println("水果的info方法。。。"); 
}
 
class Apple extends Fruit
{
//使用@Override指定下面方法必须重写父类方法
@Override 
// public void info()
public void inf0()
System.out.println("苹果重写水果的info方法。。。"); 
}
}
 
 
 
如果重写的方法名以及参数与父类一直那么看不出@Override什么作用,但是如果重写的方法与父类的方法不一致,那么程序将在编译阶段出错。也就是说这个注解的作用就是帮助我们避免一些低级错误。
 
标示已过时:@Deprecated
@Deprecated用于表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。如下程序指定Apple类中的info方法已过时,其他程序中使用Apple类的info方法时编译器将会给出警告。
 
 
[java]  
class Apple  
{  
    //定义info方法已过时   
    @Deprecated  
    public void info()  
    {  
        System.out.println("Apple的info方法");  
    }  
}  
public class DeprecatedTest  
{  
    public static void main(String[] args)   
    {  
        //下面使用info方法时将会被编译器警告   
        new Apple().info();  
    }     
}  
 
class Apple
{
//定义info方法已过时
@Deprecated
public void info()
{
System.out.println("Apple的info方法");
}
}
public class DeprecatedTest
{
public static void main(String[] args) 
{
//下面使用info方法时将会被编译器警告
new Apple().info();
}
}
 
 
 
在eclipse中标注此注解的方法会被删除线标记出来,以引起编程人员的注意。
 
抑制编译器警告:@SuppressWarnings
@SuppressWarnings指示被Annotation标识的程序元素(以及在该程序元素中的所有子元素)取消显示指定的编译器警告。@SuppressWarnings会一直作用于该程序元素的所有子元素,例如使用@SuppressWarnings标识的一个类来取消显示某个编译器警告,同时又标识该类里某个方法取消显示另一个编译器警告,那么在此方法中同时取消显示这两个编译器警告。
 
通常情况下如果程序中使用没有泛型限制的集合将会引起编译器警告,为了避免这种编译器警告,可以使用@SuppressWarnings这个注解,下面程序取消了没有使用泛型的编译器警告。
 
 
[java] 
@SuppressWarnings(value="unchecked")  
public class SuppressWarningsTest  
{  
    public static void main(String[] args)   
    {   www.zzzyk.com
        List<String> myList = new ArrayList();          
    }     
}  
 
@SuppressWarnings(value="unchecked")
public class SuppressWarningsTest
{
public static void main(String[] args) 
{
List<String> myList = new ArrayList();
}
}
 
 
 
正如程序中所看到的,当我们使用此注解来关闭编译器警告时,一定需要在括号里使用name=value对来为该注解成员变量设置值。
 
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,