2012-05-31 31 views
0

我是新來的Java編程中,我創建了名稱爲演示一個類,並保存爲sample.java而編譯它給編譯如下錯誤爲什麼我們要在單個文件中聲明公共類?

public class Demo { 
     public static void main(String[] args) { 
     System.out.println("This is year"); 
       } 
      } 

sample.java:3這個java程序:類演示是公共的,應在一個名爲Demo的.java

爲什麼我們在各個文件中聲明公共類文件中聲明......

感謝

Mukthyar

+0

那麼默認(沒有說明符)提到類。 – user1428152

+0

你應該去這裏,閱讀和練習這些例子:http://docs.oracle.com/javase/tutorial/ –

回答

1

@Oli Charlesworth是對的:這是Java語言規範所要求的。你可能會問爲什麼他們需要這個?可能的答案是讓事情清楚。根據定義,類是原子單元。你可以用其他版本替換類,如果公共接口沒有改變,所有東西都會繼續工作。

因此,Java語言設計者決定強迫我們將每個類存儲在不同的文件中。

他們只是爲非公開課做了一些例外。幾個非公開課程可以保存在一個文件中。我認爲這是因爲非公開課是一種可以隨時由作者改變的實施細節。由於類不公開,所以這些更改不應該影響任何API用戶。

但是,我強烈建議你在單獨的文件中保存每一個類(即使它不公開)。這改善了代碼的可讀性,並在一天結束時提高了它的質量。

+0

謝謝,AlexR,我非常清楚你的答案。 – user1428152

+0

實際上,每個編譯單元對一個公共類的限制是爲了避免編譯器不得不通過所有編譯單元進行額外的傳遞,以便確定哪些類是哪裏。這是來自Oak的保留(Java之前稱之爲Java),儘管它對當前編譯器仍然有意義 –

2

因爲這就是Java規範所要求的(或者至少它允許實現需要這個;請參閱Jon的評論)。


至於「爲什麼」,我只能假設。但很明顯,Java的設計人員非常熱衷於清晰的編碼約定等。每個源文件中的一個公共類意味着不知道在哪裏可以找到某些東西。

(如果有一個技術上的原因,我沒有意識到這一點。)

+1

嗯,這是Java規範*允許特定實現需要的東西 - 它恰巧大多數實現*都會使用該要求。 –

+0

我不確定這個答案是否真的回答了「爲什麼」的問題。這告訴我它是必需的,但不是爲什麼它是必需的。 –

+0

@LouisWasserman:這個問題類似於「爲什麼打包默認的可訪問性?」;答案是因爲語言是這樣說的。 –

1

TL; DR:爲了降低軟件的概念複雜性。

如果隱藏在許多不相關名稱的文件中的許多公共類使得僅僅通過查看包結構就難以看清程序的概念結構。

@because Java規範是這麼說的 - 我認爲真正的問題是規範

+0

@ user1428152是我嗎?在什麼時候?你可能誤解了我的答案 - 我試圖解釋拒絕這種聲明的決定背後的原因。 – kostja

0

這是阻止人們塞滿了文件與幾百個類非正交命名的文件背後的原因。 namespacepart/namespacepart/namespacepart/classname結構可以提供標準和可持續的結構。

相關問題