[英]Java : Accessing a class within a package, which is the better way?
如果我使用完全限定名稱訪問包中的類,而不導入它,是否可以保存任何內存?
使用完全限定的類名:
java.lang.Math.sqrt(x);
導入包:
import java.lang.Math;
Math.sqrt(x);
哪種方式更好:使用完全限定名稱導入包或訪問?
感謝您..
導入包或使用完全限定的類名之間沒有性能差異。 import指令未轉換為Java字節代碼,因此對運行時性能沒有影響。 唯一的區別是它可以節省您的時間,以防您多次使用導入的類。 這是讀好這里
不,它不會挽救你的記憶。
另請注意,您根本不必導入Math
。 java.lang
所有內容都會自動導入。
一個更好的例子就像ArrayList
import java.util.ArrayList;
....
ArrayList<String> i = new ArrayList<String>();
注意我是專門導入ArrayList
。 我本可以做到的
import java.util.*;
但是您通常希望避免大型通配符導入以避免包之間發生沖突的問題。
他們是等同的。 訪問是一樣的。
導入只是一種約定,可以使您不必每次都輸入完全解析的類名。 只要你是一個快速觸摸的東西,你就可以在不使用導入的情況下編寫所有Java。
但效率或類加載沒有區別。
如前所述,在運行時沒有區別(在類文件中它總是完全限定的,並且在加載和鏈接類之后有指向被引用方法的直接指針),並且java.lang
包中的所有內容都被自動導入,就像當前包中的一切一樣。
編譯器可能需要更長時間搜索幾微秒,但這不應成為原因 - 決定人類讀者的易讀性。
順便說一下,如果你使用了很多靜態方法(例如,來自Math
),你也可以寫
import static java.lang.Math.*;
然后使用
sqrt(x)
直。 但是只有當你的類數學很重並且它確實有助於更大的公式的易讀性時才這樣做,因為讀者(作為編譯器)首先會在同一個類中搜索,也可能在超類中搜索。 (這同樣適用於其他靜態方法和靜態變量(或常量)。)
導入包是為了更好的可讀性;
必須在特殊情況下使用完全限定的類。 例如,不同包中的相同類名,或使用反射如Class.forName()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.