黑马训练营--注解(一)

注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在某个时刻方便的使用这些数据。

注解的语法非常简单,除了@符合的使用之外,它基本和java语法一致。java1.5中内置了三种注解

1 @Override 表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。

public class Annotations{
	
	@Override
	public String toString(String str){
			return Annotations.class.getName();
		}
	public static void main(String[] args){
		 System.out.println(new Annotations());
		}
}


因为你使用了@Override注解标志toString()方法是覆盖超类的方法,可是方法签名不一致,所以编译时就会报错。把toString()方法签名一致就不会报错了。

2 @SuppressWarnings  指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告

public class Annotations{
	
	@Override
	public String toString(){
			return Annotations.class.getName();
		}
	public static void main(String[] args){
		 System.out.println(new Annotations());
		 System.runFinalizersOnExit(true);
		}
}

编译时会说明使用或覆盖了已过时的API,可是有时候我们不想让它显示这些信息,这时就用到这个注解了。

public class Annotations{
	
	@Override
	public String toString(){
			return Annotations.class.getName();
		}
	@SuppressWarnings("deprecation")
	public static void main(String[] args){
		 System.out.println(new Annotations());
		 System.runFinalizersOnExit(true);
		}
}

3 @Deprecated   用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。

public class Annotations{
	
	@Override
	public String toString(){
			return Annotations.class.getName();
		}
		
	@SuppressWarnings("deprecation")
	public static void main(String[] args){
		 System.out.println(new Annotations());
		 System.runFinalizersOnExit(true);
		}
		
	@Deprecated
	public void printClassName(){}
}

class Demo extends Annotations{
		public void printClassName(){
				System.out.println(Annotations.class.getName());
			}
	}

Demo继承Annotations,重写了printClassName()方法,可是该方法是废弃的。所以在编译时就会打印出提示信息。

注解的基本语法

注解的使用方式几乎与修饰符的使用一样。

定义注解的例子如下:

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

public @interface Test{}

注解的定义就像接口一样,只不过是在interface的前面加了@符号,而且注解也会编译成class文件。定义注解时,也会用到元注解。如@Target和@Retention.@Target用于定义注解将要用到什么地方。@Retention用于定义该注解在哪一个级别可用。在源代码,类文件或者是运行时。

没有注解元素的注解被称为标记注解。例如上面的@Test

下面定义一个元素的注解,如下:

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase{
	public int id();
	public String description() default "no description";
}

注意:id和description类似方法的定义。description有一个默认值,如果在注解某个方法时,没有给出description的值,在该注解的处理器就会使用此元素的值。

public class PasswordUtils{
	@UseCase(id=11,description="test1")
	public void test1(){}
	
	@UseCase(id=12,description="test2")
	public void test2(){}
	
	//description的值用默认的值
	@UseCase(id=12)
	public void test3(){}
}

注解的元素在使用时表现为名---值对的形式,并需要置于@UseCase声明之后的括号内。
注解相当于一种标记,在程序中加了注解等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射类了解你的类及各种元素上的有何种标记,看你有什么标记,就干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值