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)

大家都在看

  • Linux进程管理

    进程管理 基本概念介绍 进程和线程 进程: 一个在内存中运行的应用程序,每一个进程都有自己独立的一块内存空间,并被分配一个ID号(PID),在Windows下可以打开任务管理器查看…

    数据库 2023年6月16日
    0112
  • 使用 yum 在 CentOS7 上安装 MySQL8

    时间:2022-07-13安装版本:MySQL-community-8.0.29 0. 删除MariaDB 在CentOS 7中默认有安装MariaDB,这个是MySQL的分支,通…

    数据库 2023年6月16日
    0102
  • 18-网络七层架构

    七层架构主要包括 ①、 物理层 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输…

    数据库 2023年6月16日
    080
  • 此计算机缺少”vc2005_spl_with_atl_fix_redist”解决问题

    1、安装loadrunner提示:此计算机缺少 vc2005_spl_with_atl_fix_redist 2、进入目录,点击vcredist_x86.exe,对组件进行安装:E…

    数据库 2023年6月14日
    0105
  • 最小堆、胜者树和败者树

    前言 本文介绍三种外部排序算法:最小堆、胜者树和败者树,以及为什么外部排序往往用败者树。 最小堆 最小堆有以下特点:1、最小堆是一颗完全二叉树2、每个父节点的值总是小于等于左右孩子…

    数据库 2023年6月9日
    097
  • 华为云操作记录——JavaWeb 环境搭建

    华为云操作记录 创建用户 新建用户 sudo adduser weirwei 添加免密 root 权限 sudo vim /etc/sudoers 添加 root 权限 sudo …

    数据库 2023年6月9日
    084
  • MySQL慢查询优化问题-解决办法

    根据发现的问题,找出原因,然后对症下药。 [En] According to the problems found, find the cause, and then prescr…

    数据库 2023年5月24日
    097
  • 一条SQL更新语句是如何执行的

    文章首发于公众号「蝉沐风」,认真写好每一篇文章,欢迎大家关注交流 这是图解MySQL的第2篇文章,这篇文章会通过 一条SQL更新语句的执行流程让大家清楚地明白: 什么是InnoDB…

    数据库 2023年5月24日
    0107
  • 初识HTML5

    HTML5的学习笔记(随便总结,个人使用) 一、认识HTML5的基本格式 1、 标记 标记位于文档的最前端,用于向浏览器说明当前文档使用的是那种HTML标准规范。只有在开头处使用 …

    数据库 2023年6月11日
    081
  • Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明

    最近一个国外的电商项目,需要对接支付功能,国内的支付一般使用微信支付、支付宝、银联等等,但国际上一般使用Paypal、Skrill、BrainTree、Stripe等,经过内部综合…

    数据库 2023年6月14日
    0108
  • leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(中等)

    一、题目大意 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节…

    数据库 2023年6月16日
    0108
  • 当mysql表从压缩表变成普通表会发生什么

    本文章做了把mysql表从压缩表过渡到普通表的实验过程,看看压缩表变成普通表会发生什么?本文针对mysql5.7和mysql8分别进行了实验。 1、什么是表压缩 在介绍压缩表变成普…

    数据库 2023年6月16日
    076
  • JUC学习笔记(七)

    1.1、读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取…

    数据库 2023年6月6日
    0105
  • SQL的多表查询

    显示内连接: select 字段列表 from 表1 [inner] join 表2 on 连接条件; (PS:方括号(“[]”)内的为可选项;) (注意:…

    数据库 2023年6月16日
    0118
  • Linux 实用命令

    实用命令: 1、查看端口占用情况 查看该端口是&…

    数据库 2023年6月16日
    078
  • 对于Java循环中的For和For-each,哪个更快

    Which is Faster For Loop or For-each in Java 对于Java循环中的For和For-each,哪个更快 通过本文,您可以了解一些集合遍历技…

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