我开始编写我的第一个Java程序。
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
该程序仅使用上述代码即可正常运行。但根据我的OOP知识,class
只是一个抽象的概念,直到你创造了一个同类的对象,它才会变得栩栩如生。然后,通过该对象,我们调用类内的方法/函数。
但是在这个特定的示例中,似乎即使没有创建class
HelloWorldApp
的对象,也会调用main
方法
对象是在其他地方创建的吗?如果是这样,代码的那部分如何知道我的class
名称HelloWorldApp
?
这是因为它是static
方法,为此它不需要创建实例
JVM将加载HelloWorldApp
类并在其上调用静态方法,并且由于它是公共的JVM(外部(可以访问此方法
另请参阅
- 为什么是Java-main-method-static
java应用程序的起点(并非总是(是这种方法
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
当你这样做java className
它会去检查类是否有main方法,因为它是静态的,可以在不创建实例的情况下调用它。
存在但签名不同,它将抛出一条RuntimeException
,说明找不到 main 方法。
不要忘记阅读 仔细看看 main 方法。
题外话:
扩展同样的想法,您不需要类的实例来引用其静态方法和字段。
public class MyClass {
public static int NUMBER = 10;
public static void String sayHello(){
return "Hello";
}
public void String sayBye(){
return "Bye";
}
public static void main(String[] args){
System.out.println(NUMBER); // No need for object
System.out.println(sayHello()); // No need for object
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
}
}
如果在其他类中调用相同,则它可能看起来像:
public class MyClassCaller {
public static void main(String[] args){
System.out.println(MyClass.NUMBER); // No need for object just refer the class
System.out.println(MyClass.sayHello()); // No need for object just refer the class
System.out.println(new MyClass().sayBye()); // sayBye is not accessible at class level have to have an object of MyClass to access sayBye
}
}
关于静态方法的使用/过度使用的一个很好的讨论
main 方法是静态的,不需要实例