JAVASE-注解

1.注解又称注释,annotation,是一种引用数据类型,编译生成class文件。

2.语法格式:[修饰符列表] @interface 注解类型名 {}

3使用方式: @注解类型名,

4.使用地方:出现在类、方法、变量和注解上等

5.jdk中,主要内置了哪些注解?

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

public enum RetentionPolicy {SOURCE, CLASS,RUNTIME}

public enum ElementType {
TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE, PACKAGE
}

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}

标识性注解:给编译器做参考,编译器看到方法上有注解时编译器会自动检查该方法,是否重写了父类的方法。只在编译阶段起作用和运行期无关。

"Target标注"注解类型的注解。

Retention标注"被标注的注解"保存在哪里,RententionPolicy. SOURCE保留在Java源文件中,CLASS保留在class文件中,RUNTIME保留在class文件中前可被反射调用。

Retention标注元素已过时,在运行时会出现警告。

修饰注解的注解叫元注解

给注解中定义属性必须赋值指定属性的值,当属性中只有一个value时候可以省略value。

        @MyAnnotation(value="hehe")

        String value() default "123"

注解当中的属性类型,有byte,short,int,long,float,double,char,String及枚举类型及其数组。

6.@Id这个注解只能出现在类上面,当这个类上有这个注解的时候,要求这个类中必须有一个int类型的id属性。如果没有这个属性就报异常。如果有这个属性则正常执行!

package annotation;

package date;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		//获取类
		//User.class.getName();//获取类名,之前下边一直报错,我还以为完整类名有错,原来是没有加“”
		try {
			Class userClass = Class.forName("annotation.User");
			//判断类上存在Id注解
			if(userClass.isAnnotationPresent(Id.class)){
				//判断存在int类型地id属性
				//获取类的属性
				Field[] fields = userClass.getDeclaredFields();
				boolean isOk = false;
				for(Field field : fields){
					if("id".equals(field.getName())&&"int".equals(field.getType().getSimpleName()))
						isOk = true;
					//表示合法
					break;
				}
				System.out.println(isOk);
			}else{
				throw new IsNotIdException();
			}
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch(IsNotIdException e){
			e.printStackTrace();
		}
	}
	
}

@Target(ElementType.TYPE)//表示这个类只能出现在类上面
@Retention(RetentionPolicy.RUNTIME)//该注解可以被反射机制读取到
@interface Id {

}

//@Id
class User {
	//int id;
	String name;
	String password;
}

class IsNotIdException extends RuntimeException {
	public IsNotIdException(){}
	public IsNotIdException(String s){
		super(s);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值