我是Java的新手,我对某些事感到困惑:
在Java中的简单hello world程序中,没有创建任何对象,所以该类在以下示例中如何工作?
public class HelloWorld
{
public static void main (String args[])
{
System.out.println ("Hello World!");
}
}
答案 0 :(得分:16)
这不会创建HelloWorld
的实例,因为main
是静态方法。静态方法(和静态字段)与类型相关,而不是与该类型的特定实例相关。
有关详细信息,请参阅Java Tutorial page on static/instance members以及this Stack Overflow question(以及其他内容)。
答案 1 :(得分:11)
任何声明为 static 的变量或方法都可以独立于类实例使用。
<强>实验强>
尝试编译此类:
public class HelloWorld {
public static int INT_VALUE = 42;
public static void main( String args[] ) {
System.out.println( "Hello, " + INT_VALUE );
}
}
这是成功的,因为变量INT_VALUE
被声明为静态(如方法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 );
}
}
答案 2 :(得分:10)
更多的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,我发现这更直观,并且(由于我不会在这里讨论的原因)我在编写自己的类时(简单地说 - 线程问题/共享状态等)倾向于回避静态方法。
答案 3 :(得分:4)
可以在没有对象的情况下使用main()之类的静态方法。
答案 4 :(得分:0)
稍后,如果你想使用任何非静态的HelloWorld方法,你必须在main方法中创建一个HelloWorld实例(main不会再次执行,因为它不是构造函数)。
答案 5 :(得分:-1)
您的构建系统会将程序的入口点绑定到类的“main”例程。只有一个班级可以有一个“主”例程。
“main”是静态的。这意味着它是一种“类方法”。它没有实例。