在私人类的静态方法

问题描述 投票:-2回答:2

我最近开始学习java和我的第一个OOP language.I读取static methods不需要类实例化它们在运行时你喂类的JVM.My问题如果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");
    }
}
}

以人反对投票,有人建议,更高效的活性会告诉什么是错的片段,谢谢。

java oop static private
2个回答
1
投票

有很多错误,你可以简单地通过编译的代码得到。我建议你使用命令行javac编译的

  1. 如果您编译代码,因为它是 C:\ SRC>的javac tester.java tester.java:3:错误:在内部类tester.estupid公共静态无效的主要(字串[] args)非法静态声明{^修饰符“静态”只允许在恒定的变量声明1错误
  2. 按照上面的错误,让你的嵌套类静态嵌套类。现在,该代码将编译成功,但在运行它,你会得到错误: C:\ SRC>的javac tester.java C:\ SRC>的java测试仪错误:Main方法在类测试仪不存在,请定义main方法为:公共静态无效的主要(字串[] args)或JavaFX应用程序类必须扩展javafx.application.Application
  3. 有了上面的错误,你可以明白,你正在运行测试类,但它不包含由JVM搜索任何主要方法。所以加在测试类主要方法,是的,你可以调用静态内部类的静态方法。改变的代码会是这样,这将正常运行: 公共类测试仪{私有静态类estupid {公共静态无效的主要(字串[] args){的System.out.println(“你好林的私人类的静态方法和主太”); }} 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 tester
Hello Im a static method of a private class and main too

这仅仅是纠正你的代码,使之编译和运行的,但是写在嵌套类主要方法是不建议的。另一件事是,你正在私人嵌套类,所以你使它从保持类之外不可访问(测试类的情况下)。测试类是公共的,访问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.测试仪$ 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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.