如何在不使用java中的参数的情况下获取在另一个方法中声明和初始化的值?
y[x[4]]
这里变量demo在method1中声明并且现在分配了一个值我需要在方法2中获取demo的值,这可能没有任何参数,全局声明和没有getter setter方法吗?
答案 0 :(得分:6)
不,这是不可能的,因为demo
在method1
返回后不存在。它是method1
中的局部变量。
...没有任何参数,全局声明和没有getter setter方法?
这几乎排除了一切,如果通过“全局声明”你的意思是让demo
成为一个实例字段(这不是全局的,但我认为这就是你的意思)
但为了完整性,这里的demo
作为实例字段:
public class Value {
private int demo;
void method1()
{
this.demo = 10;
System.out.println("method 1" + this.demo);
}
void method2()
{
System.out.println("method 2" + this.demo);
}
public static void main(String[] args) {
Value obj = new Value ();
obj.method1();
obj.method2();
}
}
访问时,
答案 1 :(得分:3)
public class Value {
void method1()
{
int demo=10;
System.out.println("methd 1"+demo);
}
void method2()
{
System.out.println("method 2");
this.method1();
}
public static void main(String[] args) {
Value obj = new Value ();
obj.method1();
obj.method2();
}
}
或
public class Value {
int method1()
{
int demo=10;
System.out.println("methd 1"+demo);
return demo;
}
void method2()
{
int demos = this.method1();
System.out.println("method 2 "+demos);
}
public static void main(String[] args) {
Value obj = new Value ();
// obj.method1();
obj.method2();
}
}
答案 2 :(得分:0)
实际上
int demo
method1中的只是函数method1的本地。我不知道java编译的代码是什么,但是你可以肯定,当你使用为你的处理器创建字节码的编译器时,这样的变量只会进入寄存器。您只需将其用作变量的方便名称。
如果要在其他方法中使用该变量,则需要在class Value
中将此值作为数据成员共享。
答案 3 :(得分:0)
虽然方法的局部变量在编译时被丢弃,但是如果使用调试信息javac -g
进行编译,则可以获取它们。您可以利用字节码库ASM或BCEL。如果您通过调试代理暂停JVM,则还可以利用远程调试器API。
答案 4 :(得分:0)
public class Value {
int demo;
public int getDemo(){return demo;}
public void setDemo(int demo){this.demo=demo;}
void method1() {
// demo=10;
System.out.println("methd 1"+demo);
}
void method2() {
System.out.println("method 2"+demo);
}
public static void main(String[] args) {
Value obj = new Value ();
//set the value of demo using setter method
obj.method1();
obj.method2();
}
}