比如:class test{
test(){
abc s1=new abc();
}
public void main(String args[]){
test t1=new test();}
}class abc{
abc()
{如何获得实例名(s1)?}
}在abc类中,如何获得实例的名字,也就是s1?
test(){
abc s1=new abc();
}
public void main(String args[]){
test t1=new test();}
}class abc{
abc()
{如何获得实例名(s1)?}
}在abc类中,如何获得实例的名字,也就是s1?
解决方案 »
- 一个关于循环非常低级的问题
- Java如何使用物理引擎?
- html div小问题 求解
- 开发人员一般用什么linux系统开发
- 在线急等!如何读取系统的Dots Per Inch?
- 编译执行任何程序都出现Exception in thread "main" java.lang.NoClassDefFoundErrorD的错误,是不是java环境有问题啊?有的程序以前执行
- 在java中怎么把字符串输出到.txt文本文件中,并占用给定的列宽!
- 我电脑中标了,qq上不小心运行了个程序
- 一个java web和一个java应用程序怎么传递数据?
- 有关于JBUILD4在九八下面的配置问题。
- 程序编译通过,运行出来界面,但是添加数据不行
- 为什么编译JApplet类时,会生成两个 class。
若是类或对象的成员,通过反射,可以找到.如下例:import java.lang.reflect.*;public class Test{
abc s2;//这个可以找到
public Test(){
abc s1=new abc();//这个局部变量是找不到的
}
public static void main(String args[]){
Test t1=new Test();
}
}class abc{
abc()
{
Class c=Test.class;
Field[] fs=c.getDeclaredFields();
for(Field e:fs)
{
System.out.println("字段名:"+e.getName());
}
//如何获得实例名(s1)?}
}
}
程序运行结果:
字段名:s2
若是类或对象的成员,通过反射,可以找到.如下例:import java.lang.reflect.*;public class Test{
abc s2;//这个可以找到
public Test(){
abc s1=new abc();//这个局部变量是找不到的
}
public static void main(String args[]){
Test t1=new Test();
}
}class abc{
abc()
{
Class c=Test.class;
Field[] fs=c.getDeclaredFields();
for(Field e:fs)
{
System.out.println("字段名:"+e.getName());
}
//如何获得实例名(s1)?}
}
}
程序运行结果:
字段名:s2
5楼不错
s1对于abc而言根本谈不上局部变量还是什么。一个人生下来以后他可能被编入A组也可能被编入B组或两个组都有,不可能在生他的时候就知道他是A组还是B组。
一个对象不可能知道它会被哪个变量引用,Object o1 = new Object();
Object o2 = o2;
现在两个变量同时指向那个对象,在那个对象实现时如何知道谁会引用它?
s1对abc()方法可见吗?呵呵,以后注意
private abc s2;//这个可以找到
public Test(){
abc s1=new abc();//这个局部变量是找不到的
}
public static void main(String args[]){
Test t1=new Test();
}
}class abc{
abc()
{
Class c=Test.class;
Field[] fs=c.getDeclaredFields();
for(Field e:fs)
{
System.out.println("字段名:"+e.getName());
}
}
}看清楚:private abc s2;//这个是private,对类abc当然不可见程序运行结果:
字段名:s2
但是s1为什么找不到?反正是实例化abc类,不存在对abc可见不可见啊?
那就是说得不到s1是由reflect类所影响的吧?
就是说如果有一个更强的类的话,是可以在实例化局部变量s1的时候得到s1的名字的?
是的.从理论上说,如果编译程序将编译时符号表中的信息(如:所有的方法及其内部定义的局部变量名)都保留下来,主个符号表一直保留到程序运行时,且作为对象的某一方面的"信息",用指针指向它,我想:这时你的想法是可行的.只是目前编译程序没有一家是这样做的啊.(因为局部变量的名字在运行时已变成栈中的一个偏移量了(当然也有可能如:JAVA的混淆器改变了名字),似乎价值不大)
test(){
abc s1=new abc();
}
public void main(String args[]){
test t1=new test();}
}class abc{
abc()
{如何获得实例名(s1)?}
}
abc s1 = new abc();
s1是指向abc实例的变量名,而楼主要在abc的构造方法中知道是外部是哪个变量名指向自己。在类定义时不可能知道它的实例会被哪个变量引用,而且可能会有多个变量指向这个实例。只有在运行时JVM才知道
哪些变量指向了某个实例。这和局部变量有什么屁关系?还有说反射的,反个屁,都是胡说八道。你反给我看看。变量本身在方法栈中只是一个地址,编译后就没有任何符号。即使JVM自己知道一个对象有哪些变量在指向它,但那是一个
对象引用计数表,为了垃圾回收用的。其它都是引用某对象的句柄地址,它不可能知道程序员定义的s1指向这个对象
还是s2指向这个对象。怎么可能从abc中获取到是什么名称的变量指向abc?胡说是因为无知。而无知的人总认为别人是无知的。