java获取变量名
‘壹’ java中怎样获取变量名(主函数中定义的);
对于局部变量是不可能的,因为变量名不是程序运行的必要部分,变量名在编译的时候就去除了。
对于成员变量,可以参见[1],使用Fields.getName() 获取
在编译Java的时候加上-g选项可以保留变量名,但这只用于调试。关键看你怎么用这个“变量名”了.如果你的情况和[2]一样,不妨编程的时候换个思路。
[1]http://java.sun.com/javase/6/docs/api/java/lang/reflect/Field.html
[2]http://www.velocityreviews.com/forums/t131824-get-variables-name-on-runtime.html
‘贰’ .....java中, 如何输出变量名
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//声明一个列表存放10个随机数
List list =new ArrayList();
Random rnd = new Random();
for(int i=0;i<10;i++){ //指定要写入列表10次
while(list.size() == i){ //如果列表的元素数不等于写入的次数,继续循环
int j = rnd.nextInt(10);
if(!list.contains(j)){ //如果列表里已经有重复的数,继续循环
list.add(j);
}
}
}
Integer[] value = (Integer[]) list.toArray(new Integer[10]); //将list转换成Integer[10]
for(int k=0;k<10;k++){ //这里的实现和上面的方法是一样的
for(int l=0;l<10;l++){
if(value[l] == k){
System.out.println("第" +l+ "个数组的是" + k);
}
}
}
}
}
希望能帮到你
‘叁’ 如何在Java中获取环境变量的值
1、用System.getenv();获取当前系统环境的变量名,如下:
publicclass Test {
publicstaticvoid main(String[] args) {
Map<String, String> map = System.getenv();
for(Iterator<String> itr = map.ketSet().iterator();itr.hasNext();){
String key = itr.next();
System.out.println(key + "=" + map.get(key));
}
}
}
系统环境变量名如下:
01.USERPROFILE :用户目录
02.USERDNSDOMAIN :用户域
03.PATHEXT :可执行后缀
04.JAVA_HOME :Java安装目录
05.TEMP :用户临时文件目录
06.SystemDrive :系统盘符
07.ProgramFiles :默认程序目录
08.USERDOMAIN :帐户的域的名称
09.ALLUSERSPROFILE :用户公共目录
10.SESSIONNAME :Session名称
11.TMP :临时目录
12.Path :path环境变量
13.CLASSPATH :classpath环境变量
14.PROCESSOR_ARCHITECTURE :处理器体系结构
15.OS :操作系统类型
16.PROCESSOR_LEVEL :处理级别
17.COMPUTERNAME :计算机名
18.Windir :系统安装目录
19.SystemRoot :系统启动目录
20.USERNAME :用户名
21.ComSpec :命令行解释器可执行程序的准确路径
22.APPDATA :应用程序数据目录
2、用System.getProperties(); 获取当前的系统属性,如下:
publicclass Test {
publicstaticvoid main(String[] args) {
Properties props = System.getProperties();
props.list(System.out);
}
}
系统属性名如下:
01.java.version Java :运行时环境版本
02.java.vendor Java :运行时环境供应商
03.java.vendor.url :Java供应商的 URL
04.java.home :Java安装目录
05.java.vm.specification.version: Java虚拟机规范版本
06.java.vm.specification.vendor :Java虚拟机规范供应商
07.java.vm.specification.name :Java虚拟机规范名称
08.java.vm.version :Java虚拟机实现版本
09.java.vm.vendor :Java虚拟机实现供应商
10.java.vm.name :Java虚拟机实现名称
11.java.specification.version :Java运行时环境规范版本
12.java.specification.vendor :Java运行时环境规范供应商
13.java.specification.name :Java运行时环境规范名称
14.java.class.version :Java类格式版本号
15.java.class.path :Java类路径
16.java.library.path :加载库时搜索的路径列表
17.java.io.tmpdir :默认的临时文件路径
18.java.compiler :要使用的 JIT编译器的名称
19.java.ext.dirs :一个或多个扩展目录的路径
20.os.name :操作系统的名称
21.os.arch :操作系统的架构
22.os.version :操作系统的版本
23.file.separator :文件分隔符
24.path.separator :路径分隔符
25.line.separator :行分隔符
26.user.name :用户的账户名称
27.user.home :用户的主目录
28.user.dir :用户的当前工作目录
‘肆’ 如何利用java反射顺序的从一个java类中得到其中定义的成员变量名或者方法
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 获得和属性对应的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// 获得和属性对应的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
// 调用原对象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}
‘伍’ java 怎么获得变量名(不用反射机制)
这个估计用反射也做不到…
int
name,然后getName(name)是将name的值传给了getName函数,没有传引用。
可以反查,getName(5)又name=5,所以得到“name”;但是如果int
name=5;
int
version=5;那么getName(5)就不唯一了。
所以你的设想实现不了。
有一种实现机制是:
name作为属性有getter和setter,在getter中触发事件广播送出变量名称,这样外界就可以得到这个名字。
目前Java还不支持这种机制:
int
name
{
getter:
function()
{
broadcast
("name");
return
value;}
setter:
function(newval)
{value
=
newval;}
};
要想实现,需要改造
虚拟机
,用JNI写Native方法实现,或者用Java写模拟器模拟也可以。
‘陆’ java 如何获得局部变量名
Java中获得变量名可以通过类实例化,形如:ClassTest cl = new ClassTest();cl.l;来获得局部变量名为l的变量。
局部变量一般是在for循环语句中使用,在代码片段执行完之后,变量便会被回收,失去引用。
‘柒’ java 如何获取变量的名称
"i" 是字符
int i = 0;是整形变量
你可以定String i="";
‘捌’ java 怎么获得变量名(不用反射机制)
这个估计用反射也做不到…
int name,然后getName(name)是将name的值传给了getName函数,没有传引用。
可以反查,getName(5)又name=5,所以得到“name”;但是如果int name=5; int version=5;那么getName(5)就不唯一了。
所以你的设想实现不了。
有一种实现机制是:
name作为属性有getter和setter,在getter中触发事件广播送出变量名称,这样外界就可以得到这个名字。
目前Java还不支持这种机制:
int name {
getter: function() {broadcast("name"); return value;}
setter: function(newval) {value = newval;}
};
要想实现,需要改造虚拟机,用JNI写Native方法实现,或者用Java写模拟器模拟也可以。
‘玖’ Java中怎样获取变量名称的字符串形式
双层for循环啊第一层是你查出来的length,第二层是你要每一行输出多少个字符然后在println换行就行了,
就像当于
你第二行给的i<4
的话就是
****
****
****
****
有多少就会这样出现
‘拾’ java 中怎么获得以该字符串命名的变量
实现以上场景,在java中有多种方法,最直接方式的是通过反射获取,但是反射有较大的性能损耗,一般不建议用在运行阶段反射,大多开源框架是在初始化的时候通过反射来实例化。
1、通过反射获取
packagetest;
importjava.lang.reflect.Field;
publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{
Stringop="strA";
Testt=newTest();
///通过类的字节码得到该类中声明的所有属性,无论私有或公有
Fieldstrs=Test.class.getDeclaredField(op);
//设置访问权限(这点对于有过android开发经验的可以说很熟悉)
strs.setAccessible(true);
//得到私有的变量值
String[]as=(String[])strs.get(t);
System.out.println(as.length);
}
}
classTest{
privateString[]strA=newString[]{"a","b","c"};
privateString[]strB=newString[]{"d","e","f"};
}
2、通过map设置获取
packagetest;
importjava.util.HashMap;
importjava.util.Map;
publicclassDemo2{
publicstaticvoidmain(String[]args),IllegalAccessException,NoSuchFieldException,SecurityException{
Map<String,String[]>map=newHashMap<String,String[]>();
map.put("strA",newString[]{"a","str","c"});
map.put("strB",newString[]{"d","e","f"});
Stringop="strB";
Stringresult=map.get(op)[0];//"d"
}
}
以上两种方法虽然都能实现需求,但是在实际情况中还是得看具体的情况来界定选择。