Java注解(内置注解,元注解,自定义注解)

文章目录

    • 一. 内置注解
    • 二.元注解
    • 三.自定义注解

注解annotation 作用:解释程序不是程序本身 ;格式:@注释名

本篇文章将从内置注解,元注解,内置注解三个斜体样式方面来作以解释

一. 内置注解

@Override @Deprecated @SuppressWarnings
定义在 java.lang.Override 中 , 此注释只适用于修辞方法 , 表示重写 定义在java.lang.Deprecated中 , 表示方法已失效或处于维护当中 定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息.
package demo1;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class demo1 {
    public static void main(String[] args) {
        int year = new Date().getYear();
        System.out.println(year);
    }

    @Deprecated
    public int test(){
        System.out.println("aaaaaaaa");
        return 1;
    }

    public String hello(){
        List list = new ArrayList<>();
        return "hello world!";
    }

    @Override//重写 继承
    public String toString(){return "Test1{}";}
}

二.元注解

  1. 元注解的作用就是负责注解其他注解 , Java定义了4个标准的meta-annotation类型,他们被用来 提供对其他annotation类型作说明 .
  2. 4个标准的meta-annotation :
    @Target : 描述注解的适用范围
    @Retention : 被他所注解的注解保留多久(范围:source class runtime)
    @Documented : 用作标识,与javadoc一块使用
    @Inherited : 类继承关系中,子类会继承父类注解中被@Inherited修饰的注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

public class demo3 {
    private int age;
    @MyAnnotation3("aaa")
    public int getAge(){
        return age;
    }
}

@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface  MyAnnotation3{
    String [] value();
}



@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@interface  MyAnnotation2{

    String name() default "";
    int age() default  0;
    int id() default -1;

    String [] schools();
}

三.自定义注解

  1. 使用 @interface自定义注解时 , 自动继承了java.lang.annotation.Annotation接口
import java.lang.annotation.*;
import java.lang.reflect.Field;

public class demo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class class1 = Class.forName("demo3.Student");

        Annotation[] annotations = class1.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation);
        }

        Field name = class1.getDeclaredField("name");
        FileldYang fileldYang=(FileldYang)name.getAnnotation(FileldYang.class);
        System.out.println(fileldYang.columnName());
        System.out.println(fileldYang.type());
        System.out.println(fileldYang.length());

    }
}
@TableYang("db_student")
class Student{
    @FileldYang(columnName = "db_id",type = "int",length = 10)
    private int id;
    @FileldYang(columnName = "db_name",type = "varchar",length = 10)
    private String name;
    @FileldYang(columnName = "db_age",type = "int",length = 3)
    private int age;

    public Student(){

    }
    public Student(int id,int age,String  name){
        this.age=age;
        this.name=name;
        this.id=id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface  TableYang{
    String value();
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface  FileldYang{
    String columnName();
    String type();
    int length();
}

你可能感兴趣的:(Java)