我最近开始学习Java及其第一种OOP
语言。我读到static methods
不需要将类实例化,当您将类提供给JVM
时,它们可以运行。我的问题是,如果static
method
在private nested class
内部会发生什么。它还会运行吗?
编辑-我尝试过不起作用,我想知道后台发生了什么。
public class tester{
private class estupid{
public static void main(String[] args){
System.out.println("Hello Im a static method of a private class and main too");
}
}
}
对于不赞成投票的人,一项建议是,一种更有成效的活动是告诉您摘要的问题,谢谢。
答案 0 :(得分:1)
main方法必须是公共类的成员。静态方法是一种方法,它是该类本身的子级,而不是该类的对象或“实例”。
答案 1 :(得分:1)
有很多错误,您只需编译代码即可解决。我建议您使用命令行javac编译
如果按原样编译代码
C:\src>javac tester.java tester.java:3: error: Illegal static declaration in inner class tester.estupid public static void main(String[] args) { ^ modifier 'static' is only allowed in constant variable declarations 1 error
按照上述错误,将您的嵌套类设为静态嵌套类。现在,代码将成功编译,但运行时会出错:
C:\src>javac tester.java C:\src>java tester Error: Main method not found in class tester, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
由于上面的错误,您可以理解您正在运行测试器类,但是它不包含JVM搜索的任何主要方法。因此,在tester类中添加一个main方法,是的,您可以在static内部类中调用static方法。更改后的代码将像这样正常运行:
public class tester { private static class estupid { public static void main(String[] args) { System.out.println("Hello Im a static method of a private class and main too"); } }}public static void main(String[] args) { estupid.main(args); }
编译并运行上述代码后
public class tester {
public static class estupid {
public static void main(String[] args) {
System.out.println("Hello Im a static method of a private class and main too");
}
}
}
这仅仅是为了更正您的代码并使之可编译和运行,但不建议在嵌套类中编写main方法。 另一件事是您正在制作私有嵌套类,因此使它无法从保持类(在您的情况下为测试器类)之外访问。测试器类是公共的,并且可供JVM访问,但是嵌套的类被标记为私有,因此无法访问。
这并不意味着您不能从JVM调用嵌套类的主要静态方法。将您的嵌套课程公开。
C:\Himanshu\GitHub\hsingh-learning\src>javac tester.java C:\Himanshu\GitHub\hsingh-learning\src>java tester Hello Im a static method of a private class and main too
编译它,将生成2个类文件。 1. tester.class 2. tester $ estupid.class
运行第二个测试器$ estupid,它包含主要方法(JVM要求)
C:\Himanshu\GitHub\hsingh-learning\src>java tester$estupid
Hello Im a static method of a private class and main too