java第二册—07Java注解

                                                  Java注解

一、注解概念

JDK5及其以后JDK版本开始支持Java注解;

Java注解(Annotation)也叫作元数据,以‘@注解名’在代码中存在,它是一种在源代码中标注的特殊标记,可以标注源代码中的类、属性、方法、参数等代码,主要用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。

1、注解分类

Java注解按照是否含有参数分为三种:

①、不带参数,语法结构为:@Annotation

②、带一个参数的注解,语法结构为@Annotation(参数)

③、带多个参数的注解,语法结构为@Annotiation(参数1, 参数2, 参数3...)

二、内置注解

@Override被用于标注方法,用于说明所标注的方法是重写父类的方法:

为了支持@Override,需要将项目工程升级为1.6或其以上版本;如果升级后Java代码没问题,但是工程报错,可以通过如下操作解决:右键项目“Properties”——>“Project Facets”——>右边java项选择相应的版本就OK了。

@Deprecated注解

@Deprecated 用于说明所标注元素(成员变量或方法)因存在安全问题或有更好选择而不鼓励程序员使用,如果强行使用,则编译器会发出警告。


@SuppressWarnings注解

@SuppressWarnings用于取消编译器所显示的警告,该注解常用属性值如下: 
deprecation:使用已被@Deprecated标注的程序元素;

unused:程序含有未被使用的元素;

serial:在可序列化的类上缺少serialVersionUID定义;

三、自定义注解

注解语法结构:

[public] @interface 注解名 {
	[属性1;]
	[属性2;]
	...
	[属性n;]
}

属性语法结构:

数据类型 属性名() [default 默认属性值];

注意:
注解属性默认没有默认值,如果注解中定义了无默认值的注解属性,则使用该注解时必须指定值:

如果注解属性名为value,使用该注解时可以直接赋值:

如果注解属性的数据类型为数组类型,赋多个值时必须使用{}括起来;但若只赋一个值,则无需使用{}:

四、元注解

1、元注解——@Target

Java提供了四个用于修饰自定义注解的元注解:@Target、@Retention 、@Documented和@Inherited
@Target:用于指定被修饰的自定义注解只能用于修饰程序中哪些元素,该元注解有如下属性值:

①、ElementType.ANNOTATION_TYPE:应用于其他注解的元注解

②、ElementType.CONSTRUCTOR:应用于构造函数

③、ElementType.FIELD:应用于全局属性

④、ElementType.LOCAL_VARIABLE:应用于方法中的本地变量

⑤、ElementType.METHOD:应用于方法

⑥、ElementType.PACKAGE:应用于包

⑦、ElementType.PARAMETER:应用于方法的参数

⑧、ElementType.TYPE:应用于类、接口或者枚举声明

2、元注解——@Retention

@Retention:用于指定被修饰的自定义注解可以保留多久,该元注解有如下属性值:

①RetentionPolicy.SOURCE:编译器将直接丢弃被修饰的注解。

②、RetentionPolicy.CLASS:默认值,编译器将把注解记录在class文件中,当运行Java程序时,虚拟机不再保留注解;

③、RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行java程序时,虚拟机保留注解,程序可以通过反射获取该注解;
 

代码1:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Override {

	String info();
}

代码2:
public class Student {

	@Override(info = "重写toString()")
	public String toString() {
		return super.toString();
	}
}

代码3:
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class Test {

	public static void main(String[] args) throws Exception{
		//获取Student类中toString方法对象
		Method method = Student.class.getMethod("toString");
		//利用反射机制获取toString方法的所有注解
		Annotation [] annotations = method.getAnnotations();
		//遍历每个注解对象
		for (Annotation annotation : annotations) {
			if (annotation instanceof Override) {
				Override override = (Override)annotation;
				System.out.println(override.info());
			}
		}
	}
}

3、元注解——@Documented

@Documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中,如下例:

代码1:
import java.lang.annotation.Documented;

@Documented
public @interface Override {

	String info();
}

代码2:
public class Student {

	@Override(info="重写了toString()")
	public String toString() {
		return super.toString();
	}
}

Eclipse中进行如下操作:

1、选中java工程鼠标右键点击“Export…”,出现下图:
 

2、在上图红框处输入javadocà点击“Next >”按钮,出现下图:

点击“Finish”按钮打开项目根目录打开名为doc的文件夹使用浏览器软件(如Google)打开名为index.html文件点击 “Student”导航,在右侧即可找到如下内容:

说明:如果@Documented元注解没有修饰前面Override自定义注解,则生成的文档不会有如上图红框框起的部分。

4、元注解——@Inherited

@Inherited:如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承。

代码1:
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface Bean {

	String info();
}

代码2:
@Bean(info = "父类")
class Father {

}

public class Son extends Father {

}

代码3:
import java.lang.annotation.Annotation;

public class Test {

	public static void main(String[] args) {
		Annotation[] annotationArray = Son.class.getAnnotations();
		for(Annotation annotation : annotationArray){
			System.out.println(annotation.toString());
		}
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值