Java 获取方法';通过另一种方法对局部变量进行排序
如何在不使用java中的参数的情况下获得在另一个方法中声明和初始化的值Java 获取方法';通过另一种方法对局部变量进行排序,java,oop,Java,Oop,如何在不使用java中的参数的情况下获得在另一个方法中声明和初始化的值 public class Value { void method1() { int demo=10; System.out.println("methd 1"+demo); } void method2() { System.out.println("method 2"+demo); } public static vo
public class Value {
void method1()
{
int 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 ();
obj.method1();
obj,method2();
}
}
这里,变量demo在method1中声明并分配了一个值,现在我需要在method2中获取demo的值,这在没有任何参数、全局声明和getter setter方法的情况下是可能的吗?不,这是不可能的,因为
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();
}
}
您不需要在访问它时使用。
,但这样做可以清楚地表明它是一个实例字段,而不是局部变量。实际上
int demo
在method1中,函数只是method1的局部函数。我不知道java从这些代码中编译出什么,但可以肯定的是,当您使用为处理器创建字节码的编译器时,这样的变量将直接进入寄存器。您只需将其用作变量的方便名称
如果要在其他方法中使用该变量,则需要在类值中作为数据成员共享该值
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();
}
}
或
}尽管方法的局部变量在编译时被丢弃,但如果使用调试信息javac-g
编译,就可以得到它们。您可以利用字节码库ASM或BCEL。如果通过调试代理挂起JVM,还可以利用远程调试器API。method2()
没有demo
的值,因为它没有定义。在main()
中,您有obj,method2()
,它应该是obj.method2()
您应该学习变量范围这是非常基本的。@Rustam您不应该批评尝试学习的人。没有列出的东西,您为什么要这样做?你在这里的最终目标是什么?没错,但他不想要得手和二传手
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();
}
}
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();
}
}