Java,誤解為何如此之深
前幾天被電話面試,問Java的參數(shù)傳遞方式,我說只有一種方式,就是by value啊,對方糾正我說,基本類型傳值,對象類
型傳引用;嗚呼,當(dāng)時(shí)被噎了一下,幾秒鐘后回過神來,我明白他的意思,也明白我碰上新世紀(jì)的新新人類了,但我怕他不明白啊,就說我們還是先把“引用”這個(gè)
概念定義清楚吧,不要同一個(gè)詞兩人有兩個(gè)意思,或者舉個(gè)例子吧,在函數(shù)里對String類型的參數(shù)賦值是不影響實(shí)際參數(shù)的啊,于是他也明白我其實(shí)也明白,
電話面試就算過了
然而還不算完,正式面試的四輪:筆試題,筆試完后與leader談,談完后與manager談,談完后與VP談,居然每一輪都有這道題!只不過換成了swap函數(shù)的形式,讓你說出執(zhí)行結(jié)果;我就納了悶了,這道題在人們心目中的形象就那么高大?并且甲方答案也似是而非?
Bjarne一直認(rèn)為是C++的教育害了C++,那么是什么害了Java語言呢?過度的商業(yè)宣傳!
當(dāng)然,商業(yè)宣傳成功的幫助了Java平臺,吸引了大量開發(fā)者,但對Java語言來說,先聽到宣傳詞后再來學(xué)習(xí)的初學(xué)者,耳中充斥的是“Java取消了指針”,“Java沒有內(nèi)存泄露”,“Java純面向?qū)ο?#8221;等宣傳用語,先入為主的就接受了表面現(xiàn)象,而沒有理解問題的實(shí)質(zhì)
Java 取消了指針?看看那個(gè)所謂的“引用”為空時(shí)拋出的異常吧,看看在Java實(shí)現(xiàn)者的眼中這個(gè)東西到底是啥吧:NullPointerException!不 是我鄙視Sun,它的細(xì)節(jié)偽裝的確實(shí)不如MS:.Net里對應(yīng)的異常叫NullReferenceException,雖然也是換湯不換藥;作為一種類C語言,我認(rèn)為對應(yīng)概念的命名還是一致較好,Java里其實(shí)全是指針,你基本無法得到對象本身,只不過這種指針功能受限,不需刪除而已
指針的概念被偽裝起來,不需要delete了,那么除內(nèi)存之外的其它資源呢?數(shù)數(shù)你的程序里有多少個(gè)finally就可以了
Java 純面向?qū)ο??其?shí)就這句話本身來說也無可厚非,只是它使用了<<箭魚行動>>里定義的“錯誤引導(dǎo)”,這句話會使初學(xué)者傾向于認(rèn)為 用Java寫出來的程序都是面向?qū)ο蟮模瑥亩璧K了理解真正的面向?qū)ο?;?shù)數(shù)你程序里有多少根據(jù)對象類型的switch/if/else就可以了
題外話:
面試時(shí)被問道面向?qū)ο蟮娜齻€(gè)基本特征,我知道他想聽到什么封裝繼承多態(tài),但實(shí)際上傳統(tǒng)面向?qū)ο蟮暮诵奶卣骶褪嵌鄳B(tài),繼承只是用來實(shí)現(xiàn)多態(tài)的一種手段,并非本質(zhì)特征;C語言沒有繼承,但照樣可以進(jìn)行OO風(fēng)格的編程
然而還不算完,正式面試的四輪:筆試題,筆試完后與leader談,談完后與manager談,談完后與VP談,居然每一輪都有這道題!只不過換成了swap函數(shù)的形式,讓你說出執(zhí)行結(jié)果;我就納了悶了,這道題在人們心目中的形象就那么高大?并且甲方答案也似是而非?
Bjarne一直認(rèn)為是C++的教育害了C++,那么是什么害了Java語言呢?過度的商業(yè)宣傳!
當(dāng)然,商業(yè)宣傳成功的幫助了Java平臺,吸引了大量開發(fā)者,但對Java語言來說,先聽到宣傳詞后再來學(xué)習(xí)的初學(xué)者,耳中充斥的是“Java取消了指針”,“Java沒有內(nèi)存泄露”,“Java純面向?qū)ο?#8221;等宣傳用語,先入為主的就接受了表面現(xiàn)象,而沒有理解問題的實(shí)質(zhì)
Java 取消了指針?看看那個(gè)所謂的“引用”為空時(shí)拋出的異常吧,看看在Java實(shí)現(xiàn)者的眼中這個(gè)東西到底是啥吧:NullPointerException!不 是我鄙視Sun,它的細(xì)節(jié)偽裝的確實(shí)不如MS:.Net里對應(yīng)的異常叫NullReferenceException,雖然也是換湯不換藥;作為一種類C語言,我認(rèn)為對應(yīng)概念的命名還是一致較好,Java里其實(shí)全是指針,你基本無法得到對象本身,只不過這種指針功能受限,不需刪除而已
指針的概念被偽裝起來,不需要delete了,那么除內(nèi)存之外的其它資源呢?數(shù)數(shù)你的程序里有多少個(gè)finally就可以了
Java 純面向?qū)ο??其?shí)就這句話本身來說也無可厚非,只是它使用了<<箭魚行動>>里定義的“錯誤引導(dǎo)”,這句話會使初學(xué)者傾向于認(rèn)為 用Java寫出來的程序都是面向?qū)ο蟮模瑥亩璧K了理解真正的面向?qū)ο?;?shù)數(shù)你程序里有多少根據(jù)對象類型的switch/if/else就可以了
題外話:
面試時(shí)被問道面向?qū)ο蟮娜齻€(gè)基本特征,我知道他想聽到什么封裝繼承多態(tài),但實(shí)際上傳統(tǒng)面向?qū)ο蟮暮诵奶卣骶褪嵌鄳B(tài),繼承只是用來實(shí)現(xiàn)多態(tài)的一種手段,并非本質(zhì)特征;C語言沒有繼承,但照樣可以進(jìn)行OO風(fēng)格的編程
posted on 2007-12-10 21:12 々上善若水々 閱讀(856) 評論(0) 編輯 收藏 所屬分類: J2SE