呼唤远方

如果您使用以下的调试信息进行编译: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规范解释了我们在这里看到的:第4.7.9条LocalVariableTable属性:这个LocalVariableTable属性的可选变量长度属性。Code(第4.7.3节)属性。调试器可用于在方法执行期间确定给定局部变量的值。这个LocalVariableTable在每个插槽中存储变量的名称和类型,因此可以将它们与字节码匹配。调试器可以这样做“计算表达式”。然而,正如Erickson所说,没有办法通过正常反射访问这个表。如果你还决定这么做,我相信Java平台调试器体系结构(JPDA)会有帮助的(但我自己从来没用过)。

java反射 获取局部变量_Java反射:如何获取变量的名称?相关推荐

  1. java反射 获取方法_java反射之获取类的信息方法(推荐)

    本文接上文"老生常谈反射之class类的使用(必看篇)",以编写一个用来获取类的信息(成员函数.成员变量.构造函数)的工具类来讲解"反射之获取类的信息" 1.获 ...

  2. java 获取方法_Java 反射理解(三)-- Java获取方法信息

    Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...

  3. java反射机制知识_Java反射机制讲解,程序员必须掌握的知识点

    关注程序员7歌,一起用技术改变世界 大家好,我是程序员7歌,今天我为大家讲解Java的反射机制. 首先我们来看看反射的概念: Java反射说的就是在程序运行中,任何一个类,我们都可以知道这个类的方法和 ...

  4. java反射随意值_Java反射总结

    能够分析类能力的程序称为反射.对于给定的Java类名,可以通过反射获取类的信息.将类的各成分映射出相应的Java类. Class类 在程序运行期间,Java运行时系统始终对所有的对象维护一个被称为运行 ...

  5. java反射源码_java反射技术详解附源码

    在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...

  6. java 反射类成员_java 反射(二)类成员

    在Java反射的包中定义一个接口java.lang.reflect.Member,它有三个实现类java.lang.reflect.Field, java.lang.reflect.Method, a ...

  7. java反射用法示例_Java反射示例教程

    java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...

  8. java 反射 set方法_java 反射调用set方法

    Java语言中的许多库类名称,多与咖啡有关.下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助. java 反射调用set方法: import java.beans.Property ...

  9. java反射的原理_java反射机制的实现原理

    java反射机制的实现原理 反射机制: 所谓的反射机制就是java语言在运行时拥有一项自观的能力. 通过这种能力可以彻底的了解自身的情况为下一步的动作做准备. 下面具体介绍一下java的反射机制.这里 ...

最新文章

  1. python操作excel表格-Python自动化办公之操作Excel文件
  2. php中全局变量global和超全局变量$GLOBALS
  3. 30秒就能理解的JavaScript优秀代码
  4. 【bzoj4408】[Fjoi 2016]神秘数 主席树
  5. 信用经济中的经济因素
  6. Spartacus同SAP Commerce Cloud交互的示意图
  7. 背包学习————完全背包
  8. 多线程模拟渡河 C语言 Linux
  9. nodejs导出excel
  10. html图片不要角,详细解说CSS折角的制作(不用图片)
  11. 程序员,你何时离开北京
  12. 双系统安装deepin20_win10+deepin双系统安装方法(UEFI+GPT)
  13. MATLAB的疲劳检测系统
  14. 视觉Transformer综述
  15. 鸿蒙系统安装第三方,网友表示:鸿蒙最新系统可以通过连接U盘安装第三方软件了...
  16. MATH1013总结
  17. 清洗网址中的垃圾字符
  18. Docker images导出和导入
  19. 计算机工程实习报告PCB,计算机工程实习实习报告.doc
  20. 淘宝助理5.5官方版最新版

热门文章

  1. 【活动(广州)】office365的开发者训练营
  2. 这个拖后腿的“in”
  3. 微软正式发布XAML Standard与.NET Standard 2.0:现已提供下载
  4. mpvue开发小程序分享朋友圈无法自定义标题解决方法
  5. 【GIS风暴】什么是地理空间智能(Geospatial AI)?
  6. 学弟学妹们,C#为啥学不好?是因为你没真正理解面向对象的思想!
  7. SQL Server T-SQL编程:数据库用户与安全设置
  8. 利用Excel VBA批量计算气象数据多个台站多年来春季和冬季降水量和平均气温
  9. linux c之memcpy拷贝结构体到结构体、拷贝字符数组到结构体
  10. C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)