Java之反射机制(获取Class对象的三种方式)

2023-10-30

Java之反射机制(获取Class对象的三种方式)

开发工具与关键技术:MyEclipse 10,java
作者:刘东标
撰写时间:2019-06-14

如何得到各个字节码对应的实例对象?
每个类被加载后,系统会为该类生成对应的 Class对象,通过 Class 对象可以访问到 JVM 中 的这个类,

3种方式:

1、调用某个类的class 属性获取 Class 对象,如 Date.class 会返回 Date 类对应的 Class 对象(其实就是得到一个类的一份字节码文件); 2、 使用Class 类的forName(String className)静态方法,className 表示全限定名;如 Person的全限定名:java.lang.Person; 3、调用某个对象的 getClass()方法。该方法属于 Object 类; Class<?>clz=new Date().getClass();**

   package com.ldb.po;

/**
 * 
 * JAVA反射机制是在运行状态中,对于任意一个类 (class文件),都能够知道这个类的所有属性和方法;
 * 对于任意一个对象,都能够调用它的任意一个方法和属性; 
 * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
 * 
 * 
 * 动态获取类中信息,就是java反射 。 可以理解为对类的解剖。
 * 
 * 
 * 要想要对字节码文件进行解剖,必须要有字节码文件对象. 
 * 如何获取字节码文件对象呢?
 * 
 * @author LDB
 * 
 */
public class ReflectDemo {

	public static void main(String[] args) throws ClassNotFoundException {

		getClassObject_3();

	}

	/* 三:使用forName()方法 
	 * 方式三: 只要通过给定的类的 字符串名称就可以获取该类,更为扩展。 可是用Class类中的方法完成。 该方法就是forName.
	 * 这种方式只要有名称即可,更为方便,扩展性更强。
	 */

	public static void getClassObject_3() throws ClassNotFoundException {

		String className = "com.ldb.po.Person";

		Class<?> clazz = Class.forName(className);

		System.out.println(clazz);
	}

	/*
	 * 二:调用属性 
	 * 方式二: 2,任何数据类型都具备一个静态的属性.class来获取其对应的Class对象。 相对简单,但是还是要明确用到类中的静态成员。
	 * 还是不够扩展。
	 */
	public static void getClassObject_2() {

		Class<?> clazz = Person.class;

		Class<?> clazz1 = Person.class;
		System.out.println(clazz == clazz1);//true都是Person类的字节码 
	}

	/* 一:利用对象调用Object的getClass方法
	 * 方式一:获取字节码对象的方式: 1,Object类中的getClass()方法的。 想要用这种方式,必须要明确具体的类,并创建对象。 麻烦 .
	 */
	public static void getClassObject_1() {

		Person p = new Person();
		Class<?> clazz = p.getClass();

		Person p1 = new Person();
		Class<?> clazz1 = p1.getClass();

		System.out.println(clazz == clazz1);
	}
}

总结:获取Class 对象最常用的是利用属性的方法!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java之反射机制(获取Class对象的三种方式) 的相关文章

  • Spring控制器是线程安全的吗

    我遇到了这个控制器示例 想知道它是否是线程安全的 我特别想知道 gson 实例变量 import org springframework stereotype Controller import org springframework we
  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • Apache Commons CLI:替代已弃用的 OptionBuilder?

    IntelliJ 显示此示例代码中不推荐使用 OptionBuilderhttp commons apache org proper commons cli usage html http commons apache org proper
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序

随机推荐

  • opencv 学习代码整理

    1 load image import cv2 import numpy as npfrom matplotlib import pyplot as plt img cv2 imread watch jpg cv2 IMREAD GRAYS
  • three.js实现vr全景图(vue)

    方法 可以利用Threejs中的立方体或者球体实现全景图功能 把立方体或球体当成天空盒子 将无缝衔接的图片贴上 看起来就像在一个场景中 相机一般放置在中央 three js中文网 1 立方体实现 立方体6个面要贴上6个方向的图片 这6个图片
  • 【前端八股文】vue系列:vue的优点和特点、生命周期、ref、$nextTick

    文章目录 vue的优点和特点 双向数据绑定 虚拟DOM 组件化 生命周期 十个阶段 相关功能 题外话 数据请求在created和mouted的区别 ref nextTick 参考 本系列目录 前端八股文 目录总结 是以 代码随想录 八股文为
  • cut、tee、split、xargs、bc命令

    http sss721 blog 163 com blog static 10170119200992811123802 一 cut命令 cut 主要的用途在于将一行里面的数据进行分解 最常使用在分析一些数据或文字数据的时候 这是因为有时候
  • public、private、protected、internal的区别

    public private protected internal和protected internal都是C 中的访问控制修饰符 用于修饰类或者成员的可访问性级别 public 表示同一程序集中的任何其他代码或者引用该程序集中的其它程序集
  • WiFi station模式:wpa_supplicant 工具 wpa_cli 使用

    首先需要启动wpa supplicant 指定wlan0的路径 wpa supplicant d Dnl80211 iwlan0 c etc config wifi wpa supplicant conf 搜索附近网络功能 no ok wp
  • 怎么在edge浏览器下载扩展(插件)

    1 点击浏览器右上角的三个点 找到扩展点进去 2 如果安装过插件 此刻右上角的扩展按钮会弹出安装好的插件信息 如下图 点击 打开Microsoft Edge 加载项 进入微软edge扩展商店 3 没有安装过插件的 会跳到管理扩展界面 如下图
  • 并行程序模拟(ACM/ICPC World Finals 1991)

    附上题目连接 concurrency simulator 本题为紫书数据结构基础篇第一道例题 是一道考察双端队列的模拟题 由于使用了STL 题目的难度和编程量大大降了下来 不过本菜鸟还是花了三个半小时才拿下了这道题 30msAC 可想见代码
  • 创建第一个quick工程

    参考博客 QML入门教程 1 Qt Quick与QML介绍 令狐掌门的博客 CSDN博客 qml教程 控件布局似乎是在main qml中进行实现的 所以在main qml中加入以下代码 import QtQuick 2 15 import
  • 深入理解Solidity——Assert, Require, Revert 和 Exceptions

    Assert Require Revert 和 Exceptions Solidity使用state reverting异常来处理错误 这种异常将回滚当前调用 及其所有子调用 状态的所有变化 并将错误标志给调用者 函数assert和requ
  • QImage的save函数保存的bmp图像无法打开

    最近在VS2010中用QT写一个小的程序 现在出现了一个问题实在不知道怎么解决 用save功能可以得到一个 bmp文件 但是不能读取这个图片的内容 而且每次截图图片的大小都是150K不变 整个调试过程都没有报错 相关代码如下 以上内容设置了
  • Java如何使用JDOM解析XML呢?

    转自 Java如何使用JDOM解析XML呢 下文笔者讲述使用JDOM解析XML的方法分享 如下所示 JDOM简介 JDOM是一个开源项目 它基于树形结构 使用Java代码对XML文档实现解析 生成 序列化及多种操作 JDOM与DOM非常类似
  • 微星主板 新版bios 开启虚拟化

    微星主板新版bios的虚拟化位置比较特别 进入bios开启高级模式 如图cpu configurationn SVM Mode就是虚拟化
  • 基于Jenkins的自动构建系统开发

    1 绪论 1 1 课题的研究背景 随着IT行业的不断发展 软件开发的复杂度也随着不断提高 与此同时 软件的开发团队也越来越庞大 而如何更好地协同整个团队进行高效准确的工作 从而确保软件开发的质量已经慢慢成为了开发过程中不可回避的问题 在软件
  • 中标麒麟离线搭建SVN服务器教程

    中标麒麟离线搭建SVN服务器教程 一 下载相应的包 subversion 1 8 18 tar gz 下载地址 http subversion apache org sqlite autoconf 3190300 tar gz 下载地址 h
  • Python 赋值和copy的区别

    Python 赋值和copy的区别 1 定义 1 1 直接赋值 对象名的引用 相当于起了一个别名 赋值不改变变量的内存地址 仅是对象的简单引用 a和b指向同一片内存区域 改变其中一个 另外一个也会改变 1 2 拷贝copy 划分新的存储地址
  • 【机器学习】Yellowbrick 包的理解和说明

    文章目录 一 介绍 二 Visualizers 2 1 Classification Visualization 2 2 Clustering Visualization 2 3 Feature Visualization 2 4 Mode
  • node.js连接mysql出现错误: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requ

    node js连接mysql出现错误 ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol requested by server consid
  • 数据系统架构-8.任务调度系统

    任务调度系统 序 在有了各种数据统计任务之后 就产生了任务调度需求 我们需要把任务管理起来统一调度 保证任务之间上下游的依赖关系 监控任务运行状态 异常情况下及时告警 尽可能自动化处理异常 调度系统高可用 使每天的数据统计任务按时执行完成
  • Java之反射机制(获取Class对象的三种方式)

    Java之反射机制 获取Class对象的三种方式 开发工具与关键技术 MyEclipse 10 java 作者 刘东标 撰写时间 2019 06 14 如何得到各个字节码对应的实例对象 每个类被加载后 系统会为该类生成对应的 Class对象