Java自学-注解与反射(1)
1、什么是注解
package lesson01;
/**
* Author: Gu Jiakai
* Date: 2021/8/30 20:56
* FileName: Test01
* Description:
*/
//什么是注解
public class Test01 extends Object{
// @Override,重写的注解。
@Override
public String toString() {
return super.toString();
}
}
2、内置注解
package lesson01;
import java.util.ArrayList;
import java.util.List;
/**
* Author: Gu Jiakai
* Date: 2021/8/30 20:56
* FileName: Test01
* Description:
*/
//什么是注解
public class Test01 extends Object{
// @Override,重写的注解。
@Override
public String toString() {
return super.toString();
}
// @Deprecated 不推荐程序员使用,但是可以使用。或者存在更好的方式
@Deprecated
public static void test(){
System.out.println("Deprecated");
}
@SuppressWarnings("all")
public void test02(){
List list=new ArrayList();
}
public static void main(String[] args) {
test();
}
}
3、元注解
一个类里面只能有一个公共的方法
package lesson01;
import java.lang.annotation.*;
/**
* Author: Gu Jiakai
* Date: 2021/8/30 21:08
* FileName: Test02
* Description:
*/
//测试元注解
@MyAnnotation
public class Test02 {
public void test(){
}
}
//定义一个注解。
//@Target 表示我们的注解可以用在哪些地方
@Target({ElementType.METHOD,ElementType.TYPE})
//Retention 表示我们的注解在什么地方还有效
//runtime>class>source
@Retention(value= RetentionPolicy.RUNTIME)
//Documented表示是否将我们的注解生成在JAVAdoc 中
@Documented
//@Inherited子类可以继承父类的注解
@Inherited
@interface MyAnnotation{
}
4、自定义注解
package lesson01;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Author: Gu Jiakai
* Date: 2021/8/30 21:19
* FileName: Test03
* Description:
*/
//自定义注解
public class Test03 {
//注解可以显示赋值,如果没有默认值,我们就必须给注解赋值。
@MyAnnotation2(age=18)
public void test(){
}
@MyAnnotation3("*")
public void test2(){
}
}
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2{
//注解的参数:参数类型+参数名();
String name() default "";
int age();
int id() default -1;//如果默认值为-1,代表不存在﹒
String[] schools() default {"南京晓庄学院","清华大学"};
}
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3{
//只有一个值,注解处可省略书写value。
String value();
}