注解的作用:
1,生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等
2,跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。
作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。
以后java的程序开发,最多的也将实现注解配置,具有很大用处;
3,在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。java的内置了3个基本注解,保存在java.lang中:
1,@SuppressWarnnings("deprecation")用于取消警告
2,@Deprecated标识该处已经过时。
3,@Override标识重写父类的方法或实现接口的方法
注:
注解相当于一种标记,在程序中加了注解就等于打上了某种标记
注解可以在包,类,字段,方法,方法参数及局部变量上使用。
以下是两个元注解:
//设置该注解类的生命周期为存在至运行时,这种称为元注解:
其定义的生命周期有三种值:SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)
//设置该注解使用的位置,可以设置多个位置,以数组的方式存储
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})
注解的属性:
注解中的属性相当于是某种标示。相当于一个公司的胸牌,如果有胸牌就是该公司员工,否则就不是。
注解的属性的返回值类型有:
1--8大基本数据类型:float,double,byte,short,int,long,char,boolean
2--String类型
3--Class类型
4--Annotation注解类型
5--枚举类型
6--以及以上各种类型的数组类型
注:注解中有一个比较特殊的属性value()如果只想给value属性赋值,则就给其他属性设默认值即可。
注解的定义语法:
@元注解//可以定义注解的生命周期,及注解使用的位置等。
@interface 注解名称{
//代码体
返回值类型 属性名() [default 默认值]//defualt语句是为属性设置缺省默认值,可以省略
}
注解的综合示例代码:
自定义的一个注解:
package com.itheima.annotationdemos;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* 自定义的一个注解
* @author wuyong
*
*/
@Retention(RetentionPolicy.RUNTIME)//默认值是CLASS
public @interface AnnotationUnit {
String value();
}
综合的简单示例代码:
其中的代码要用到上面的自定义注解。
package com.itheima.annotationdemos;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.management.DescriptorKey;
/**
* 注解的反射调用
* @author wuyong
* 三个基本的注解
*@SuppressWarnnings("deprecation")用于取消警告
*@Deprecated标识该处已经过时。
*@Override标识重写父类的方法或实现接口的方法
*总结:
* 1,注解相当于一种标记,在程序中加了注解就等于打上了某种标记
* 没加则等于没有任何标记。标记可以在包,类,字段,方法,方法参数及局部变量上。
*/
@AnnotationClass1(100)
public class AnnotationDemo {
/**
* @param args
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) {
//调用一个过时的方法
System.runFinalizersOnExit(true);
//判断指定类型的注解存在于此元素上,则返回 true,否则返回 false。
if (AnnotationDemo.class.isAnnotationPresent(AnnotationClass1.class)) {
//如果存在该元素的指定类型的注解,则返回对应注解,否则返回 null。
AnnotationClass1 ad = (AnnotationClass1)AnnotationDemo.class.getAnnotation(AnnotationClass1.class);
//利用获得的注解对象来进行相应的操作,比如打印出注解,及其属性。
System.out.println(ad);
System.out.println("布尔类型属性:" + ad.isBoolean());
System.out.println("char类型属性:" + ad.isChar());
System.out.println("long类型属性:" + ad.isLong());
System.out.println("Byte类型属性:" + ad.isByte());
System.out.println("Double类型属性:" + ad.isDouble());
System.out.println("Float类型属性:" + ad.isFloat());
System.out.println("Short类型属性:" + ad.isShort());
System.out.println("String类型属性:" + ad.isString());
System.out.println("Class类型属性:" + ad.isClass());
System.out.println("Array类型属性的长度:" + ad.isArray().length);
System.out.println("Annotation类型属性的value值:" + ad.isAnnotation().value());
}
}
//标识该方法为过时的
@Deprecated
public void show() {
System.out.println("被标识失效的方法");
}
//标识重写
@Override
public boolean equals(Object obj) {
return true;
}
}
/**
* 注解的定义和反射调用
* @author wuyong
*注解属性的返回值类型有:
* 1--8大基本数据类型:float,double,byte,short,int,long,char,boolean
* 2--String类型
* 3--Class类型
* 4--Annotation注解类型
* 5--枚举类型
* 6--以及以上各种类型的数组类型
*/
//设置该注解类的生命周期为存在至运行时,次种称为元注解:有三种值:SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)
//设置该注解使用的位置,可以设置多个位置,以数组的方式存储
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.PACKAGE})
@interface AnnotationClass {
/**
* 以下是注解的属性
* defualt语句是为属性设置缺省值
* @return
*/
//字符串类型
String isString() default "blue";
//int类型
int value();//该属性是最特殊的,即如果注解中只有一个value属性时,赋值时就可以省略掉’value =‘ 这一部分直接写值。
//布尔类型
boolean isBoolean() default true;
//单精度浮点型
float isFloat() default 1;
//双精度浮点类型
double isDouble() default 1.12;
//char类型
char isChar() default 'a';
//byte类型
byte isByte() default 11;
//short类型
short isShort() default 22;
//long类型
long isLong() default 1990;
//Class类型
Class isClass() default String.class;
//数组类型
int[] isArray() default {1,2,3};
//Annotation注解类型
AnnotationUnit isAnnotation() default @AnnotationUnit("red");
}
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------