如何在Java不同方法中访问同一变量?新手求助
解决方法
你的核心问题是方法里的局部变量和类的静态成员变量重名了,导致赋值没给到全局的静态变量,所以其他方法拿不到值。下面是具体修改方案:
方案一:利用已有的静态成员变量
你已经在类里定义了private static int ucakrenk;,但在ucakrenk()方法里又重新声明了同名局部变量,覆盖了全局的静态变量。只需要去掉方法里的int,直接给静态变量赋值:
package aviator; import java.util.Random; public class Main { private static int ucakrenk; public static void main(String[] args) { Random random = new Random(); ucak mainucak = new ucak(7, 8, 9); ucakrenk(); kusurat(); test(); } private static void test() { System.out.println("Siradaki ucak:"); System.out.println("+-renk: " + ucakrenk); } private static void kusurat() { // 如果之后要在其他方法用kusurat的值,同样可以改成静态变量或者返回值 Random random = new Random(); int kusurat = random.nextInt(100); } public static void ucakrenk() { Random random = new Random(); ucakrenk = random.nextInt(100); // 去掉前面的int,直接给类的静态变量赋值 } }
方案二:让方法返回生成的值(不用静态变量)
如果你不想用全局的静态变量,也可以让ucakrenk()方法返回生成的随机数,然后在需要的地方接收这个值:
package aviator; import java.util.Random; public class Main { public static void main(String[] args) { Random random = new Random(); ucak mainucak = new ucak(7, 8, 9); int renkValue = ucakrenk(); // 接收方法返回的随机数 kusurat(); test(renkValue); // 把值传给test方法 } private static void test(int renk) { System.out.println("Siradaki ucak:"); System.out.println("+-renk: " + renk); } private static void kusurat() { Random random = new Random(); int kusurat = random.nextInt(100); } public static int ucakrenk() { // 方法返回类型改成int Random random = new Random(); return random.nextInt(100); // 返回生成的随机数 } }
简单说明
- 静态成员变量属于整个类,所有静态方法都能直接访问,只要别在方法里重新定义同名变量覆盖它。
- 用方法返回值的方式更灵活,不需要依赖全局变量,适合只在特定地方传递值的场景。
内容的提问来源于stack exchange,提问作者bogul du
相关产品推荐
相关产品推荐

