zoukankan      html  css  js  c++  java
  • 关于Java源文件中public类的问题

    结论:

    一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译;

    如果源文件中没有一个public类,则文件名与类中没有一致性要求;

    至于main()不是必须要放在public类中才能运行程序。

     

    实验如下:
    Test3.java源文件:
    class Test1
    {
         int i = 1;

    }

    class Test2
    {
         int i = 2;
         public static void main(String[] args)
        {
             System.out.println("main method");
        }
    }

    C:/javatest>javac Test3.java

    C:/javatest>java Test2
    main method

    注:编译不会出错,注意是运行的Test2 因为没有Test3.class文件生成。如果运行Test3则报错

    找不到该类
    C:/javatest>java Test3
    Exception in thread "main" java.lang.NoClassDefFoundError: Test3
    Caused by: java.lang.ClassNotFoundException: Test3
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: Test3.  Program will exit.
    这个错误原因很简单:JVM中的类加载器找不到Test3.class ,同时这里也说明了包含main()的类如果想运行则不一定要是public的。

    《深入jvm第二版》中有这样一句话:
    java虚拟机实例通过调用某个类的main()来运行一个Java程序,而这个main()必须是public static void 并接收一个字符串数组作为参数,任何拥有这样一个main()的类都可以作为java程序的起点。
    并没有说拥有main()方法的类一定要是public类。

    Test7.java源文件:
    class Test5
    {
         int i = 1;

    }

    public class Test6
    {
         int i = 2;
         public static void main(String[] args)
        {
              System.out.println("main method");
        }
    }

    如果运行Test7.java 报错:
    C:/javatest>javac Test7.java
    Test7.java:8: 类 Test6 是公共的,应在名为 Test6.java 的文件中声明
    public class Test6
            ^1 错误
    这里说明了文件名必须与public类的类名一致,(如果文件中有public类)

    这里可以看出如果有多个public类,那么文件名应该是哪个public类的呢?显然一个java源文件只能有一个public类。

    通过上述实验,故能得出开始的结论!

    参考:http://blog.csdn.net/bareheadzzq/article/details/6562211

  • 相关阅读:
    VC6.0 error LNK2001: unresolved external symbol _main解决办法
    C++中数字与字符串之间的转换(使用CString.Format或者sprintf)
    C++内存管理(超长)
    Flash, Flex, Air, Flashplayer之间的相互关系是什么?
    《KVM虚拟化技术实战和原理解析》读书笔记(十几篇)
    HNCU1323:算法2-1:集合union (线性表)
    Delphi XE7下如何创建一个Android模拟器调试
    DelphiXE Android的所有权限按照分类总结说明
    DelphiXE8怎么使用调试模式(朱建强)
    C++静态库中使用_declspec(dllexport) 不能导出函数的问题
  • 原文地址:https://www.cnblogs.com/zhangwuji/p/7201870.html
Copyright © 2011-2022 走看看