source file can't have more than one public class

后端 未结 6 1266
野的像风
野的像风 2021-01-12 10:02

we can declare only one public file in a source file and file name must match the public class name

is there any reason to this restriction....

相关标签:
6条回答
  • 2021-01-12 10:31

    @saravanan. I have executed some simple programs which show that just a single default class(ie a class with no access specifier) having the main method works well in java when u save the file name with the default class name.

    To add on to the reason of naming the file with public class name, in a document I went through the details into this state that the JVM looks for the public class (since no restrictions and can be accessible from any where) and also looks for public static void main() in the public class .

    This public class acts as the initial class from where the JVM instance for the java application( program) is begun.So when u provide more than one public class in a program the compiler itself stops you by throwing an error.

    This is because later you can't confuse the JVM as to which class to be its initial class because only one public class with the public static void main(String args[]) is the initial class for JVM.

    HOPE I have helped you in understanding JAVA programming naming better.

    0 讨论(0)
  • 2021-01-12 10:32

    simply remember only that class would be public which has the main other files dont be public

    0 讨论(0)
  • 2021-01-12 10:36

    The reason is, that this is the convention. Also the classloader expects a class in a specific file. You can write your own classloader to avoid this restriction, but there is no good reason to do this. Everyone looking on your code will get confused. ;)

    However, you can create "multiple" classes in one file by creating inner classes. I know, its not the same, but usually you should think about more important things than why there is only one class in one file.

    0 讨论(0)
  • 2021-01-12 10:39

    Yes, it's the specification of the Java language...

    0 讨论(0)
  • 2021-01-12 10:52

    It's there so that the compiler can find the source code of dependent classes.

    0 讨论(0)
  • 2021-01-12 10:56

    Well, it's not a compulsory restriction in Java. It's one that the Java Language Specification mentions as an option. From section 7.6 of the JLS:

    When packages are stored in a file system (§7.2.1), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:

    • The type is referred to by code in other compilation units of the package in which the type is declared.
    • The type is declared public (and therefore is potentially accessible from code in other packages).

    This restriction implies that there must be at most one such type per compilation unit. This restriction makes it easy for a compiler for the Java programming language or an implementation of the Java virtual machine to find a named class within a package; for example, the source code for a public type wet.sprocket.Toad would be found in a file Toad.java in the directory wet/sprocket, and the corresponding object code would be found in the file Toad.class in the same directory.

    But basically it's there to encourage you to make your source easier to navigate. If you know the name of a public class, it's usually pretty easy to find the source code for it.

    0 讨论(0)
提交回复
热议问题