IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java 注解和反射总结 -> 正文阅读

[Java知识库]Java 注解和反射总结

本文整理自狂神视频【狂神说Java】注解和反射

注解

内置注解

@Override 表示一个方法声明打算重写父类中的另一个方法声明
@Deprecated 表示不鼓励程序员使用该元素,通常因为他们很危险或者存在更好的选择
@SuppressWarnings 抑制编译警告

元注解

元注解:负责注解其他注解。Java定义了4个标准的meta-annotation。
在包java.lang.annotation中
@Target 描述注解的适用范围
@Retention 描述注解的生命周期 SOURCE<CLASS<RUNTIME
@Documented 说明该注解将被包含在javadoc中
@Inherited 说明子类可以继承父类中的该注解

反射

反射(Reflection):是Java被视为动态语言的关键。反射机制允许程序在执行期借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
在这里插入图片描述
一个类在内存中只有一个Class对象
一个类被加载后,类的整个结构都会被封装在Class对象中

Class类:

  • Class类本身也是一个类
  • Class对象只能由系统建立对象
  • 一个加载的类在JVM中只会有一个Class实例
  • 一个Class对象对应的是一个加载到JVM中的一个.class文件
  • 每个类的实例都会记得自己由哪个Class实例所生成
  • 通过Class可以完整的得到一个类中所有被加载的结构

获得Class类的方式:

package com.example.reflection;

public class reflection {
    public static void main(String[] args) throws ClassNotFoundException {
        Person person = new Student();

        //方式一:通过对象获得
        Class c1 = person.getClass();
        System.out.println(c1.hashCode());

        //方式二:Class.forName获得
        Class c2 = Class.forName("com.example.reflection.Student");
        System.out.println(c2.hashCode());

        //方式三:通过类名.class返回
        Class c3 = Student.class;
        System.out.println(c3.hashCode());

        //方式四:基本内置类型的包装类有一个TYPE属性
        Class c4 = Integer.TYPE;

        //获得父类类型
        Class c5 = c1.getSuperclass();
        System.out.println(c5);

    }
}

class Person{
    protected String name;
}

class Student extends Person{
    public Student() {
        this.name = "学生";
    }
}

class Teacher extends Person{
    public Teacher() {
        this.name = "老师";
    }
}

在这里插入图片描述
在这里插入图片描述

反射工具使用

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅
hutool

使用hutool里反射工具进行赋值和取值

定义一个枚举,枚举的其中一个值是另一个类中的变量名。

package com.example.reflection;

import lombok.Getter;

@Getter
public enum Permission {
    EAT(0,"eat"),
    PLAY(1,"play"),
    SLEEP(2,"sleep"),
    ;
    private Integer code;
    private String msg;
    Permission(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

普通实体类:

package com.example.reflection;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PersonPermission {
    private Boolean eat;
    private Boolean play;
    private Boolean sleep;
}

测试类:

import cn.hutool.core.util.ReflectUtil;
import com.example.reflection.Permission;
import com.example.reflection.PersonPermission;

public class TestdemoApplication {
    public static void main(String[] args) throws NoSuchFieldException {
        PersonPermission personPermission = PersonPermission.builder()
                .eat(false)
                .play(false)
                .sleep(false)
                .build();
        System.out.println(personPermission);
        Permission[] values = Permission.values();
        for (Permission p:values
             ) {
            //通过反射赋值
            ReflectUtil.setFieldValue(personPermission,p.getMsg(),true);
        }
        System.out.println(personPermission);
        for (Permission p:values
        ) {
            //通过反射取值
            Boolean res = (Boolean)ReflectUtil.getFieldValue(personPermission,p.getMsg());
            System.out.println(p.getMsg() + " " + res);
        }
    }
}

输出如下:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:53:51  更:2021-12-07 11:54:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:08:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码