2014-01-13 29 views
1

我很想知道Java中包名中的最大字符數或最大點數(。)是否有限制?我提到這oracle doc,但在那裏找不到答案。我還提到this thread,這給了我另一個疑問,即名稱限制是否與操作系統(XP,Windows 7)相關?Java中包名中的字符數是否有限制?

在此先感謝!

+0

AFAIK,操作系統是你的主要限制。然而,常識應該告訴你不要去那些限制。儘量保持明智的包名稱。 –

+0

可能的重複[Java是否對類名長度有限制?](http://stackoverflow.com/questions/1039029/does-java-have-a-limit-on-the-class-name-length) –

+0

@JakubK不重複。這是關於包名稱。 –

回答

4

不,沒有任何明智的含義。 Java不會對軟件包名稱進行人爲限制。然而,基礎系統是另一回事。 Windows上的軟件包以文件夾的形式表示,而Windows將路徑大小限制爲260個字符:http://msdn.microsoft.com/en-us/library/aa365247.aspx

從更理論的角度來看,即使我們的系統允許名稱中包含任意長度,但名稱可能不會超過計算機的最大內存。

因此,Java不限制名稱,而是JDK實現被迫強加系統限制。

3

這是在這種情況下有限制的類文件格式。包名是internal binary name of a class的組件。該類的內部二進制名稱是stored as a constant in the constant pool

關於CONSTANT_Class_info:

的name_index項的值必須是有效的索引, constant_pool表。該索引處的constant_pool條目必須是代表有效二進制 類別或接口名稱的內部形式(§4.2.1)編碼的CONSTANT_Utf8_info(§4.4.7)結構

關於存儲在常量池中的單個值,

字段和方法名,字段和方法描述符,長度 和其他常數字符串值(包括那些由 引用ConstantValue(§4.7.2)屬性)被限制爲65535個字符通過 16位無符號的長度項目的CONSTANT_Utf8_info結構 (§4.4.7)

請注意,限制是編碼字節數,而不是編碼字符數 。 UTF-8使用兩個或三個字節編碼一些字符 。因此,包含多字節 字符的字符串被進一步限制。

如果CONSTANT_Utf8_info不能超過65535個字節,它必須包含後跟斜槓後跟類名包名,用一個字符類的名字,你可以擁有這65533個字符長包名稱。

您可能需要write your own classloader才能加載該類,因爲它超出了我所知道的任何文件系統或操作系統的限制。

相關問題