系统内建Annotation

本章目标
了解Annotation的作用
掌握系统内建的三个Annotation

Annotation
J2SE 5.0提供了很多新的特性。其中的一个很重要的特性,就是对元数据(Metadata)的支持。在J2SE5.0中,这种元数据称为注释(Annotation)。通过使用注释, 程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。
Annotation可以用来修饰类、属性、方法,而且Annotation不影响程序运行,无论是否使用Annotation代码都可以使用正常的执行。

 

Annotation接口
java.lang.annotation.Annotation是Annotation的接口,只要是Annotation都必须实现此接口,此接口定义如下:

public interface Annotation {
	public Class<? extends Annotation> annotationType();
	//返回此 annotation 的注释类型
	public boolean equals(Object obj);
	public int hashCode();
	String toString();
}

 

系统内建的Annotation
在JDK 1.5之后,系统中已经建立了如下的三个内建的Annotation类型,用户直接使用即可。
——@Override:覆写的Annotation
——@Deprecated:不赞成使用的Annotation
——@SuppressWarnings:压制安全警告的Annotation

三种内定的Annotation

 

@Override
@Override主要是在方法覆写的时候使用,用于保证方法覆写的正确性。下面先来看一下此注释的基本使用。

 

观察@Override注释的作用

class Person{//定义 Person 类
	public String getInfo(){//定义 getInfo() 方法
		return "这是一个 Person 类。";//返回信息
	}
}
class Student extends Person{//子类继承父类
	@Override//此处明确地指出方法覆写操作
	public String getInfo(){//覆写父类的方法
		return "这是一个 Student 类";
	}
}
public class OverrideAnnotationDemo01 {
	public static void main(String[] args) {
		Person per = new Student();//通过子类实例化父类对象
		System.out.println(per.getInfo());//输出信息
	}
/* 结果:
 * 这是一个 Student 类
 * */
}

 

错误的覆写

class Person{//定义 Person 类
	public String getInfo(){//定义 getInfo() 方法
		return "这是一个 Person 类。";//返回信息
	}
}
class Student extends Person{//子类继承父类
	@Override//此处明确地指出方法覆写操作
	public String getinfo(){//此处将方法名称写错
		return "这是一个 Student 类";
	}
}
public class OverrideAnnotationErrDemo01 {
	public static void main(String[] args) {
		Person per = new Student();//通过子类实例化父类对象
		System.out.println(per.getInfo());//输出信息
	}
/* 结果:
 * 这是一个 Person 类。
 * */
}

 

@Deprecated
@Deprecated注释的主要功能,是用来声明一个不建议使用的方法。如果在程序中使用了此方法的话,则在编译时将出现警告信息。

 

使用@Deprecated声明一个不建议使用的方法

class Demo{//定义 Demo 类
	@Deprecated//声明不建议使用的操作
	public String getInfo(){//此方法不建议用户使用
		return "这是一个 Person 类。";//返回信息
	}
}
public class DeprecatedAnnotationDemo01 {
	public static void main(String[] args) {
		Demo d = new Demo();//实例化 Demo 对象
		System.out.println(d.getInfo());//编译时,将出现警告信息
	}
/* 结果:
 * 这是一个 Person 类。
 * */
}

 

在类声明中使用@Deprecated注释

@Deprecated//定义不建议的操作
class Demo{//此类不建议用户使用
	public String getInfo(){//取得信息
		return "这是一个 Person 类。";//返回信息
	}
}
public class DeprecatedAnnotationDemo02 {
	public static void main(String[] args) {
		Demo d = new Demo();//编译时,将出现警告信息
		System.out.println(d.getInfo());//输出信息
	}
/* 结果:
 * 这是一个 Person 类。
 * */
}

 

@SuppressWarnings
@SuppressWarnings注释的主要功能是用来压制警告,例如,之前讲解泛型操作的时候,如果在一个类声明时没有指明泛型的话,则肯定在编译时将产生,那么此时就可以使用@SuppressWarnings压制住这种警告。

 

压制一个警告

class Demo<T>{//定义 Demo 类,使用泛型
	private T var;//定义泛型变量
	public T getVar() {//取得泛型变量的内容
		return var;
	}
	public void setVar(T var) {//设置泛型变量
		this.var = var;
	}
}
public class SupperssWarningsAnnotationDemo01 {
	@SuppressWarnings("unchecked")//压制主方法的警告信息
	public static void main(String[] args) {
		Demo d = new Demo();//编译时,将出现警告信息,但此时警告被压制
		d.setVar("chaoyi");
		System.out.println("内容:"+d.getVar());//输出
	}
/* 结果:
 * 内容:chaoyi
 * */
}

 

压制多个警告

@Deprecated    // 以下操作不建议使用
class Demo<T>{  // 定义Demo类,使用泛型
	private T var ;  // 定义泛型变量
	public T getVar() {  // 取得泛型变量的内容
		return var;
	}
	public void setVar(T var) {  // 设置泛型变量
		this.var = var;
	}
}
public class SuppressWarningsAnnotationDemo02 {
	@SuppressWarnings({ "unchecked", "deprecation" })// 此时,压制两条警告
	public static void main(String[] args) {
		Demo d = new Demo() ;  // 编译时的警告信息将被压制
		d.setVar("chaoyi") ;
		System.out.println("内容:"+d.getVar()) ;  // 输出
	}
/*结果:
 * 内容:chaoyi
 * */
} 

 

@SuppressWarnings中的关键字

 

在设置注释信息的时候,是以keyàvalue的形式出现的,所以以上的@SuppressWarnings也可以直接使用“value={"unchecked',"deprecation'}”的方式设置

 

另一种形式的@SuppressWarnings

@Deprecated    // 以下操作不建议使用
class Demo<T>{  // 定义Demo类,使用泛型
	private T var ;  // 定义泛型变量
	public T getVar() {  // 取得泛型变量的内容
		return var;
	}
	public void setVar(T var) {  // 设置泛型变量
		this.var = var;
	}
}
public class SuppressWarningsAnnotationDemo02 {
	@SuppressWarnings(value = { "unchecked", "deprecation" })// 此时,压制两条警告
	public static void main(String[] args) {
		Demo d = new Demo() ;  // 编译时的警告信息将被压制
		d.setVar("chaoyi") ;
		System.out.println("内容:"+d.getVar()) ;  // 输出
	}
/*结果:
 * 内容:chaoyi
 * */
} 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值