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/611105/

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

(0)

大家都在看

  • Nginx 代理超时

    Nginx代理超时 内部测试并未出现问题 但是再客户那边出现了 BUG System.InvalidOperationException: Response Content-Len…

    数据库 2023年6月11日
    072
  • 开机由网络改为硬盘启动centos、windows都可用

    一台许久不开机的电脑开机后如图一直重试。 百度到原因是:系统的开机启动无意中由硬盘改成了网络,现在重新改回硬盘启动就好。 解决方法如下: 1、进入bios,各个厂家不同,有f2的、…

    数据库 2023年6月11日
    0185
  • docker的相关命令

    docker的相关命令 1.安装docker: (1)yum -y install docker ​ sudo sh get-docker.sh 2.从远程拉取应用的镜像源: do…

    数据库 2023年6月16日
    080
  • 简述JS正则RegExp对象

    RegExp对象 正则表达式是描述字符模式的对象。 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。 参考教材:w3cschool | JavaScri…

    数据库 2023年6月11日
    092
  • idea热部署

    idea热部署 一、修改 pom.xml 文件 修改配置文件 二、打开自动build: File -> Settings -> Build,Exe… -&g…

    数据库 2023年6月16日
    099
  • Html转换PDF(Java实用版)

    前言: 在工作当中,遇到了需要把HTML页面转化为PDF文档,有很多中实现,如下进行一个对比,大家个借鉴去进行使用 各实现对比表 于Windows平台进行测试: 此博客仅基于ITe…

    数据库 2023年6月16日
    0116
  • Github上传代码慢

    设置git全局代理 查看代理 git config –global http.proxy git config –global https.proxy 如果你想让clone命令…

    数据库 2023年6月14日
    082
  • 第十七章 AOP编程

    1.AOP概念 AOP(Aspect Oriented Programing) 面向切面编程 = Spring动态代理开发 以切面为基本单位的程序开发,通过切面间的相互协同,相互调…

    数据库 2023年6月14日
    0100
  • 力扣数据库题目182查找重复的电子邮箱

    力扣数据库题目182查找重复的电子邮箱 题目 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 示例: +—-+——&#82…

    数据库 2023年6月9日
    086
  • Cannot execute statement in a READ ONLY transaction.

    报错如下: Cause: java.sql.SQLException: Cannot execute statement in a READ ONLY transaction. ;…

    数据库 2023年6月11日
    095
  • 看看 Singleflight

    在看前辈的代码时,发现了一个缓存放穿透的处理,好奇就点进去看了,发现代码意外的少,于是就研究起来,为数不多我能看明白的源码T-T 源码地址:https://cs.opensourc…

    数据库 2023年6月9日
    0124
  • Oracle培训-介绍与体系架构

    1979年,公司推出Oracle 2,这是计算机软件史上第一个由纯软件公司开发的商用关系型数据库管理系统。公司改名为”关系软件公司” (Relational…

    数据库 2023年6月11日
    0107
  • MySQL特性:MRR,Multi-Range Read,多范围读

    孔个个MRR在5.6版本开始支持,相关文章不少。但是读起来层次感差了一些,在这里我用自己的理解重新整理了一版。这里参考了很多在网络上能找到的资料,才使我更全面的理解MRR,但时间有…

    数据库 2023年6月16日
    061
  • pm2 常用命令

    写一篇文章帮助自己记忆整理一下pm2的常用命令 先说一些废话 之前学习 Nodejs项目的时候使用了 pm2作为生产环境的进程管理工具,最近服务器崩了需要重启一些服务,发现有些命令…

    数据库 2023年6月11日
    0129
  • null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create ta…

    数据库 2023年6月6日
    0101
  • 2021年想做的最后挣扎

    一年的时间转眼间就过完,感觉没变,又感觉跟一年前的今天变化还是蛮多的,树立个小目标争取年前完成把 读书一本书看一篇文章: 《百年孤独》:我总感觉虽然是只单身狗是孤单的,理解不了孤独…

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