
对于局部变量是不可能的,因为变量名不是程序运行的必要部分,变量名在编译的时候就去除了。
对于成员变量,可以参见[1],使用FieldsgetName() 获取
在编译Java的时候加上-g选项可以保留变量名,但这只用于调试。关键看你怎么用这个“变量名”了如果你的情况和[2]一样,不妨编程的时候换个思路。
[1]>
反射:在运行状态下,通过class文件对象,去使用构造方法,成员变量,成员方法
方法有三种:
1类名class
2对象getclass()
3classforName("包名类名")
好处:
只要有一个类或者一个类的对象,就可以得到这个类或对象的所有属性和方法,包括私有的
同步方法
反射成员方法:
1获取字节码文件
Class c = ClassforName("包名类名");
2反射方法
Method m = cgetMethod("反射的方法",方法的参数类型class);
3用方法,minvoke(对象,参数) 对象,cnewInstance ,在A建立对象。
minvoke(cnewInstance(),参数);
类加载器与反射有什么关系
反射是通过字节码文件对象,将类的字段,方法,构造器等映射成相应的类,并进行各自的 *** 作;
类加载器是通过某个类的classLoader()方法,将该类的class文件从硬盘中加载到java虚拟机中,形成字节码文件;
class b {
private String aa = "hello";
private String bb = "world";
private String cc = "xxx!";
}
public class a {
public static void main(String[] args) throws ClassNotFoundException,
IllegalArgumentException, IllegalAccessException,
InstantiationException {
Class c = ClassforName("b");
Field[] fs = cgetDeclaredFields();
Map map = new HashMap();
for (int i = 0; i < fslength; i++) {
Field f = fs[i];
fsetAccessible(true);
mapput(fgetName(), fget(cnewInstance()));
}
Systemoutprintln(map);
}
}
结果:
以上就是关于java中怎样获取变量名(主函数中定义的);全部的内容,包括:java中怎样获取变量名(主函数中定义的);、java 怎么获得变量名(不用反射机制)、反射是什么反射获取字节码文件的三种方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)