java注解

来源:互联网 发布:java封装类例子 编辑:程序博客网 时间:2024/06/04 08:06

注解与注释?

注解不是注释!两种情形,或者说没有多大的相同之处。

注释:对代码的解释,不参与编译。

在编译源代码时,不会参与编译,注释存在于否,与最终生成的可执行文件没有影响。

 

c语言中只支持一种类型的注释,就是“段落注释”或“多行注释”:

/*

 注释内容行1

注释内容行2

*/

有一些要求,就是注释内容中不能再包含多行注释。

 

在C++中支持两种类型的注释:

多行注释与C中相同

另增加了一个“单行注释”,将注释内容写在代码的右边;

int number = 10; //定义一个整型变量,并且赋值为10

与C中的注释相比,单行注释更加通用,因为比较灵活。

 

在Java和C#中,它们都支持三种类型的注释;

除了C++中提供的两类外,又增加了一种“文档注释”,其作用是用来生成注释所在对象的帮助文档。

/**
 * @author xuxiaomei1
 */

以上说到的三种注释,其主要作用是用来对代码进行解释,对于生成的最终可执行代码不会产生任何影响。

 

注解:

5.0版本新增加的功能。

用到的注解功能有关的对象都在java.lang.annotation包中。

注解与反射功能息息相关。

 

与注释不同的是,注解会对代码的各个阶段产生不同的影响。或者影响程序的编译,或者影响程序的最终结果。

注解会对Java程序的哪几个阶段产生影响?

三个阶段:

1、    以.java为后缀的源代码文件,注解会对这个阶段产生影响;

源代码级别的注解:SOURCE

2、    用javac.exe命令对源文件进行编译,会生成.class文件,注解会对这个阶段产生影响;

字节码级别的注解:CLASS

3、    用java.exe命令对字节码文件(class文件)进行解释(在jvm上运行),生成最终结果。注解会对这个阶段产生影响。

虚拟机级别的注解:RUNTIME

将注解功能抽象为一种称为“注解”的对象,可以建立这样的对象。

标准类库提供的标准注解:

@Override      只用来对方法进行注解,解决编译时的问题。

@Deprecated    对类,对方法都能进行注解,解决类或方法过时的问题

@SuppressWarnings  解决对于警告的忽略问题,压制各种各样的警告。

标准注解1:

java.lang
注释类型 Override

@Target(value=METHOD)

@Retention(value=SOURCE)

public @interface Override

第二个标准注解:

java.lang
注释类型 Deprecated

@Documented

@Retention(value=RUNTIME)

public @interface Deprecated

 一段测试“过时注解”的代码:

 

package com.sunzone.gao.annotations;

publicclass Test02 {

       publicstaticvoid main(String[] args) {

              TestClass tc =new TestClass();

              tc.test();

       }

}

@Deprecated

classTestClass {

       @Deprecated

       publicvoidtest() {

              System.out.println("hello!");

       }

}

第三个标准注解:忽略或压制警告:

java.lang
注释类型 SuppressWarnings

@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})

@Retention(value=SOURCE)

public @interface SuppressWarnings

如何得到一个对象的注解?

当自定义一个注解,而本身没有设置@Target注解时,则支持所有对象类型。

设计一个综合注解的测试类:

@MyAnnotation

package com.sunzone.gao.annotations;

class TestAnnotationClass {

   @MyAnnotation

   private int va;

 

   @MyAnnotation

   private static int counter;

 

   @MyAnnotation

   public TestAnnotationClass() {

   }

 

   @MyAnnotation

   public TestAnnotationClass(int va) {

      this.va = va;

   }

 

   @MyAnnotation

   public float test(@MyAnnotation int x, @MyAnnotation float y) {

      return x + y;

   }

}

查看以上的测试类TestAnnotationClass,共有若干类元数据对象被同一个注解进行处理,分别是:

1、    实例字段对象

2、    静态实例字段对象

3、    类对象

4、    构造器对象

5、    方法对象

6、    方法中的参数对象

 

注解对象中的成员 有哪些?

注解中没有方法!

只有字段成员,它的设置是通过方法的样式进行的。

方法参数中的注解,因为参数Parmater对象是属于方法Method对象的,所以要用到Method类中的一个方法:

getParamaterAnnotations()

 


0 0