java反射 获取变量值_Java反射:如何获取变量的名称?
如果您使用以下的调试信息进行编译:javac -g),局部变量的名称保存在.class文件中。例如,以这个简单的类为例:class TestLocalVarNames {
public String aMethod(int arg) {
String local1 = "a string";
StringBuilder local2 = new StringBuilder();
return local2.append(local1).append(arg).toString();
}}
编译后javac -g:vars TestLocalVarNames.java,局部变量的名称现在.class文件中。javap氏-l标志(“打印行号和局部变量表”)可以显示它们。
javap -l -c TestLocalVarNames显示:class TestLocalVarNames extends java.lang.Object{TestLocalVarNames();
Code:
0: aload_0 1: invokespecial #1; //Method java/lang/Object."":()V
4: return
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LTestLocalVarNames;public java.lang.String aMethod(int);
Code:
0: ldc #2; //String a string
2: astore_2 3: new #3; //class java/lang/StringBuilder
6: dup 7: invokespecial #4; //Method java/lang/StringBuilder."":()V
10: astore_3 11: aload_3 12: aload_2 13: invokevirtual #5;
//Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
16: iload_1 17: invokevirtual #6; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
20: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
23: areturn LocalVariableTable:
Start Length Slot Name Signature
0 24 0 this LTestLocalVarNames;
0 24 1 arg I 3 21 2 local1 Ljava/lang/String;
11 13 3 local2 Ljava/lang/StringBuilder;}
这个VM规范解释了我们在这里看到的:这个LocalVariableTable属性的可选变量长度属性。Code(第4.7.3节)属性。调试器可用于在方法执行期间确定给定局部变量的值。
这个LocalVariableTable在每个插槽中存储变量的名称和类型,因此可以将它们与字节码匹配。调试器可以这样做“计算表达式”。
然而,正如Erickson所说,没有办法通过正常反射访问这个表。如果你还决定这么做,我相信Java平台调试器体系结构(JPDA)会有帮助的(但我自己从来没用过)。
java反射 获取变量值_Java反射:如何获取变量的名称?相关推荐
- 通过反射将变量值转为变量名本身
通过反射将变量值转为变量名本身 这是.NET反射的一个有趣小例子: 通过反射将变量值转为变量名本身. 当然要先添加命名空间:using System.Reflection; 示例代码如下: clas ...
- java反射设置属性值_Java反射如何有效的修改final属性值详解
前言 以前写过一篇 Java 反射修改 final 属性值,本文将在这里重新温习一下Java反射如何有效的修改final属性值,下面话不多说了,来一起看看详细的介绍: 假设有个类 class Pers ...
- java 反射机制详解_java反射机制原理详解
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...
- java反射更改方法内容_Java反射
类的加载 java运行的都是类 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现这个类进行初始化. 加载 加载,是指Java虚拟机查找字节流(查找.class ...
- java反射机制详解_Java反射机制详解
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...
- java反射的编译过程_Java反射机制小结和实际操作
一.什么是反射 1.编译和运行 在了解什么是Java反射机制前,先聊聊Java的编译和运行. 还记得第一次使用记事本编写第一个Java程序的场景吗?通过命令窗口,使用javac命令编译一个.java文 ...
- java反射有什么用_java反射的作用知识点总结
Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在.灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助. 什么是Java的反射? 反射是Java的特征之一,是一种间接操作 ...
- java 反射 接口工具类_Java 反射工具类 ReflectionUtils
import lombok.extern.slf4j.Slf4j; import java.lang.reflect.*; /** * 反射的 Utils 函数集合 * 提供访问私有变量, 获取泛型类 ...
- java反射为什么消耗资源_Java反射笔记
第一:先认识Class类 类也是一种实例,类的实例创建有三种方式. 类的实例对象创建的方式有两种.以下的代码详细的介绍: packagecom.company;import java.util.*;p ...
最新文章
- 牛津-阿斯利康疫苗与出血性疾病风险轻微升高有关 |《自然-医学》论文
- 我一不小心把ubuntu里的ps这样的命令删掉了,应该怎么重装呢
- selenium教程
- Python函数式编程指南
- [2017.11.11特辑]以一个光棍节表白案例浅谈ECMAScript6模块化的使用方法
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十八:SDRAM模块① — 单字读写...
- 近 10 年新秀编程语言大 PK,Pick 它!
- 防抖与节流方案_关于图片懒加载的几种方案
- 如何让 Mac 朗读提醒信息中的文本?
- HDU 1465 不容易系列之一 (错排)
- Firefox for iOS 终于登陆中国
- 华北科技计算机组成原理,华北科技学院—《计算机组成原理》设计性实验报告.doc...
- mysql 统计七日留存率_1.七日留存率-SQL实现
- 使用DataGrip连接神通数据库
- okv5 API常见问题
- 程序员薪水最高的25家公司
- Java IO流(下)
- 高并发编程(四)高并发解决方案从前端到数据库
- 精简指令集结构(Reduced Instruction Set Computer,RISC)
- 抖音落地页跳转添加微信好友的方法
热门文章
- [java8]时间差
- Java入门系列-20-异常
- JavaScript 基础(十三):Window对象
- Using Oracle Data Integrator Open Tools
- JSON和JSONP的差别,以及用法
- 【学习笔记】HTML基础:使用html制作网页
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南19:对细粒度的安全定义自定义安全权限...
- 分布式文件系统FastDFS设计原理
- DDMS连接bluestacks找不到设备
- java printwriter 没有关闭_Java PrintWriter close()方法