精华内容
下载资源
问答
  • 一个Java源文件中最多只能有一个公共类

    万次阅读 多人点赞 2018-01-27 09:26:15
    一个Java源文件中最多只能有一个公共类 一个Java源文件中可以多个类,但最多只能有一个用public修饰的类,但也可以没有一个public修饰的类。 当这个源文件有一个public修饰的类时,源文件的名称必须和...

    一个Java源文件中最多只能有一个公共类

     

    一个Java源文件中可以有多个类,但是最多只能有一个用public修饰的类,也可以没有一个用public修饰的类。

     

     当这个源文件中有一个public修饰的类时,源文件的名称必须和public修饰的类的类名完全一致(区分大小写)。为什么这时的取名要完全一致呢? 

     

    很简单,因为jvm虚拟机为了提高查找类的速度,使用import语句导入的时候,只会导入对应空间的文件名所对应的class文件,而public文件是大家都要使用的,因此直接导入这个类名对应的class文件即可。(如果编译单元中包含了public类,那么该类对应的字节码文件当需要被类加载器加载的,这时候就需要让类加载器知道该字节码文件的位置,所以就要确保该类与Java文件名称一致。同时,如果有两个public类在同一个文件中,而一个文件只能有一个名称,故两个public类的名称就不能同时和文件名一样,这就造成至少其中有一个public类在编译的时候编译不通过,产生类似的提示(对于一个public类,它是可以被项目中任何一个类所引用的,只需在使用它前import一下它所对应的class文件即可,将类名与文件名一一对应就可以方便虚拟机在相应的路径(包名)中找到相应的类的信息。如果不这么做的话,就很难去找,而且开销也会很大)。)

     

     当这个源文件中一个public修饰的类都没有时,源文件的名称可以不一致,但必须符合命名规则。这里为什么可以不一致呢?

     

    Java编译器在编译的时候,如果整个Java文件(编译单元)都没有public类(对外的公开接口类),类加载器子就无需从这方面直接去加载该编译单元产生的所有的字节码文件(.class文件),那么也就是无需去寻找编译后字节码文件存放位置。而类名和文件名一致是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件。所以在没有public类的Java文件中,文件名和类名都没什么联系。

    展开全文
  • 一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。 至于main()不是必须要放在public类中才能运行...

    一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。
    至于main()不是必须要放在public类中才能运行程序。

    展开全文
  • 问题:一个".java"源文件中是否可以包括多个类(不是内部类)?... 为什么一个java源文件只能有一个public类? 在java编程思想(第四版)一书中这样3段话(6.4 类的访问权限): 1....

    问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

      答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。

     

    为什么一个java源文件中只能有一个public类?

      在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):

      1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。

      2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。

      3.虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。

     

    当java源文件不存在public类时,会出现什么情况?

      

      此时程序编译通过,在相应路径下产生了三个.class文件。直接点击运行,程序是不能运行的,我们需要鼠标右键点击程序----->Run As----->Java Aplication----->选数据来源

     

    个人总结:

      一个编译单元(java文件)可以存在多个类,在编译时产生多个不同的.class文件,.class文件便是程序运行的数据来源。java将public类作为每个编译单元的数据接口,只能有一个,不然不能处理存在多个类的java文件。当一个编译单元(java文件)有多个非public类时,运行时需要对数据来源进行选择。


    原文:

    https://www.cnblogs.com/zhukunqiang/p/6652787.html

    展开全文
  • 一个源文件里能定义多个class,但是只能有一个public类,非public类的名字只要符合java标识符规则就可以,public类的名字必须和源文件名一致。至于为什么这个规定,很多网上的帖子都说是为了方便JVM根据文件名...

    一个源文件里能定义多个class,但是有且只能有一个public类,非public类的名字只要符合java标识符规则就可以,public类的名字必须和源文件名一致。至于为什么有这个规定,很多网上的帖子都说是为了方便JVM根据文件名找到main函数入口,个人觉得这种说法不太可信也不太合理。原因如下,JVM读取的是编译后的.class文件而不是.java源文件,而定义在一个源文件中的多个类编译后都生成了由各自类名命名的.class文件。在我看来当初java的设计者这样规定的主要目应该是为了给源码阅读提供便利,试想一下如果一个源文件中可以有多个public的class而且名字与源文件名不一致,那么当我们在阅读代码时想要了解某个引用类的定义情况应该去哪找这个类的源代码呢?当有了这个规定之后我们就可以根据import的包名和类名准确找到源文件的位置。至于源文件中的其他非public类,他们只能被本包内的类使用,使用范围有限,命名也就没有严格要求了。

    实验如下:
    Test.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 Test.java

    C:/javatest>Java Test2
    main method

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

    找不到该类
    C:/javatest>java Test
    Exception in thread "main" java.lang.NoClassDefFoundError: Test
    Caused by: java.lang.ClassNotFoundException: Test
            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: Test.  Program will exit.
    这个错误原因很简单:JVM中的类加载器找不到Test.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类。

    所以总结如下:一个Java源文件中最多只能有一个public类,当有一个public类时,源文件名必

    须与之一致,否则无法编译,如果源文件中没有一个public类,则文件名与类中没有一致性要求。
    至于main()不是必须要放在public类中才能运行程序。

    以上是通过实验得出的结论,个人认为到这里已经可以了,如果一定要追问到底,可能要问问java

    平台的设计者了。或许,人家会说:这是java的设计和jvm的内部体系结构设计造成,这是一个规

    范,没有为什么。


    展开全文
  • 看了几个解答,都不能让我很满意,以后机会再深究一下,真要是被问起,就这么答:java和jvm的设计需要,是一个规定.假如一个源文件中没有public类,那么你想定义几个类就定义几个,都没有问题,而且每个类的名字...
  • 浅谈为什么一个java源文件只能有一个public类?

    万次阅读 多人点赞 2011-06-22 22:26:00
    闲着没事,在网上看到一个帖子在问为什么一个java源文件只能有一个public类?网上人这么回答:http://topic.csdn.net/t/20060528/22/4784755.html、每个编译单元(文件)只能有一个public类。这么做的意思是,每个...
  • 用#include指令添加相关的头文件,编译器可能还需要根据实际情况跳过程序中的某些代码或补充一些代码,可以用#define和#ifdef来实现。 编译:转换成汇编代码。计算机只能理解更低层的机器代码指令。而生成机器代码...
  • Java一个源文件中可以多个主类

    千次阅读 多人点赞 2020-03-10 01:17:54
    一个Java源文件中可以多个主类,但是只能有一个公共类或者没有公共类,所谓主类就是函数运行的一个入口,public static void main。我们可以通过如下例子说明: public class E{ public static void main(String...
  • 一个源文件只能有一个 public 类 一个源文件可以多个非 public 类 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java。 如果一个类...
  • 一个.java源文件中可以多个类吗?

    千次阅读 2019-04-16 21:34:08
    * 一个.java源文件中可以多个类吗?(内部类除外)什么条件? * 可以的 *但是只能有一个public类, 而且如果public类的话,这个文件的名字要和这个类的名字一样。 *如果都没有public类,名字可以不和这个类一样...
  • 一个程序不论由多少个文件组成,都有一个只能有一个main函数,即主函数。main函数是C程序的入口函数,即程序的执行是从main函数开始,对其他函数的调动也是直接或间接地在main函数中被调用。C程序最大的特点就是...
  • 第一、每个编译单元(文件)只能有一个public 类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public 类来表示。 第二、java程序的入口是main方法,所以被定为public的这个类里一定是含有...
  • 个人总结: ...java将public类作为每个编译单元的数据接口,只能有一个,不然不能处理存在多个类的java文件。当一个编译单元(java文件)多个非public类时,运行时需要对数据来源进行选择。   ...
  • 一个java源文件当中可以多个类,但是为什么只能有一个public类呢?而当这个类被修饰为public的话,为什么源文件名必须要与类名相同呢?  Java编程思想中的一段话: 当编写一个java源代码文件时,此文件通常...
  • java教程中一句话叫做“在同一个程序只能有一个public类”---- 应该理解为只有一个public类的名字与文件名一致。 一个.java源文件中可以多个类吗?(内部类除外)什么条件?带着这个疑惑,动手建几个...
  • 问题:一个".java"源文件... 答案:可以多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。 为什么一个...
  • 原因如下:1、只有一个public类第一、每个编译单元(文件)只能有一个public 类。这么做的意思是,每个编译单元只能有一个公开的接口,而这个接口就由其public 类来表示。第二、java程序的入口是main方法,所以被定为...
  • 一个java源文件可以包含多个类,但是只能有一个是 public 的类 而且这个 public 类必须与文件名一样例如,Test.java中是可以包含其他类的:class A{ } class B{ } public class Test{ }注意,同一源文件中的非...
  • JAVA规定在同一个文件里可以多个类,但只能有一人public标识的主类,并且这个类里面必须public static void mian方法,因为这是程序的入口。还有文件的名字必须跟那个public类的类名一至,不然编译不了。
  • C语言在一个工程下编译多个源文件

    千次阅读 2019-04-29 22:58:53
    C语言在一个工程下编译多个源文件 ** 在这里需要强调一下工程的概念 单独打开一个.c文件或者.cpp文件 该文件不是活跃的,不具备IDE下的运行环境 例如在vs下打开.cs文件,应该打开.sln文件 在codeblocks IDE环境下 ...
  • 下面就介绍如何从一个源文件里调用另一个源文件的函数。 在源文件A1.c中调用A2.c 中的函数两种方法: 1.在A2.c中完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如: 在A2.c中:函数...
  • VS一个项目下多个main函数源文件运行冲突问题

    千次阅读 多人点赞 2020-01-09 15:59:28
    学C++过程中,经常写一些小的案例代码,在一个项目下会建立多个源文件编译运行,每个源文件都由main函数,经常冲突,一开始只是把main改成main1,main2…,后来查了一下,以下几种方法可以解决这个问题。...
  • 遇到的问题是在VS中新建Win32控制台应用程序再添加源文件代码编写好后可以编译运行,在此项目下再添加一个源文件后就不能通过编译了,错误说_main已经在xxx.obj中定义,找到一个或多个重定义的符号。 解决方法: 1...
  • 一个java源文件中可以声明多个class。 但是,只能最多有一个类声明为public的。 而且要求声明为public的类的类名必须与源文件名相同。
  • C语言 第一个C语言程序

    千次阅读 2016-01-10 21:10:55
    学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算机、手机等硬件设备)进行交互。由于我们的最终目的是学习iOS开发,学习iOS开发的话必须在Mac系统下,因此我就在Mac系统环境下开发C语言...
  • 每次创建一个新的 cpp 源文件后,在 CMakeLists.txt 内添加 add_executable(生成的对应exe文件名 cpp文件相对路径) 然后点击 Reload 即可(建议不要选择自动 reload,不然在你输入完之前会一直报错),如下图: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,633
精华内容 56,653
关键字:

一个程序只能有一个源文件吗