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"
}
}
以上兩種方法雖然都能實現需求,但是在實際情況中還是得看具體的情況來界定選擇。