私有类中的静态方法

时间:2019-02-09 04:51:30

标签: java oop static private

我最近开始学习Java及其第一种OOP语言。我读到static methods不需要将类实例化,当您将类提供给JVM时,它们可以运行。我的问题是,如果static methodprivate 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");
    }
}
}

对于不赞成投票的人,一项建议是,一种更有成效的活动是告诉您摘要的问题,谢谢。

2 个答案:

答案 0 :(得分:1)

main方法必须是公共类的成员。静态方法是一种方法,它是该类本身的子级,而不是该类的对象或“实例”。

答案 1 :(得分:1)

有很多错误,您只需编译代码即可解决。我建议您使用命令行javac编译

  1. 如果按原样编译代码

    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
    
  2. 按照上述错误,将您的嵌套类设为静态嵌套类。现在,代码将成功编译,但运行时会出错:

    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
    
  3. 由于上面的错误,您可以理解您正在运行测试器类,但是它不包含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
相关问题