Por que um arquivo de origem Java contém o nome da classe pública que contém?

14

Eu sou um novato aprendendo Java. Em Java, todo arquivo de origem deve conter uma classe pública e esse arquivo de origem deve ter o mesmo nome daquela classe pública. Além disso, nenhum arquivo de origem pode conter duas classes públicas. Por que essa restrição?

    
por user 16.01.2012 / 18:30
fonte

2 respostas

19

Em um de seus boletins de especialistas Java, o Heinz Kabutz analisa as Especificações da linguagem Oak . Ele escreve:

Why is each public class in a separate file? (Section 1)

This is a question that I have frequently been asked during my courses. Up to now I have not had a good answer to this question. In section 1, we read: "Although each Oak compilation unit can contain multiple classes or interfaces, at most one class or interface per compilation unit can be public".

In the sidebar it explains why: "This restriction is not yet enforced by the compiler, although it's necessary for efficient package importation"

It's pretty obvious - like most things are once you know the design reasons - the compiler would have to make an additional pass through all the compilation units (.java files) to figure out what classes were where, and that would make the compilation even slower.

link

    
por 16.01.2012 / 18:53
fonte
8

Razões pelas quais consigo pensar

  • Faz com que encontrar outras classes seja um pouco mais fácil para o compilador desde o início, já que ele não precisa pesquisar todos os potencialmente milhares de arquivos de classe para uma classe pública aleatória, ele pode simplesmente ir para o arquivo.
    • Isso provavelmente não importa mais, mas apenas começou a convenção inicial que nunca mudou
  • Na compilação, uma alteração em um arquivo afeta apenas esse arquivo. Se houver várias classes, tudo terá que ser recompilado
  • Prática recomendada - Ter várias classes públicas no mesmo arquivo torna as coisas confusas. O objetivo dos arquivos é organizar o código-fonte, a finalidade das pastas é organizar os arquivos. Se todas as classes de um pacote específico estiverem em um único super arquivo de 100 MB, você perdeu todas as vantagens e não obteve nenhum dos benefícios dos arquivos (além de adicionar muita dor de cabeça ao editar)
por 16.01.2012 / 19:06
fonte