栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习总结之注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习总结之注解

注解概述

1.定义
注解(Annotation),或者叫做注释类型。
注解Annotation是一种引用数据类型,编译生成xxx.class文件

2.如何自定义注解?

语法格式:
[修饰符列表] @interface 注解类型名{ }

3.注解如何使用?用在什么地方?
(1)注解使用时的语法格式:
  @注解类型名

(2)注解可以出现在类上、属性上、方法上、变量上等…
注解还可以出现在注解类型上

4.JDK的内置注解
(1)@Override
  该注解只能注解方法,这个注解是个编译器参考的,和运行阶段没有关系。凡是java中的方法带有这个注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器会报错。

(2)@Deprecated
  用于表示所修饰的元素(类, 方法,构造器等等)已过时。通常是因为所修饰的结构危险或存在更好的选择,过时是可以用的,意义只是作为一种提示,因为原来的项目中用的老的代码必须要能用,过时是给我们后面做开发的提示

(3)@SuppressWarnings
   抑制编译器警告,警告信息在eclipse中更明显一些

5.元注解
(1)元注解是用来标注“注解类型”的“注解”,成为元注解

(2)常见的元注解:Target、Retention
①Target(ElementType.METHOD):表示“被标注的注解”只能出现在方法上
②Retention注解:这个注解用来标注“被标注的注解”最终保存在哪里

6.如果一个注解当中有属性,那么必须给属性赋值,如果一个注解的名字是value的话,在使用时该属性名可以省略,如果是两个就不能省略了。

7.注解当中的属性可以是哪种类型?
byte、short、long、int、float、double、boolean、char、String、Class、枚举类型;
属性的类型可以是以上每一种类型以及它们的数组形式

8.如果数组中只有一个元素,大括号可以省略

9.通过反射机制获取注解中的value
利用反射获取注解内容步骤:

1.先利用反射获取Class对象

2.使用Class.getAnnotations()获取类上的所有注解内容(如果只想获取注解的值,可以使用Class.getAnnotation(XXX.class)获取特定的注解,然后在获取的注解内容使用.value()即可以获取注解的value值)

3.使用Class.getDeclaredField(“XX”)获取Class对象的特定内容的field对象,然后使用field.getAnnotation(XXX.class),获取到注解的内容

代码示例:
@Tablemi("mi")
class Student2 {
    @Fieldmi(name = "id", type = "int", length = 10)
    private int id;
    @Fieldmi(name = "age", type = "int", length = 3)
    private int age;
    @Fieldmi(name = "name", type = "varchar", length = 5)
    private String name;
 
    public Student2() {
    }
 
    public Student2(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }
 
}//并提供get和set方法
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Tablemi{
    String value();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Fieldmi{
    String name();
    String type();
    int length();
}
测试代码:
Class c1 = Class.forName("com.mi.demo01.Student2");
//通过反射获取注解
Annotation[] annotations = c1.getAnnotations();
for (Annotation annotation : annotations) {
    System.out.println(annotation);
}
//获的注解的value值
Tablemi tablemi = (Tablemi)c1.getAnnotation(Tablemi.class);
String value = tablemi.value();
System.out.println(value);
 
//获得类指定的注解
Field field = c1.getDeclaredField("id");
Fieldmi fieldmi = field.getAnnotation(Fieldmi.class);
System.out.println(fieldmi.name());
System.out.println(fieldmi.type());
System.out.println(fieldmi.length());
 
//获得类指定的注解
Field field1 = c1.getDeclaredField("name");
Fieldmi fieldmi1 = field1.getAnnotation(Fieldmi.class);
System.out.println(fieldmi1.name());
System.out.println(fieldmi1.type());
System.out.println(fieldmi1.length());
 
//获得类指定的注解
Field field2 = c1.getDeclaredField("age");
Fieldmi fieldmi2 = field2.getAnnotation(Fieldmi.class);
System.out.println(fieldmi2.name());
System.out.println(fieldmi2.type());
System.out.println(fieldmi2.length());
注解在开发中的作用

注解在程序中等同于一种标记

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/349288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号