2009-07-09 83 views

回答

10

任何声明为静态的变量或方法可以独立于类实例使用。

实验

尝试编译这个类:

public class HelloWorld { 
    public static int INT_VALUE = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + INT_VALUE); 
    } 
} 

这成功,因为变量INT_VALUE声明为static(如法main)。

尝试与以前的类一起编译这个类:

public class HelloWorld2 { 
    public static void main(String args[]) { 
     System.out.println("Hello, " + HelloWorld.INT_VALUE); 
    } 
} 

这成功,因为INT_VALUE变量既是静态公共。没有太多细节,避免公开变量通常是很好的做法。

尝试编译这个类:

public class HelloWorld { 
    public int int_value = 42; 

    public static void main(String args[]) { 
     System.out.println("Hello, " + int_value); 
    } 
} 

这不会编译因为从类的HelloWorld没有对象实例。对于这个程序编译(并运行),那就必须改变:

public class HelloWorld { 
    public int int_value = 42; 

    public HelloWorld() { } 

    public static void main(String args[]) { 
     HelloWorld hw = new HelloWorld(); 
     System.out.println("Hello, " + hw.int_value); 
    } 
} 
14

因为main静态方法这不创建HelloWorld一个实例。静态方法(和静态字段)与类型相关,而不是与该类型的特定实例相关。

查看Java Tutorial page on static/instance members了解更多详情,以及this Stack Overflow question(其中包括)。

+0

你怎么能张贴秒内回答? – rahul 2009-07-09 10:11:27

+0

碰巧看到它,就是这样。 – 2009-07-09 10:12:03

+1

有没有你无法回答的问题? – rahul 2009-07-09 10:13:08

4

像main()这样的静态方法可以在没有对象的情况下使用。

-1

您的编译系统将程序的入口点绑定到类的“主”例程。只有一个班级可以有一个“主要”程序。

“主”是静态的。这意味着它是一种“类方法”。它没有一个实例。

0

以后,如果你想使用的任何方法的HelloWorld这不是静态的,你必须创建在main方法的HelloWorld的实例(主会因为它不是构造函数不再执行)。

9

更OO版本会是什么样子:

public class HelloWorld { 
    public void sayHello() { 
     System.out.println("Hello World"); 
    } 
    public static void main(String[] argv) { 
    HelloWorld hw = new HelloWorld(); 
    hw.sayHello(); 
    } 
} 

我怀疑更像是你期待什么。它实例化一个新的HelloWord类实例,然后要求它做一些事情。对于学习OO我觉得这是更直观,(原因我就不在这里赘述了),我倾向于写我自己的类(简称 - 线程问题/共享状态等)时回避静态方法远

相关问题