Win a copy of Functional Reactive Programming this week in the Other Languages forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Same name of file and public class

 
Kejal Shah
Ranch Hand
Posts: 87
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi all,

Y is it necessary to have the name of a public class and the name of the file containing this class to be the same?

Tx in advance
 
Jeroen Wenting
Ranch Hand
Posts: 5093
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Why is the sky blue?
Why is water wet?

Some things just ARE. Someone made a conscious decision and put it into law. That law is enforced by the compiler.

You could as easily ask why you call an integer an int and an object an object.
 
Kejal Shah
Ranch Hand
Posts: 87
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks for your reply. But, i do believ that this has s/t to do with the public class being accessible from anywhere.

any takes?
 
Jeroen Wenting
Ranch Hand
Posts: 5093
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
That is an implementation detail of the JVM which can use the law to more easily find the class it needs.
Other mechanisms can be devised as well to find which file contains which class.
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
From JLS Section 7.6:
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.

When packages are stored in a database (�7.2.2), the host system must not impose such restrictions.

In practice, many programmers choose to put each class or interface type in its own compilation unit, whether or not it is public or is referred to by code in other compilation units. A compile-time error occurs if the name of a top level type appears as the name of any other top level class or interface type declared in the same package (�7.6).


For SCJP you have to know that a public class, A say, must be defined in a file named A.java. You do not have to know why.
 
Swamy Nathan
Ranch Hand
Posts: 187
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Another interesting thing is that an empty java file with no content does not give any compilation error. But it may not generate any class files (I hope)
 
Jeroen Wenting
Ranch Hand
Posts: 5093
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I think the entire file is silently skipped...
A sourcefile may contain AT MOST one public class which then must have the same name as the file.
It may contain ANY number of non-public classes.
Combining the two, a source file containing no classes is therefore legal.
As classfiles are created one per class, no classfile would result if there were no classes defined in a source.
 
Anil Hulikal
Greenhorn
Posts: 29
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I do not think it is a good idea to snub anyone, however simple and trivial the question, that the person is asking, might appear on the surface. Perhaps, this is the reason why we have more programmers than software engineers today!. I encourage you to read this interview.

http://java.sun.com/developer/technicalArticles/Interviews/livschitz_qa.html
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic