2014-09-10 15 views
1

假設有兩個jar包含相同的具有相同完全限定名的相同類文件。 現在JRE如何看待它們,它會拋出運行時異常嗎?這在我的測試中我看不到。JRE如何提取重複類

它如何拾取班級/哪些將被加載,哪些會被忽略?

回答

2

Jre從第一個罐子上課。

+1

它是如何確定第一個jar的;) – Reddy 2014-09-10 09:10:04

+0

Java在jar(或文件夾)中搜索你將它們提供給它的類。 – talex 2014-09-10 09:20:17

0

它不會導致異常,因爲當一個類首次引用(並且尚未加載)時,類加載器將在類路徑中查找它,一旦找到它,它將被加載並且搜索將停止。

+0

在多個類加載器的情況下,這不一定是一致的 – Caleryn 2014-09-10 08:51:10

+0

即使存在多個獨立的類加載器,對於每個類加載器也是如此,如果它不知道類,它會查找它,一旦它發現,它不會搜索重複。 – icza 2014-09-10 08:52:50

+0

我已經看到它導致異常很多次。 – Caleryn 2014-09-10 08:54:19

0

你不能使用..如果使用一些IDE它會給你錯誤和重複或模糊的類找到..你必須指定從哪個jar文件你想使用的類..如果兩個具有相同的名稱和你已經在你的項目或類中添加了這兩個參考..並使用導入語句都..它應該給你的錯誤..

+2

錯誤。 JRE將在類路徑中找到具有該名稱的第一個類。 – BackSlash 2014-09-10 08:49:58

+0

我想如果使用IDE,它會給你錯誤.. – 2014-09-10 08:50:41

+0

不只是_think_,嘗試它:)它不會給你錯誤(只是測試)。 – BackSlash 2014-09-10 08:53:52

0

一個單一的類加載器將永遠只加載其中的一個雖然,沒有定義的行爲可以加載哪一個。這可能會導致問題,包括ClassNotFoundException,即使這兩個類在編譯之前實際上完全是相同的代碼。它將從第一個定位的jar中加載,但是這可能會根據類加載器和操作系統而有所不同,並且可能會產生一些奇怪的副作用,尤其是在較早的servlet容器中。儘可能避免這種情況。