Java的Hello World如何在没有对象实例的情况下工作?
我是Java的新手,我对某事感到困惑:Java的Hello World如何在没有对象实例的情况下工作?
在Java中的简单hello世界程序中,没有创建对象,所以在下面的例子中该类如何工作?
public class HelloWorld
{
public static void main (String args[])
{
System.out.println ("Hello World!");
}
}
任何声明为静态的变量或方法可以独立于类实例使用。
实验
尝试编译这个类:
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);
}
}
因为main
是静态方法这不创建HelloWorld
一个实例。静态方法(和静态字段)与类型相关,而不是与该类型的特定实例相关。
查看Java Tutorial page on static/instance members了解更多详情,以及this Stack Overflow question(其中包括)。
像main()这样的静态方法可以在没有对象的情况下使用。
您的编译系统将程序的入口点绑定到类的“主”例程。只有一个班级可以有一个“主要”程序。
“主”是静态的。这意味着它是一种“类方法”。它没有一个实例。
以后,如果你想使用的任何方法的HelloWorld这不是静态的,你必须创建在main方法的HelloWorld的实例(主会因为它不是构造函数不再执行)。
更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我觉得这是更直观,(原因我就不在这里赘述了),我倾向于写我自己的类(简称 - 线程问题/共享状态等)时回避静态方法远
这个“Hello World”是一个对象,至少:) – willcodejavaforfood 2009-07-09 10:39:51