【问题标题】:Static Methods in Private class私有类中的静态方法
【发布时间】:2019-02-09 04:51:29
【问题描述】:

我最近开始学习 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");
    }
}
}

对于投反对票的人来说,一个建议,一个更有成效的活动会告诉你 sn-p 出了什么问题,谢谢。

【问题讨论】:

  • 何不试试呢?
  • 我试过了,它没有运行,我想知道后台发生了什么。
  • 您的问题不清楚。静态方法在调用时运行。 “喂给jvm”不是一个有意义的陈述。因此,当您已经有一些代码时,请考虑编辑您的问题以包含 minimal reproducible example
  • 如果你应用一个代码 sn-p 来显示你做了什么以及如何做会更好。
  • 你是如何尝试运行它的?至少,您需要给出正确的类名。也许java tester.estupid 会起作用。但是嵌套类可能也必须是public(制作private 的重点是它们不能仅在外部使用)。

标签: java oop static private


【解决方案1】:

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

  1. 如果您按原样编译代码

    C:\src>javac tester.java tester.java:3:错误:内部类 tester.estupid 中的非法静态声明 公共静态无效主要(字符串[]参数){ ^ 修饰符 'static' 只允许在常量变量声明中 1 个错误
  2. 根据上述错误,将您的嵌套类设为静态嵌套类。现在代码将编译成功,但运行时会出错:

    C:\src>javac tester.java C:\src>java 测试器 错误:在类测试器中找不到主方法,请将主方法定义为: 公共静态无效主要(字符串 [] 参数) 或 JavaFX 应用程序类必须扩展 javafx.application.Application
  3. 通过上述错误,您可以理解您正在运行测试程序类,但它不包含任何被 JVM 搜索的 main 方法。所以在测试器类中添加一个主方法,是的,你可以在静态内部类中调用静态方法。修改后的代码会像这样正常运行:

    公共类测试器{ 私有静态类 estupid { 公共静态无效主要(字符串[]参数){ System.out.println("你好,我是一个私有类的静态方法,也是 main"); } }
    public static void main(String[] args) {
        estupid.main(args);
    }
    
    }

以上代码编译运行后

C:\Himanshu\GitHub\hsingh-learning\src>javac tester.java C:\Himanshu\GitHub\hsingh-learning\src>java 测试器 你好,我是私有类的静态方法,也是主要的

这只是为了更正您的代码并使其可编译和可运行,但不建议在嵌套类中编写 main 方法。 另一件事是您正在制作私有嵌套类,因此您无法从持有类(在您的情况下为测试者类)之外访问它。 tester 类是公共的,可供 JVM 访问,但嵌套类被标记为私有,因此无法访问。

这并不意味着您不能从 JVM 调用嵌套类的主要静态方法。公开嵌套类。

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");
        }
    }
}

编译它,将生成 2 个类文件。 1. tester.class 2. tester$estupid.class

运行第二个 tester$estupid,其中包含 main 方法(JVM 需要)

C:\Himanshu\GitHub\hsingh-learning\src>java tester$estupid
Hello Im a static method of a private class and main too

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 2017-05-23
      • 2012-07-14
      • 2014-12-18
      • 2011-10-23
      • 1970-01-01
      • 2010-11-04
      • 2015-06-26
      相关资源
      最近更新 更多