Re: [閒聊] 魔法 JNI
看板java作者AmosYang (LetMeGoogleThatForYou)時間14年前 (2010/04/30 07:42)推噓4(4推 0噓 3→)留言7則, 5人參與討論串2/4 (看更多)
※ 引述《sbrhsieh (偶爾想擺爛一下)》之銘言:
: 這一篇不是要介紹 JNI 的觀念。
: 有興趣的人可以把本文當作軼事看。
: 沒有興趣的人可以當作新聞看。
: 完全不懂 JNI,以後也完全不會/想用到 JNI 者,就可以離開不看。
要閒聊的話我也要參一腳…
我第一次實際接觸到 JNI 是剛開始摸 Java 時,
抱著 java.lang.System 的 javadoc 在讀, 讀著讀著就覺得奇妙…
這個天天在用的 System.out... 是個 public static field
由於不能改變這個 field 的值,可見得應該是宣告成 final
但又有這個奇妙的 method
static void setOut(PrintStream out)
Reassigns the "standard" output stream.
至此百思不得其解…只好把 java.lang.System 的原始碼挖出來看
裡面果然是長這個樣子
public final static PrintStream out = nullPrintStream();
再追下去就看到了
private static native void setOut0(PrintStream out);
才知道有 JNI 這東西…
最後順藤摸瓜就爬到了這本聖經
http://java.sun.com/docs/books/jni/html/jniTOC.html
第十章,每個用 JNI 的人都應該要讀三遍
http://java.sun.com/docs/books/jni/html/pitfalls.html
JNI 的行為對來自於 C/C++ 世界的人來說沒什麼奇怪的
C/C++ 裡的魔術已經夠多了 XD
但就如同 sbrhsieh 所說的,對純 Java 人來說,
JNI的行為的確跟 black magic/voodoo 差不多 :D
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 65.87.177.87
※ 編輯: AmosYang 來自: 65.87.177.87 (04/30 07:52)
推
04/30 08:30, , 1F
04/30 08:30, 1F
推
04/30 09:53, , 2F
04/30 09:53, 2F
推
04/30 10:30, , 3F
04/30 10:30, 3F
→
04/30 15:43, , 4F
04/30 15:43, 4F
→
04/30 15:44, , 5F
04/30 15:44, 5F
→
04/30 15:46, , 6F
04/30 15:46, 6F
推
04/30 20:09, , 7F
04/30 20:09, 7F
討論串 (同標題文章)