Java如何在使用Scanner的方法中为numA赋值并在多方法中复用该变量
Java跨方法共享用户输入变量实现方案
结论
完全可以实现,你只需将numA声明为类级别的静态成员变量即可,同时要修正原代码中aValue1方法未闭合的语法错误,修改后可正常运行的代码如下:
import java.util.Scanner; public class A { // 声明静态成员变量,类内部全局可访问 static double numA; static void aValue1(){ Scanner scan = new Scanner(System.in); System.out.print("Enter value of a: "); // 直接给静态成员变量赋值,无需声明局部变量 numA = scan.nextDouble(); } static void aValue2(){ System.out.println(numA); } public static void main(String[] args) { aValue1(); aValue2(); } }
原理解释
- 你原本在
aValue1方法内部定义的double numA是局部变量,作用域仅限制在方法内部,方法执行结束后变量就会被销毁,因此无法在其他方法中访问 - 声明在类内部、所有方法外部的静态成员变量,属于类本身所有,生命周期和类一致,所有该类下的静态/非静态方法都可以直接访问、修改它的值,完全满足你全局复用的需求
其他可选实现方案
如果你不想使用静态成员变量,也可以通过方法返回值+参数传递的方式实现,避免全局变量带来的潜在副作用:
import java.util.Scanner; public class A { // 方法直接返回用户输入的数值 static double aValue1(){ Scanner scan = new Scanner(System.in); System.out.print("Enter value of a: "); return scan.nextDouble(); } // 方法接收数值作为入参使用 static void aValue2(double numA){ System.out.println(numA); } public static void main(String[] args) { double numA = aValue1(); aValue2(numA); } }
内容的提问来源于stack exchange,提问作者hermit28
相关产品推荐
相关产品推荐

