2022-8-10 JAVA的反射机制

反射机制

AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制在框架设计中极为广泛,需要深入理解。

反射基础

RTTI(Run-Time Type Identification)运行时类型识别,其作用是在运行时识别一个对象的类型和类的信息。

反射就是把java类中的各种成分映射成一个个的Java对象

例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。

反射的使用

TIP
基于此我们如何通过反射获取Class类对象以及类中的成员变量、方法、构造方法等

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

输出的结果

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

注解和反射

 *  注解:Annotation,Java标注,JDK5引入的一种机制。
 *  Java中类,方法,变量,参数,包都可以被标注
 *
 *  元注解:专门给注解加的注解

我们发现注解中可以有方法,

 *  1、定义方法的格式:String name();
 *  2、可以有默认值,也可以没有,如果没有默认值在使用的时候必须填写对应的值
 *      如果需要有默认值,使用default指定默认值。
 *  3、如果想在使用的时候不指定具体的名字,
 *
 *  如果不学习反射,注解没啥用!!!

在java的整个的注解体系中,有3个非常重要的主干类,

 *  1、Annotation 接口,定义一些常用的方法
 *  2、ElementType 枚举
 *      它用来指定注解的类型。说人话,我的注解要用在哪里???
 *  3、RetentionPolicy 枚举
 *      它用来指定注解的策略。不同类型的策略指定的注解的作用域不同。
 *     (1)SOURCE,注解仅存在于编译器处理期间,编译期处理完之后,这个注解就没用了
 *     (2)CLASS,注解在.class文件中依然有效。
 *     (3)RUNTIME,编译期是不起作用的,只有在运行期才由JVM读取。

Java自带的注解

10个。4个注解java.lang.annotation
6个注解在java.lang

作用在代码上的注解

  • 1、@Override,检查该方法是否是重写方法。如果返现其父类,或者是引用的接口中没有该方法,会报错
  • 2、@Deprecated,标记的方法,过时的方法。
  • 3、@SuppressWarnings编辑器去忽略警告
  • 4、@SafeVarargs,JDK7支持忽略任何使用参数为泛型变量的方法或构造器产生的警告
  • 5、@FunctionalInterface,JDK8开始支持,表示一个接口为函数式接口
  • 6、@Repeatable,JDK8开始支持,标识某个注解可以在同一个声明上使用多次
    all:忽略所有警告
    boxing:忽略装箱、拆箱警告
    rawtypes:使用生成时没有指定数据类型
    unchecked:忽略没有进行类型检查操作的警告
    unused:忽略没有使用的警告

元注解:

  • 1、@Retention:标识这个注解作用域
  • 2、@Documented:标记这个注解是否包含在用户文档中
  • 3、@Target:这个注解可以修饰哪些信息
  • 4、@Inherited:如果一个类用上了@Inherited注解,那么其子类也会继承这个注解

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制
package com.jsoft.morning;

@Bean
public class Dog {

public String type;
private String name;
private String color;

public Dog() {

}

private Dog(String name){
    this.name = name;
}

public Dog(String name, String color) {
    this.name = name;
    this.color = color;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getName() {
    return name;
}

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

public String getColor() {
    return color;
}

public void setColor(String color) {
    this.color = color;
}
@MyAnnotation(value = 20,age=10)
public void show(String str) {
    System.out.println("show方法..." + str);
}
public String info() {

    return "info方法";
}
private void fun() {
    System.out.println("私有的fun方法...");
}

}

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

2022-8-10  JAVA的反射机制

Original: https://www.cnblogs.com/ychptz/p/16574275.html
Author: 阿萨德菩提子
Title: 2022-8-10 JAVA的反射机制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609078/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Libgdx游戏开发(1)——环境配置及demo运行

    原文: Libgdx游戏学习(1)——环境配置及demo运行 – Stars-One的杂货小窝 Libgdx游戏是基于Java的一款游戏引擎,可以发布Android,桌…

    Java 2023年6月14日
    092
  • .net 基础服务开源战略规划备忘录

    公司现状 技术反馈渠道限制: 公司业务线暂不多,基础服务的应用面尚属狭窄;基础服务和镜像各种环境的适应性和性能不足以及时凸显暴露出来,框架bug和问题使用反馈周期太长,不足以快速跟…

    Java 2023年6月8日
    070
  • 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第10版)

    第10版更新震撼发布,效率性能大提升,功能更加强大,速度过来围观,这次版本更新如下:1、新增数据库连接池并可以手动配置,提升数据库连接的使用效率。2、新增多线程并发处理并可以手动配…

    Java 2023年6月9日
    087
  • Java基础常见知识&面试题总结(上)

    Java基础常见知识&面试题总结(上) 1. 基础概念与常识 1.1 Java 语言有哪些特点? 简单易学; 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机…

    Java 2023年6月9日
    088
  • java实现红黑树

    好久没更新了 今天发个有点技术含量的 java实现红黑树代码 下面是代码 由于我才疏学浅 和自己对于特别复杂的问题的讲解能力问题 可能不能特别清晰明了的为大家讲解清晰 后面会抽时间…

    Java 2023年6月5日
    052
  • 毕业就在小公司躺了3年,面试大厂发现,发现不会分布式没人要…

    之前写了一篇秒杀系统的文章,最后给自己埋了分布式事务的坑,然后很多读者就要求我去写分布式事务,那作为程序员届的暖男,我一向是有求必应的,就算是不睡觉我都要写给你们看的! 因为分布式…

    Java 2023年6月9日
    086
  • netty 的线程模型

    boss group 和 worker group boss group 中,一个线程,一个 selector,监听一个端口 worker group 中,一个线程,一个 sele…

    Java 2023年5月30日
    085
  • 基于OpenResty部署nginx以及nginx+lua开发hello world课程笔记整理

    中华石杉的亿级流量电商详情页系统实战(第二版):缓存架构+高可用服务架构+微服务架构的课程笔记 用到的软件资源我们这里玩儿nginx,全都会在nginx里去写lua脚本,因为我们需…

    Java 2023年5月30日
    076
  • Kubernetes-Pod

    1. 简介 Pod 是可以在 Kubernetes 中创建和管理的、 最小的可部署的计算单元。 Pod 是一组(一个或多个) 容器; 这些容器 共享存储、网络、以及怎样运行这些容器…

    Java 2023年6月7日
    068
  • java Builder模式

    Builder 模式也叫建造者模式,builder模式的作用将一个复杂对象的构建与他的表示分离,一步一步创建一个复杂对象的创建型模式。在不知道内部建造细节的情况下,可以更精细的控制…

    Java 2023年6月16日
    088
  • Elasticsearch7.X 安装(CentOS7)

    需要Java环境最低1.8起步 Elasticsearch时隔三年出来了8.0版本,最低需要JDK17 一、 获取Elasticsearch7.x安装包 获取链接 Elastics…

    Java 2023年6月15日
    093
  • Fizz网关入门教程-路由初体验

    概念 路由就是定义网关如何处理请求,分反向代理、服务发现、服务编排三种类型。 配置 路由的定义可通过网关管理后台完成: 下面分别介绍反向代理和服务发现路由的配置,设网关部署为 1….

    Java 2023年6月9日
    073
  • 如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?

    自从HTML5出来以后,使用WebSocket通信就变得火热起来,基于WebSocket开发的手机APP和手机游戏也越来越多。我的一些开发APP的朋友,开始使用WebSocket通…

    Java 2023年5月30日
    091
  • @Configuration(proxyBeanMethods = true)

    @Configuration(proxyBeanMethods = true) @Configuration写在类上,表示该类是个配置类。 springboot2中新加入的参数 p…

    Java 2023年6月8日
    070
  • Vulnhub-CTF5靶机实战

    前言 靶机下载地址:CTF5靶机下载地址 KALI地址:192.168.10.73靶机地址:192.168.10.116 一.信息收集 1.主机发现 使用命令如下 netdisco…

    Java 2023年6月13日
    077
  • Nginx转发地址解决跨域问题

    什么是跨域问题 在一个服务器A里放置了json文件,另一个服务器B想向A发送ajax请求,获取此文件,会发生错误。 Chrome提示: XMLHttpRequest cannot …

    Java 2023年5月30日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球