java注解

前言

如果对注解一点都不了解,强烈推荐看一下这位博主的文章,超级易懂,GO

注解

注解(Annotation)是从JDK5.0开始引用的新技术。

作用

可以将注解理解为标签,这个标签是程序的解释,对一段代码的分类,比如@override表示这段代码是重写的,@Deprecated表示这段代码是过时的,当然标签可以自己定义,按照自己的意愿对某段代码分类,方便后续操作。注解在框架中用到的特别多。

不是程序本身,可以对程序做出解释。(这一点,跟注释没什么区别)
可以被其他程序(比如编译器)读取。

使用格式

注解以“@注解名”在代码中存在,还可以添加一些参数值,例如:@SuppressWarnings(value=“unchecked”)

//  表示重写了父类的方法
	@Override
	public String toString() { //如果写了注解,那么下面的方法一定是父类的方法,否则会报错
		return "";
	} 

在哪里使用

可以附加在package,class,method,field等上面,相当与给他们额外添加了辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

自定义注解

注解有内置注解,也可以自定义注解。
在自定义注解的时候要用元注解进行注解,所谓元注解,就是对注解进行注解的注解,元注解有下面四种:

  • @Target : 能注解的范围—取值范围 ElementType = PACKAGE(包),TYPE(类等),CONSTRUCTOR(构造器),FIELD(描述域),METHOD(方法),LOCAL_VARIABLE(局部变量)
  • @Retention :保留到什么时候—取值范围 SOURCE(持续到源文件),CLASS(持续到class文件),RUNTIME(持续到运行时,可以被反射机制读取)
  • @Documented :
  • @Inherited

自定义注解的格式如下:
@interface + 注解名

@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)//元注解
public @interface MyAnnotition {  //注解的格式   @interface + 注解名
	String studentName() default "";   //注解的参数  注意不是方法,是变量  default表示默认值
	int age() default -1;
}

使用自定义注解:

 //注解括号内给参数赋值,没有默认值的必须赋值  如果只有一个参数,可以省略掉参数名和等于号
	@MyAnnotition(studentName = "聪明的王二狗",age = 21) 
	public void test() {
		
	}

使用反射解析注解

反射下一篇写

如果只是单单给某个方法或者类注解,那么注解是没什么用的。注解的一个特点是可以被其他程序读取(区别于注释),因此可以用于向数据库中存数据时给类做注解。

在这里插入图片描述
注解类的注解:

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface table {
	String value(); // 修饰的类跟哪个表对应
}

注解类内属性的注解:

@Target(value = ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Field {
	//类每个属性对应的列名
	String columnName();
	String type();
	int length();
}

要存进数据库里的类

@table("tb_student")
public class student {
	
	@Field(columnName = "id",type = "int",length = 10)
	private int id;
	@Field(columnName = "sname",type = "varchar",length = 10)
	private String name;
	@Field(columnName = "age",type = "int",length = 3)
	private int age;

}

用来解析类的注解的程序:

public class testAnnotation {
	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("TestAnnotation.student");
			//获得类的所有注解
			Annotation[] annotations = clazz.getAnnotations();
			for(Annotation a : annotations) {
				System.out.println(a);
			}
			//获得指定注解的值
			table table = (TestAnnotation.table) clazz.getAnnotation(table.class);
			System.out.println(table.value());
			//获得属性的值
			java.lang.reflect.Field field = clazz.getDeclaredField("name");
			Field f = field.getAnnotation(Field.class);
			System.out.println(f.columnName() + "," + f.type() + "," + f.length());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值