注解

本文介绍了Java注解的概念,包括注解的引入原因和作用,以及注解的分类。详细讲解了注解的基本语法,如成员变量、数据类型和默认值,并探讨了元注解的使用。此外,文章还阐述了注解的使用方式,并通过反射解析注解信息,包括获取注解对象的方法和定义、使用自定义注解。
摘要由CSDN通过智能技术生成

1注解的概念

1 注解的引入

为什么需要学习注解?
1.能够看懂别人写的一些代码,最后好能够看懂一写框架代码
2.注解结合反射和泛型能够将代码写的更加灵活,更加动态,更加简洁,提高了代码扩展性和可维护性
3.能够使用自定义注解解决开发中的一些问题

2注解的概述

Java提供了一种源程序中的元素和任何信息或者元数据相关联的方法或者渠道

源程序中元素: Java文件 构造方法、成员变量、成员方法…

任何信息: 就是解释说明,可以理解为注释,但是和注释又不同,注释只能够在源码中存在,程序运行的时候,不会被解释执行,注解可以作用在不仅是源码上,还可以作用在编译时期以及运行时期,特别是在运行时期, 能够通过反射获取到这些信息,根据这些信息能够动态地改变程序的逻辑,从而提高代码的扩展性和可维护性,就是一些配置数据

元数据: 就是元注解,对注解进行注解,可以理解为满足某种结构的数据 key = value

关联: 注解和元素绑定的手段

简单来说: 就是相当于一些类似于注释的信息 和 源程序中的元素 绑定的一种技术,这种技术叫做注解, 这种手段可以通过反射获取到元素对象,在获取到这个元素上面绑定的注解,通过绑定的注解获取里面配置信息, 从而达到能够在程序运行阶段通过这些信息动态地改变程序的运行逻辑

Java常见的一些注解:

@Override: 表示该注解修饰的方法必须满足重写的规则,否则编译报错,该注解由编译器提取识别

@Deprecated: 表示成员过时,编译器会在程序运行(编译时/源码是)的时候获取到成员变量,
提取类中的成员上是否存在@Deprecated这个注解,如果存在,编译器就会添加删除线

@SuppressWarnings: 表示忽略警告,我们可以通过这个注解消除黄色警告线,但是并没有去除安全隐患

@FunctionInterface: 表示当前接口是一个函数式接口
函数式接口: 当一个接口中只有一个抽象方法的时候成为函数式接口

3注解的分类:

按照运行机制分类

1源码注解: 注解只在源码有效,当编译器编译生成字节码文件的时候,该注解就不存在,其实就是和 注释一模一样

2编译时注解: 该注解在源码和编译时期有效,在JVM执行的过程中,该注解就不存在了

3运行时注解: 该注解在源码和编译时甚至运行时有效,在程序执行过程开发者还可以获取到该注解,同时获取到注解上的元数据,从而动态地改变程序的运行逻辑以及执行结果

4元注解: 对注解进行注解的注解

按照来源分类

JDK中自带的注解: @Override,@Deprecated
第三方注解: @Table,@Column,@Component,@Service,@Bean
自定义注解: 自己定义注解自己使用在自己的代码中
元注解: 对注解进行注解的注解

// 这是注解测试类
public class AnnotationDemo01 {
   
	// desc="主方法", method="main", arguments=args
	public static void main(String[] args) {
   
	}
}

class Fu {
   
	@SuppressWarnings("unused")
	public void method() {
   
//		@SuppressWarnings("unused")
		int a;
	}
}

@Deprecated
class Zi extends Fu{
   
	@Override
	@Deprecated
	public void method() {
   
		super.method();
	}
}

@FunctionalInterface
interface Inter{
   
	void show();
//	void method();
}

2注解的基本语法

1注解语法

1.注解是由@interface来修饰

2.注解也是有成员的,但是这里的成员类似于成员方法,但是又要理解为成员变量
注意: 这里的成员本质是属性,可以理解为成员变量,成员变量不能够抛出异常,也不能有参数

3.成员可以是常量,也可以有变量

4.注解成员的数据类型
only primitive type, String, Class, annotation,
enumeration are permitted or 1-dimensional arrays thereof
八大基本类型 String Class 注解 枚举 一维数组

5.注解的默认值格式: int age() default 18;

6.如果一个注解没有任何成员,表示标记注解

7.有一个默认的规范,如果一个注解只有一个成员,那么该注解的成员一般叫做value

2元注解

通过学习元注解来学习注解的语法
JDK中非常重要的四个元注解:
@Target: 该元注解所标识的注解能够作用在什么元素(元素的参考范围可以参考 ElementType枚举类)
@Retention: 该元注解所标识的注解的生命周期 (生命周期参考范围参考RetentionPolicy枚举类)
@Inherited: 该元注解所标识的注解可以被继承

public class AnnotationDemo02 {
   

}

@interface Table {
   
	String name() default "隔壁老王";
	int age() default 18;
	
	final int num = 100;
//	List<String> list();
	Class<String> c();
	
	Override override();
	
	ElementType type();
	
	int[] arr();
	
//	double[][] arr2();
	
}

@interface Column {
   
	String value();
}

3注解的使用

注解的使用
四种格式:

格式一: @注解名称(属性名称1=属性的值1,属性名称2=属性的值2,属性名称3=属性的值3,…,属性名称n=属性的值n)
注意: 有多少个属性就写多少个

格式二: @注解名称(属性的值1)
注意: 适用于只有一个属性的情况

格式三: @注解名称({属性的值1,属性的值2,属性的值3,…,属性的值n})
注意: 适用于属性类型是数组的情况

格式四: @注解名称
注意: 适用于是标记注解的情况

public class AnnotationDemo03 {
   
}
@MyAnnotation(name = "张三", age = 22)
class Person {
   

}
class Student extends Person{
   

	@MyAnnotation(name = "张三", age = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值