注解
Annotation(注释 注解)
注释
单行注释 //
多行注释 /* */
文档注释 /** */
注解
1.注解的写法
@XXX [(一些信息)]
2.注解放置在哪里
类的上面 属性上面 方法上面 构造方法上面 参数前面
3.注解的作用
1.用来充当注释的作用(仅仅是一个文字的说明) @Deprecated
2.用来做代码的检测(验证) @Override
*3.可以携带一些信息(内容) 文件.properties .xml 注解
4.Java中有一些人家写好的注解供我们使用
@Deprecated 用来说明方法是废弃的
@Override 用来做代码检测 检测此方法是否是一个重写
@SuppressWarnings(信息) String[] {""} 如果数组内的元素只有一个长度 可以省略{}
unused 变量定义后未被使用
serial 类实现了序列化接口 不添加序列化ID号
rawtypes 集合没有定义泛型
deprecation 方法以废弃
*unchecked 出现了泛型的问题 可以不检测
all 包含了以上所有(不推荐)
5.注解中可以携带信息 可以不携带
信息不能随意写 信息的类型只能是如下的类型
1.基本数据类型
2.String类型
3.枚举类型enum
4.注解类型@
5.数组类型[] 数组的内部需要是如上的四种类型
6.如何自己描述一个注解类型
1.通过@interface 定义一个新的注解类型
2.发现写法与接口非常相似(可以利用接口的特点来记忆注解)
可以描述public static final的属性 比较少见
可以描述public abstract的方法 方法要求返回值必须有 返回值类型是如上那些
3.我们自己定义的注解如果想要拿来使用
光定义还不够 还需要做很多细致的说明(需要利用Java提供好的注解来说明)
元注解(也是注解 不是拿来使用的 是用来说明注解)
@Target 描述当前的这个注解可以放置在哪里写的
@Retention 描述当前的这个注解存在什么作用域中的
源代码文件--->编译--->字节码文件--->加载--->内存执行
SOURCE CLASS RUNTIME
@Inherited 描述当前这个注解是否能被子类对象继承
@Document 描述这个注解是否能被文档所记录
4.自己使用自己描述的注解
问题1. 在注解里面描述了一个方法 方法没有参数 方法是有返回值String[]
使用注解的时候 让我们传递参数
理解为 注解的方法做事 将我们传递给他的参数 搬运走了 给了别人
问题2. 使用别人写好的注解不用写方法名 我们自己定义的方法必须写名字
如果我们自己定义的注解 只有一个方法 方法名字叫value
在使用的时候就可以省略方法名
如果传递的信息是一个数组 数组内只有一个元素 可以省略{}
如果方法是两个以上 每一个方法必须写名字
如何解析注解内携带的信息(反射机制)
注解应用场景
==========================================================
Properties类的使用
java.util
继承HashTable
使用方式像是map集合 value = getProperty(key)方法
读取的信息是文件
文件的后缀名.properties
文件里面key=value
1.注解写法
@XXXX (信息)
2.注解放置在哪里写
类 方法 属性 构造 变量 参数(前面)
3.Java中定义好的注解
@Deprecated 废弃的
@Override 检测方法是否是重写
@SuppressWarnings 去掉程序中的警告(尽量不要用 尽量通过编写代码去掉警告)
unused serial rawtypes deprecation unchecked all
4.如何自己定义注解
描述一个自己的类 @interface
类的上面通过元注解来描述
@Target
@Retention
@Inherited
想要携带一些信息 自定义注解类型 添加方法
方法要求必须有返回值 返回值类型 基本 String 枚举 注解 数组
方法的作用将我们传递的信息 搬走了 交给别人
5.注解的作用
充当注释 仅仅是一个文字说明
代码检测 @Override
*携带信息
6.如何访问到注解对象
如何获取里面的信息(需要反射机制)
7.注解在开发中应用的场景