java主函数里面对a赋值了,另一个函数里面为什么还是全局变量a的初始值?

import java.util.*;
public class dfsSecond {
static int a;
public static void show() {
System.out.println(a);
}
public static void main(String[] args)
{
Scanner sc=new Scanner (System.in);
int a=sc.nextInt();
dfsSecond d=new dfsSecond();
d.show();
}

}


因为你main函数里面的a是局部变量,你输入的值跟你的静态变量没关系的,还有你的类名不觉得有点奇怪吗、dfsSecond ,要养成良好的习命名习惯。

要让方法使用到你主函数的局部变量,要将你的局部变量作为参数传到方法中;另:调用静态方法不用初始化类,你这样写再看看
public class Demo {
static int a;
public static void show(int a) {
System.out.println(a);
}
public static void main(String[] args){
Scanner sc=new Scanner (System.in);
int a=sc.nextInt();
Demo.show(a);
sc.close();
}
}

因为你在main方法里重新定义了变量a,赋值也是到这个新的变量a上,而全局变量上此时还是初始值,所有你在另的方法调用的是全局变量a的初始值

因为在main方法中定义的变量a是局部变量,会将全局变量给"屏蔽"掉,所以被赋值的是main函数内的局部变量,而不是全局变量。可以把变量作为参数传进方法里

我觉得你的另一个函数里面相同的名字,但是是一个局部变量,你在哪个函数里面且被赋过值的

首先抛开一些规范不说,你的show方法是static修饰,所以你在main方法里调用可以直接使用,不需要对象去调用。
int是基本类型,改变值是不会变得,再者你这里赋值的是main方法里的局部变量a,并不是类的成员a。

你想一下为什么你前边static int了一个a,为什么后边你在main里又int了一次没有报错呢?你可以试一下在一个方法里int两次同名的变量是会报错的。 用static修饰变量a之后,a就是这个类的变量,也就是说,你如果想用这个a,需要使用 dfsSecond.a来修改他的值。int a=sc.nextInt();这句代码的变量a只在main中有效。

局部变量a的作用范围不能出方法,也就是不能离开main方法,虽然你show是在main中调用的,但是执行方法的时候是在show里执行的,局部变量a早就失效了

main方法中的变量a非全局变量a