注解与注释?
注解不是注释!两种情形,或者说没有多大的相同之处。
注释:对代码的解释,不参与编译。
在编译源代码时,不会参与编译,注释存在于否,与最终生成的可执行文件没有影响。
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)public @interface Override
第二个标准注解:
java.lang
注释类型 Deprecated
public @interface Deprecated
一段测试“过时注解”的代码:
package com.sunzone.gao.annotations; publicclass Test02 { publicstaticvoid main(String[] args) { tc. } } @Deprecated class @Deprecated publicvoid System.out.println("hello!"); } } |
第三个标准注解:忽略或压制警告:
java.lang
注释类型 SuppressWarnings
@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
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()