黑马训练营--注解(一)
2013-10-25 16:58
267 查看
注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在某个时刻方便的使用这些数据。
注解的语法非常简单,除了@符合的使用之外,它基本和java语法一致。java1.5中内置了三种注解
1 @Override 表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。
因为你使用了@Override注解标志toString()方法是覆盖超类的方法,可是方法签名不一致,所以编译时就会报错。把toString()方法签名一致就不会报错了。
2 @SuppressWarnings 指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告
编译时会说明使用或覆盖了已过时的API,可是有时候我们不想让它显示这些信息,这时就用到这个注解了。
3 @Deprecated 用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。
Demo继承Annotations,重写了printClassName()方法,可是该方法是废弃的。所以在编译时就会打印出提示信息。
定义注解的例子如下:
注解的定义就像接口一样,只不过是在interface的前面加了@符号,而且注解也会编译成class文件。定义注解时,也会用到元注解。如@Target和@Retention.@Target用于定义注解将要用到什么地方。@Retention用于定义该注解在哪一个级别可用。在源代码,类文件或者是运行时。
没有注解元素的注解被称为标记注解。例如上面的@Test
下面定义一个元素的注解,如下:
注意:id和description类似方法的定义。description有一个默认值,如果在注解某个方法时,没有给出description的值,在该注解的处理器就会使用此元素的值。
注解的元素在使用时表现为名---值对的形式,并需要置于@UseCase声明之后的括号内。
注解相当于一种标记,在程序中加了注解等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射类了解你的类及各种元素上的有何种标记,看你有什么标记,就干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
注解的语法非常简单,除了@符合的使用之外,它基本和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编译器,开发工具和其他程序可以用反射类了解你的类及各种元素上的有何种标记,看你有什么标记,就干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
相关文章推荐
- 黑马训练营 -----------------注解
- 黑马训练营--注解(二)
- 黑马训练营 ---------------- 交通灯
- 黑马训练营--泛型(一)
- 【黑马训练营】IOS C语言函数
- csdn黑马训练营的学习路线图
- 黑马训练营自学笔记(04)
- 黑马训练营-学习笔记----网络编程
- 黑马训练营--IOS学习------C语言基础1
- 黑马训练营--IOS基础学习总结--C语言总结5
- 黑马训练营_线程的两种定义方法
- 黑马训练营------------Map集合
- 黑马训练营 ----------- List集合
- 黑马训练营--枚举类型(二)
- 黑马训练营--交通灯管理系统
- Java面向对象——黑马训练营
- 黑马训练营自学笔记(05)
- 黑马训练营-学习日记----银行业务调度系统
- 黑马训练营----------------- Class类
- 黑马训练营_单例设计模式