import javax.swing.*;
class Demo9 {
static int a;
public Demo9(){
a=1000;
}
public static void printa(){
JOptionPane.showMessageDialog(null,Integer.toString(Demo9.a));
}
public static void main(String[] args) {
System.out.println(Demo9.a);---------------------第一句
Demo9 demo= new Demo9();
System.out.println(demo.a);
Demo9.printa();-----------------------------第二句
}}
结果:0
1000
弹出窗口:1000
问题:为什么第一和第二句的结果会不一样。
class Demo9 {
static int a;
public Demo9(){
a=1000;
}
public static void printa(){
JOptionPane.showMessageDialog(null,Integer.toString(Demo9.a));
}
public static void main(String[] args) {
System.out.println(Demo9.a);---------------------第一句
Demo9 demo= new Demo9();
System.out.println(demo.a);
Demo9.printa();-----------------------------第二句
}}
结果:0
1000
弹出窗口:1000
问题:为什么第一和第二句的结果会不一样。
Demo9 demo= new Demo9(); //调用构造函数 a等于1000了
System.out.println(demo.a);
Demo9.printa();-----------------------------第二句
已经实例化对象了
所以a=1000
class Demo9 {
static int a; //静态变量a,没有初始化,系统自动为其赋值为0
public Demo9(){ //构造函数
a=1000;
}
public static void printa(){
JOptionPane.showMessageDialog(null,Integer.toString(Demo9.a));
}
public static void main(String[] args) {
System.out.println(Demo9.a); //因为这里没有创建对象,而是直接引用了静态变量,也就是类名.a,所以此时a=0
Demo9 demo= new Demo9(); //创建对象,利用构造函数初始化了变量a,此时a=1000了
System.out.println(demo.a);
Demo9.printa;
}}
我在每个语句后面都加了注释,不知道楼主能否看懂也就是说,第一句打印输出的时候只是直接引用了静态变量a,并没有使用构造函数对其进行初始化,因而a=0;而后面的时候利用了构造函数对a进行了初始化,所以a的值变成了1000,后面再执行打印语句和静态方法时输出a的值就变成了1000
public Demo9() {
super();
//a = 1000;
}
public static void printa() { JOptionPane.showMessageDialog(null, Integer.toString(Demo9.a));
}
public static void main(String[] args) { System.out.println(Demo9.a);
// Demo9 demo = new Demo9();
//System.out.println(demo.a);
Demo9.printa();
}
}