2015-07-08 3 views
4

Я создал класс с модификатором пакета в eclipse.java-файл без открытых классов

class notPublic 
{ 
    //main() which prints a string 
} 

Я запустил эту программу, и была напечатана эта строка. У меня есть небольшие сомнения здесь

Я читал, что Java compilation unit must have a public class У меня есть единица компиляции, которая не имеет открытого класса. Но это работает.

Что я понимаю неправильно здесь

ответ

6

Фактическое требование немного отличается: каждый общественный класс Java должен находиться в модуле компиляции с именем PublicClassName.java. Но отлично, что есть единица компиляции, которая делает не содержит открытый класс.

Я не смог найти явную формулировку этого в спецификации языка, но the spec does seem to mention it как предпочтительный/рекомендуемый способ сопоставления единиц компиляции Java с файловой системой.

+0

Любые ссылки на него? –

+0

@ GopsAB Сортировка; см. мое редактирование. –

3

Он работает следующим способом, представьте, что у вас есть файл с именем Dog.java со следующим содержанием:

class A{} 

class B{} 

class C{} 

Как любой из классов является публичной вы можете скомпилировать его с помощью JAVAC Dog. java, и он будет работать.

, но если один из ваших классов является общедоступным имя файла должно быть равно общественному классу, например, если изменить последний пример, как это: Файл Dog.java

public class A{} 

class B{} 

class C{} 

И вы пытаетесь скомпилировать это вы собираетесь получить «класса А является публичным, должен быть объявлен в файле с именем A.java»

И в последний момент вы не место все классы как общественности, так как могут иметь только один открытый класс за файл.