如果没有对象实例,Java的Hello World如何工作?

时间:2009-07-09 10:09:13

标签: java

我是Java的新手,我对某些事感到困惑:

在Java中的简单hello world程序中,没有创建任何对象,所以该类在以下示例中如何工作?

public class HelloWorld 
{  
    public static void main (String args[]) 
    {  
        System.out.println ("Hello World!");  
    }  
}

6 个答案:

答案 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”是静态的。这意味着它是一种“类方法”。它没有实例。