`

java注解之 Override、Deprecated、Suppresswarnings、元注解等

 
阅读更多

简单Java注解

JDK5提供的简单注解类型只有3个. 这三个都是用来预防错误或者进行提醒的,分别是:

1.Override
2.Deprecated
3.Suppresswarnings

需要注意,JDK5(另一个说法,Tiger)实际上并没有许多内置注解;相反,它允许核心Java支持注解特性的能力. JSR-175中严格规定它用来定义元数据功能. 需要由程序员编写自定义的注解类型,其他JSR标准也编写了一系列标准注解类型. 下面将用实例来深入讲解这三个简单注解.

Override 注解

Override 注解指明被注解的方法需要覆写超类中的方法.

如果某个方法使用了该注解,却没有覆写超类中的方法(比如大小写写错了,或者参数错了,或者是子类自己定义的方法),编译器就会生成一个错误.

(注意: JRE5中实现接口中的方法时不能使用Override注解,JRE6允许了,很多时候JRE5会报这个错).

示例1演示了覆写注解:

Java注解示例1:

复制代码代码如下:

public class Test_Override {
 @Override
 public String toString() {
    return super.toString() + "测试使用 'Override' 注解";
 }
}

 

如果出现方法名字拼写错误会发生什么? 例如,如果你将toString方法改名为"tostring"(全小写),编译时就会得到类似下面这样的出错信息:

 

复制代码代码如下:

Compiling 1 source file to D:tempNew Folder (2)
                              TestJavaApplication1buildclasses
D:tempNew Folder (2)TestJavaApplication1srctest
   myannotationTest_Override.java:24: method does not override
                a method from its superclass
@Override
1 error
BUILD FAILED (total time: 0 seconds)

 

当然,Eclipse就会直接报红叉.现在IDE发展的很好用,初学者不应该去折腾JDK的命令行了.

Deprecated 注解

这个注解表明如果程序调用一个废弃的(Deprecated,废弃的,过时的)元素时,编译器应该显示警告信息. 示例2显示了如何使用Deprecated 注解.

Java注解示例2

首先,创建一个类,并像下面这样将某个方法标明为 废弃:

复制代码代码如下:

public class Test_Deprecated {
   @Deprecated
   public void doSomething() {
      System.out.println("测试使用 弃用 注解: 'Deprecated'");
   }
}

 

接着,尝试从另一个类调用这个方法:

 

复制代码代码如下:

public class TestAnnotations {
   public static void main(String arg[]) throws Exception {
      new TestAnnotations(); 
   }
   public TestAnnotations() {
   Test_Deprecated t2=new Test_Deprecated();
   t2.doSomething();
}

 

本例中的doSomething()方法被声明为废弃的方法. 因此,一般情况下不应该调用这个方法. 在编译Test_Deprecated.java 文件时是不会有警告消息的. 但在编译 TestAnnotations.java 时编译器就会给出类似这样的警告信息(Eclipse 会有警告):

复制代码代码如下:

Compiling 1 source file to D:tempNew Folder
(2)TestJavaApplication1buildclasses
D:tempNew Folder
(2)TestJavaApplication1srctestmyannotation
    TestAnnotations.java:27:
warning: [deprecation] doSomething() in
test.myannotation.Test_Deprecated has been deprecated
t2.doSomething();
1 warning

 

Suppresswarnings 注解

这个注解告诉编译器应该屏蔽带注解的元素和所有子元素的警告信息. 会压制一个元素集和子元素的所有警告信息. 比如,假设你在一个class上使用了Suppresswarnings 注解压住一个警告,在它的一个方法上用Suppresswarnings 注解来压制另一个警告,则两种警告都会在方法级别被压制住. 请参见示例3.

Java注解示例3:

 

复制代码代码如下:

public class TestAnnotations {
   public static void main(String arg[]) throws Exception {
      new TestAnnotations().doSomeTestNow();
   }
   @SuppressWarnings({"deprecation"})
   public void doSomeTestNow() {
      Test_Deprecated t2 = new Test_Deprecated();
      t2.doSomething();
   }
}

 

在本例中,使用 @SuppressWarnings压住了示例2中所示的deprecation警告信息. 因为该方法的这类警告被压住了,所以你不会再看到"deprecation"警告.

注意: 在最内层的元素上使用该注解是比较好的. 因此,如果你只想在一个特定的方法上压制一个警告,你应该在方法上标注,而不是在类上使用注解.

元注解(Meta-Annotations,Java注解类型)

元注解,实际上被称为注解的注解,包含四种类型. 分别是:

1.Target
2.Retention
3.Documented
4.Inherited

Target 注解

Target注解表明注解类型适用于哪种目标元素. 它包含下面的枚举类型值:

1.@Target(ElementType.TYPE)  —— 可以适用于任何类的元素
2.@Target(ElementType.FIELD)  —— 只适用于字段或属性
3.@Target(ElementType.METHOD)  —— 只适用于方法的注解
4.@Target(ElementType.PARAMETER)  —— 只适用于方法的参数
5.@Target(ElementType.CONSTRUCTOR) —— 只适用于构造函数
6.@Target(ElementType.LOCAL_VARIABLE) —— 只适用于局部变量
7.@Target(ElementType.ANNOTATION_TYPE) —— 指明声明类型本身是一个注解类型

示例4演示了Target 注解:

Java注解示例4

首先,定义了一个名为Test_Target的注解类型,带上 @Target元注解,如下所示:

复制代码代码如下:

@Target(ElementType.METHOD)
public @interface Test_Target {
   public String doTestTarget();
}

 

接下来,创建一个类,它将使用Test_Target注解:

复制代码代码如下:

public class TestAnnotations {
   public static void main(String arg[]) {
      new TestAnnotations().doTestTarget();
   }
   // 在方法上使用注解,OK.
   // 中间也可以不换行,换2行之类,Java忽略多余的换行
   @Test_Target(doTestTarget="Hello World !")
   public void doTestTarget() {
      System.out.printf("Testing Target annotation");
   }
}

 

@Target(ElementType.METHOD) 注解表明该注解类型只能被用来注解方法. 如果你编译这段代码,不会显示警告消息. 但是,如果将这个注解声明到一个字符串变量上,会发生什么呢? 就像下面这样:

 

复制代码代码如下:

public class TestAnnotations {
   // 这是错误的做法,编译不会通过,因为注解的Level不对.
   // 元注解指明了只能注解方法,就不能用来注解属性
   @Test_Target(doTestTarget="Hello World !")
   private String str;
   public static void main(String arg[]) {
      new TestAnnotations().doTestTarget();
   }
   public void doTestTarget() {
      System.out.printf("Testing Target annotation");
   }
}

 

唯一的变化就是注解声明从方法级转向字段级,这是不正确的. 因为你已经定义了注解   @Test_Target 只适用在方法级,如果你尝试编译这个类,你可能会得到这样的错误信息:

复制代码代码如下:

"TestAnnotations.java": 
D:R_AND_DTestAnnotationsrctestmyannotation
   TestAnnotations.java:16: 
annotation type not applicable to this kind of declaration at line
16, column 0
@Test_Target(doTestTarget="Hello World !")
^
Error in javac compilation

 

from:http://www.jb51.net/article/55370.htm

分享到:
评论

相关推荐

    java注解深入理解

    Java标准库提供了许多内置注解,如`@Deprecated`(表示某个API已过时)和`@ SuppressWarnings`(抑制编译器警告)。 注解的分类主要有三种: 1. **保留注解**:这些注解在编译时被处理,并且不会在字节码中保留。...

    Java 注解技术视频详解

    Java提供了三种预定义的元注解,它们分别是`@Override`、`@Deprecated`和`@ SuppressWarnings`。`@Override`用于标记重写父类方法的方法,确保编译器检查方法是否真正覆盖了父类方法;`@Deprecated`用于标记不再推荐...

    java注解大全(非常全面)

    Java标准库提供了若干内置注解,如`@Override`用于指示方法覆盖父类方法,`@Deprecated`标记已过时的方法,`@ SuppressWarnings`用于抑制编译器警告。此外,还可以自定义注解,通过`@Retention`设置保留策略(源码...

    Java注解实现方式

    Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,这些元数据可以被编译器或运行时环境用来执行各种任务,例如代码分析、验证、生成代码、部署等。注解提供了更加灵活和可扩展的方式来处理...

    java注解jar包

    Java标准库中包含了一些内置注解,如@Override、@Deprecated和@SuppressWarnings等,它们分别用于标记重写父类方法、标记过时的代码以及抑制警告信息。 注解的使用通常分为三个步骤:定义、处理和使用。定义注解...

    JAVA 注解示例 详解

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供附加信息的方式。这些信息可以用于代码分析、编译时检查或运行时处理。注解不会直接影响程序的执行,但它们能为工具和框架提供重要的...

    Java自定义注解实例

    2. **预定义注解**: Java标准库提供了若干预定义注解,如`@Override`、`@Deprecated`、`@ SuppressWarnings`等,用于标记过载、弃用和警告控制。 3. **元注解**: 元注解是用于注解其他注解的注解,如`@Retention`、...

    java通用注解API

    注解在Java中扮演着元编程的角色,允许开发者在不改变程序执行逻辑的前提下,向代码添加额外的信息,如编译检查、序列化处理、持久化、运行时动态处理等。本文将深入探讨Java注解的API及其使用。 1. **注解的基本...

    java 注解

    Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据(metadata),这些元数据不直接影响程序的执行,但可以被编译器或运行时环境用来进行各种处理,如验证、动态代理、持久化、资源管理等。...

    吴天雄-Java注解及动态性详解.doc

    Java注解,也称为Annotation,是自JDK 5.0版本起引入的一种元数据机制,它为程序提供了额外的信息,这些信息可以在编译时或运行时被解析和使用。元数据是描述数据的数据,注解就是一种特殊的数据类型,可以用于修饰...

    java注解使用例子

    Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器、JVM或者第三方工具提供信息。在Java程序中,注解可以被附加到类、接口、方法、变量等元素上,用于执行代码检查、生成代码、部署等任务。本篇...

    java 注解开发(包含详细注释,项目可以直接运行)

    - **预定义注解**:Java标准库提供了一些预定义的注解,如`@Override`、`@Deprecated`、`@ SuppressWarnings`等。 - **元注解**:用于定义注解的注解,如`@Retention`、`@Target`、`@Documented`、`@Inherited`。 ...

    java注解整理

    Java注解是Java编程语言中的一个重要特性,它们提供了一种元数据的方式,让开发者能够向编译器或运行时环境传递额外的信息。这些信息可以用来验证代码、自动生成代码、配置框架或者在运行时进行一些处理。注解的使用...

    java注解详解[文].pdf

    Java 注解详解 Java 注解(Annotation)是 JDK 5.0 及以后版本引入的一个特性。它是一个新的类型,与接口类似,位于同一个层次,称为 Java 的一个类型(TYPE)。注解可以声明在包、类、字段、方法、局部变量、方法...

    Java注解的使用例子

    其他常见的注解包括`@Deprecated`(标记过时的API)、`@ SuppressWarnings`(抑制编译警告)和`@NotNull`(指定参数或返回值不应为null)。 创建自定义注解时,你需要定义一个注解类型,它是一个接口,使用`@...

    java注解解析知识要点

    Java 注解,也称为 Annotation,是自 Java 5 引入的一种元数据,它为代码提供了额外的信息,这些信息可以用于生成文档、分析代码、执行编译时检查以及在运行时处理代码。注释不会直接影响代码的执行逻辑,但可以通过...

    Java Annotation注解技术

    6. **标准注解**:Java预定义的一些注解,如`@Override`(标记重写的方法)、`@Deprecated`(标记已废弃的API)和`@SuppressWarnings`(抑制编译警告)。 ### Annotation的工作原理 当定义了一个注解类型,开发者...

    java和ssh注解

    常见的注解如@Override、@Deprecated、@ SuppressWarnings等,它们可以帮助开发者进行类型检查、版本控制和消除警告。自定义注解可以用于更复杂的场景,如ORM框架的实体映射或AOP切面编程。 SSH框架中的注解进一步...

    关于java注解比较详细的例子

    Java标准库提供了许多预定义注解,例如`@Override`(确保方法覆盖父类方法)、`@Deprecated`(标记过时的API)、`@ SuppressWarnings`(抑制编译器警告)等。 9. **注解的应用场景** - 自动化代码生成:例如,ORM...

Global site tag (gtag.js) - Google Analytics