1.注解的分类
注解是给程序看的,但看到这个注解时就应该解析他了。
注解的分类:
1.预定义注解
预定义注解就是JDK自带的一些注解,该注解被jvm解析
例如:
1.@override:重写注解符合重写的规则
2.@Deprecated:表示已经过时
3.@SuppressWarnings:表示压制警告 一般不使用
4.@FuntionInterface:表示函数式接口,表示该接口中有且只有有一个方法
2.自定义注解
3.源注释
定义在注解上的注解称为元注解。
2.预定义注解
package com.lzl.text05;
/**
* @create 2022-07-14
*/
public class Text06 {
public static void main(String[] args) {
Info info = new Info();
//表示该方法已过时
info.fun();
}
}
//函数式接口 有且仅有一个抽象方法
@FunctionalInterface
interface USB{
public void show();
default void fun(){
};
}
class Info{
@Override //重写的注解:特点 该方法必须与父类中的方法名相同,参数相同,返回类型相同,修饰符不能小于父类方法的修饰符,抛出的异常不能大于父类的
public String toString(){
return super.toString();
}
@Deprecated //表示该方法已过时
public void fun(){
}
}
3.自定义注解
语法:
public @interface 注解名{
//注解属性
}
@interface 注解名{
数据类型 属性名() default 默认值;
}
使用自定义注解:
类 方法 属性 加@注解名
实例:
package com.lzl.test06;
import java.lang.annotation.*;
/**
* @create 2022-07-14
*/
public class Test01 {
}
//表示该注解可以使用的位置
/* TYPE 表示可以作用在类 接口 枚举
* FIELD 属性上
* METHOD 普通方法上
* CONSTRUCTOR 构造方法上
* LOCAL_VARIABLE 局部变量上
* */
@Target(value = {ElementType.TYPE,ElementType.METHOD})
//表示注解在什么时候生效
/* SOURCE 源码时生效
* CLASS 字节码时生效
* RUNTIME 运行时生效 在jvm内存运行时生效 一般都会被设置为运营时有效
* */
@Retention(value = RetentionPolicy.RUNTIME)
//当生成api文件时 该注解是否存在
@Documented
//该注解是否会被子类继承
@Inherited
@interface My{
String value() ;
int age() default 15; //当为该注解设置默认值 在使用时可以不为该属性赋值
String[] hobby() default {};
}
@My(value = "15",hobby = {"吃饭","睡觉","打豆豆"})
class Student{
private String name;
//使用注解时 该注解有且只有一个属性没有赋值,而且该属性的名称为value那么再给该属性赋值时,可以省略value
@My("15")
public void fun(){
}
}
43元注释
package com.lzl.test06;
import java.lang.annotation.*;
/**
* @create 2022-07-14
*/
public class Test01 {
}
//表示该注解可以使用的位置
/* TYPE 表示可以作用在类 接口 枚举
* FIELD 属性上
* METHOD 普通方法上
* CONSTRUCTOR 构造方法上
* LOCAL_VARIABLE 局部变量上
* */
@Target(value = {ElementType.TYPE,ElementType.METHOD})
//表示注解在什么时候生效
/* SOURCE 源码时生效
* CLASS 字节码时生效
* RUNTIME 运行时生效 在jvm内存运行时生效 一般都会被设置为运营时有效
* */
@Retention(value = RetentionPolicy.RUNTIME)
//当生成api文件时 该注解是否存在
@Documented
//该注解是否会被子类继承
@Inherited
@interface My{
String value() ;
int age() default 15; //当为该注解设置默认值 在使用时可以不为该属性赋值
String[] hobby() default {};
}
@My(value = "15",hobby = {"吃饭","睡觉","打豆豆"})
class Student{
private String name;
//使用注解时 该注解有且只有一个属性没有赋值,而且该属性的名称为value那么再给该属性赋值时,可以省略value
@My("15")
public void fun(){
}
}