我是Java的新手,我对某些事感到困惑:
在Java中的简单hello world程序中,没有创建任何对象,所以该类在以下示例中如何工作?
public class HelloWorld
{
public static void main (String args[])
{
System.out.println ("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
这不会创建一个HelloWorld因为main是静态方法的实例.静态方法(和静态字段)与类型相关,而不是与类型的特定实例相关.
有关更多详细信息,请参阅静态/实例成员的Java Tutorial页面,以及此Stack Overflow问题(以及其他问题).
Dav*_*vis 11
声明为static的任何变量或方法都可以独立于类实例使用.
实验
尝试编译这个类:
public class HelloWorld {
public static int INT_VALUE = 42;
public static void main( String args[] ) {
System.out.println( "Hello, " + INT_VALUE );
}
}
Run Code Online (Sandbox Code Playgroud)
这成功是因为变量INT_VALUE被声明为静态(如方法main).
尝试编译此类以及上一个类:
public class HelloWorld2 {
public static void main( String args[] ) {
System.out.println( "Hello, " + HelloWorld.INT_VALUE );
}
}
Run Code Online (Sandbox Code Playgroud)
这是成功的,因为INT_VALUE变量既是静态的又是公共的.没有太多细节,通常避免公开变量通常是好的.
尝试编译这个类:
public class HelloWorld {
public int int_value = 42;
public static void main( String args[] ) {
System.out.println( "Hello, " + int_value );
}
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为类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 );
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*new 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑它更像你期待的.它实例化一个新的HelloWord类实例,然后要求它做一些事情.为了学习OO,我发现这更直观,并且(由于我不会在这里讨论的原因)我在编写自己的类时(简要地说 - 线程问题/共享状态等)倾向于回避静态方法.
| 归档时间: |
|
| 查看次数: |
2511 次 |
| 最近记录: |