Re: [問題] 關於autoload機制

看板java作者 (老子我最神)時間9年前 (2015/04/21 20:47), 9年前編輯推噓3(308)
留言11則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《tas72732002 (蔥頭)》之銘言: : 請問一下各位大大, : 之前在寫PHP時, 提倡使用autoload機制來必勉load不必要的檔案, : 在python提倡Explicit is better than implicit哲學, 所以不建議使用autoload : 那在java不知道大家都用Explicit 還是 implicit呢? 沒用過 php 及 python 剛查了一下 php 及 python 是直譯式語言 而 java 算是編譯式語言 1. php 的 autoload 避免 load 不必要的檔案 對 Java 而言沒有這個 issue. 假設你需要用到 com.Class1 與 com.Class2 兩個 class 你可以 import 兩次,也可以 import com.* 不論你怎麼寫,你被 compile 成的 class 都是一樣的 import com.Class1; import com.Class2; 所以不會有 load 不必要檔案的問題 而且我也沒聽過 import 太多 class 導致效能變差的事情.... 2. Explicit is better than implicit python 可能是動態 load 時會有名稱衝突,我不知道 python 遇到這情況會怎樣, 但是 Java 如果有衝突,你編譯時就會報錯了,連執行都別想 所以你寫的再怎麼 implicit,編譯時找不到明確的 class 就會吐給你了 我是都用 IDE 幫我產生import code就是了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1429620468.A.45F.html

04/21 20:51, , 1F
應該是說import *跟一般import對看的人有差別
04/21 20:51, 1F

04/21 20:51, , 2F
用*的話,要實際去看code才會知道用了甚麼
04/21 20:51, 2F

04/21 22:45, , 3F
JAVA的import會自己判斷會不會用到,再去載入CLASS
04/21 22:45, 3F

04/22 00:10, , 4F
python 其實也會 compile 成 byte code, pyc
04/22 00:10, 4F
python 的那句話是我用直譯語言去推論的 也許 python import 的方式與 java 不同 所以才會有 Explicit is better than implicit 說法? 以上不清楚還請 python 大師解釋一下。 就我對 Java 理解,import 怎麼寫比較像是 coding style

04/22 02:11, , 5F
Java有runtime dependency也有runtime名稱衝突
04/22 02:11, 5F
阿 ~ 寫的時候沒想到這個 case 如果你指定的 classpath 有多個 com.Class1, 那麼他在執行時會根據一定的順序去取得其中一個 或是可用 http://goo.gl/xFr6tI

04/22 02:12, , 6F
IDE會檢查你寫的code,但不會檢查你用的lib裡的dependency
04/22 02:12, 6F
※ 編輯: cyclone350 (123.193.192.133), 04/22/2015 08:39:42

04/22 23:16, , 7F
不過諷刺的是,同樣是編譯語言的C++,#include卻是
04/22 23:16, 7F

04/22 23:16, , 8F
個百年大學問 :D
04/22 23:16, 8F

04/22 23:17, , 9F
不過這主要跟效能關係不大就是....
04/22 23:17, 9F

04/23 11:03, , 10F
java 的 import 應該等同於 php 的 use
04/23 11:03, 10F

04/23 11:08, , 11F
實際載入類別的是 ClassLoader, 與 php 的 autoload 相似
04/23 11:08, 11F
文章代碼(AID): #1LDaRqHV (java)
討論串 (同標題文章)
文章代碼(AID): #1LDaRqHV (java)