Java初學(xué)者的30個(gè)常見問題
Java初學(xué)者的30個(gè)常見問題
Java初學(xué)者的30個(gè)常見問題
1.2基本數(shù)據(jù)類型
Q.為什么-0/3結(jié)果是0,而-0.0/3.0結(jié)果是-0.0?(注意后邊的結(jié)果0帶負(fù)號)
A.在Java里,整數(shù)是用補(bǔ)碼表示的。在補(bǔ)碼中0只有一種表示方法。另一方面,浮點(diǎn)數(shù)則是用IEEE標(biāo)準(zhǔn)表示的,對于0有兩種表示方法,0和-0。
Q.我可以用%除以一個(gè)小數(shù)嗎?
A.當(dāng)然可以。比如,如果angle是一個(gè)非負(fù)數(shù),那么angle % (2 * Math.PI)就會(huì)把a(bǔ)ngle轉(zhuǎn)換到0到2 π之間。
Q.當(dāng)a b都是基本類型變量時(shí),a = b和a = a b的效果有區(qū)別嗎?
A.當(dāng)a和b的類型不同時(shí),那兩條語句的效果就可能有區(qū)別。a = b等同于a = (int) (a b),這種情況下可以是a是int型,b是float型。但是同等情況下a = a b就會(huì)編譯報(bào)錯(cuò)。
1.3條件語句和循環(huán)語句
Q.為什么判斷字符串相等不能使用==?
A.這反映了基礎(chǔ)類型(int, double, boolean)和引用類型(String)的區(qū)別。
Q.有沒有在什么情況下,一條語句塊的花括號不能省略的?
A.在下面的例子中,第一段代碼是合法的,第二段代碼會(huì)引發(fā)編譯錯(cuò)誤。從技術(shù)角度說,那一條語句是一個(gè)變量聲明,而不是語句,所以會(huì)報(bào)錯(cuò)。
Q.在下面的兩段代碼里,有沒有情況,它們的效果不一樣?
A.有的。如果在循環(huán)塊里使用continue語句。在for的代碼里,計(jì)數(shù)器會(huì)加一;而在while的代碼里,因?yàn)楸籧ontinue略過了,計(jì)數(shù)器不加一。
1.4數(shù)組
Q.某些Java開發(fā)人員使用int a[]而不是int[] a去聲明一個(gè)數(shù)組。這兩者有什么區(qū)別?
A.在Java中這兩種用法都是合法的,他們的作用都是一樣的。前者是在C中的定義數(shù)組的方法。后者是JAVA推薦的方法,因?yàn)樗膶懛╥nt[]更能表明這是一個(gè)int的數(shù)組。
Q.為什么數(shù)組下標(biāo)從0開始 而不是從1開始?
A.這種傳統(tǒng)起源于機(jī)器語言的編程方法。在機(jī)器語言中,數(shù)組下標(biāo)被用來計(jì)算元素位置與第一個(gè)元素之間的偏移量。如果從1開始的話,計(jì)算偏移時(shí)還需要做一次減法運(yùn)算,那是種浪費(fèi)。
Q.如果我用 負(fù)數(shù) 作為數(shù)組下標(biāo)會(huì)發(fā)生什么事?
A.下標(biāo)小于0或者 大于等于數(shù)組長度,JAVA運(yùn)行時(shí)會(huì)拋出ArrayIndexOutOfBoundsException異常,并且中止程序運(yùn)行。
Q.使用數(shù)組時(shí)還有其他需要注意的陷阱嗎?
A.需要記住,JAVA在你創(chuàng)建一個(gè)數(shù)組時(shí)會(huì)去初始化它,所以聲明一個(gè)數(shù)組需要O(N)的時(shí)間。
Q.既然a[]是一個(gè)數(shù)組,為什么System.out.println(a)會(huì)打印出一個(gè)16進(jìn)制的數(shù),就像@f{{62373:0}}這樣,而不是打印出數(shù)組的元素?
A.好問題。這條語句打印出的是 數(shù)組在內(nèi)存中的地址,不幸的是,在絕大多數(shù)情況下,這不是你需要的。
1.5輸入輸出語句
Q.我可以從標(biāo)準(zhǔn)input中重新讀一次數(shù)據(jù)嗎?
A.不可以,你只能讀一次。
Q.怎樣輸入end-of-file (eof)符號?
A.操作系統(tǒng)自動(dòng)包括它了。
Q.使用printf()時(shí)還有哪些用法?
A.對于整數(shù)來說,使用o輸出八進(jìn)制,使用x輸出十六進(jìn)制。對于浮點(diǎn)數(shù)來說,使用e或者g輸出科學(xué)計(jì)數(shù)法形式。
Q.行結(jié)束的符號是什么?
A.不同的文件系統(tǒng)使用了不同的符號。在Unix系統(tǒng)上,新行的符號是'\n';在Windows系統(tǒng)上,每一行都有兩個(gè)字符組成的字符串終結(jié)"\r\n";在Macs系統(tǒng)上,終結(jié)符號是"\n\r"。如果要打印行號,可以使用System.out.println(),或者使用下面的語句得到當(dāng)前操作系統(tǒng)下的行結(jié)束符:
Q.下面兩種寫法,哪一種更有效率?
A.從效率角度說,兩者沒有區(qū)別。 但是第二種寫法更好,因?yàn)樗拗屏俗兞康淖饔糜颉?
2.1函數(shù)調(diào)用
Q.當(dāng)把數(shù)組當(dāng)作函數(shù)調(diào)用時(shí)的參數(shù)時(shí),我常常感到疑惑?
A.是的。你需要牢記傳值參數(shù)(參數(shù)是基本變量類型)和傳引用參數(shù)(比如數(shù)組)之間的區(qū)別。
Q.那為什么不把所有的參數(shù)都使用傳值的方式,包括對待數(shù)組?
A.但數(shù)組很大時(shí),復(fù)制數(shù)組需要大量的性能開銷。因?yàn)檫@個(gè)原因,絕大多數(shù)變成語言支持把數(shù)組傳入函數(shù)但不復(fù)制一個(gè)副本——MATLAB語言除外。
2.3遞歸調(diào)用
Q.有沒有只能用循環(huán)而不能用遞歸的情況?
A.不可能,所有的循環(huán)都可以用遞歸替代,雖然大多數(shù)情況下,遞歸需要額外的內(nèi)存。
Q.有沒有只能用遞歸而不能用循環(huán)的情況?
A.不肯能,所有的遞歸調(diào)用都可以用循環(huán)來表示。比如你可以用while的方式來實(shí)現(xiàn)棧。
Q.那我應(yīng)該選擇哪個(gè),遞歸的方式 還是 循環(huán)的方式?
A.根據(jù)代碼的可讀性和效率性之間做權(quán)衡。
Q.我擔(dān)心使用遞歸代碼時(shí)的空間開銷和重復(fù)計(jì)算(例如用遞歸解Fibonacci)的問題。有沒有其他需要擔(dān)心的?
A.在遞歸代碼中創(chuàng)建大數(shù)據(jù)類型(比如數(shù)組)時(shí)需要額外注意,隨著遞歸的推進(jìn),內(nèi)存使用將會(huì)迅速增加,由于內(nèi)存使用增加,操作系統(tǒng)管理內(nèi)存的時(shí)間開銷也會(huì)增加。
4.2排序與查找
Q.為什么我們要花大篇幅來證明一個(gè)程序是正確的?
A.為了防止錯(cuò)誤的結(jié)果。二分查找就是一個(gè)例子?,F(xiàn)在,你懂得了二分查找的原理,你就能把遞歸形式的二分查找改寫成循環(huán)形式的二分查找。Knuth教授在1946年就發(fā)表了二分查找的論文,但是第一個(gè)正確的二分查找的程序在1962年在出現(xiàn)。
Q.在JAVA內(nèi)建庫中有沒有排序和查找的函數(shù)?
A.有的。在java.util.Arrays中包含了Arrays.sort()和Arrays.binarySearch()方法。對于Comparable類型它使用了 歸并排序,對于基本數(shù)據(jù)類型,它使用了快速排序。因?yàn)榛绢愋褪侵祩鬟f,快速排序比歸并排序更快而且不需要額外的空間。
Q.為什么JAVA庫不用 隨機(jī)pivot方式的快速排序?
A.好問題。 因?yàn)槟承┏绦騿T在調(diào)試代碼時(shí),可能需要確定性的代碼實(shí)現(xiàn)。使用隨機(jī)pivot違背了這個(gè)原則。
4.3棧和隊(duì)列
Q.在Java庫中有對stacks和queues的實(shí)現(xiàn)嗎?
A. Java庫中內(nèi)建java.util.Stack,但是你應(yīng)該避免使用它如果你需要一個(gè)真正的棧的話。因?yàn)樗菍?shí)現(xiàn)了額外的功能,比如訪問第N個(gè)元素。另外,它也支持從棧底部插入元素,所以它看上去更像是一個(gè)隊(duì)列。盡管實(shí)現(xiàn)了這些額外的功能對編程人員是一個(gè)加分,可是我們使用數(shù)據(jù)結(jié)構(gòu)并不只是想使用所有功能,而是需要我們正好需要的那種結(jié)構(gòu)。JAVA對于棧的實(shí)現(xiàn)就是一個(gè)典型的寬接口的例子。
Q.我想使用數(shù)組來表示一個(gè)包含泛型的棧,但是以下代碼編譯報(bào)錯(cuò)。為什么?
A.不錯(cuò)的嘗試。不幸的是,創(chuàng)建一個(gè)泛型數(shù)組在Java 1.5里不支持。你可以使用cast,比如下面的寫法:
根本的原因是JAVA中的數(shù)組是“協(xié)變的(covariant)”,但是泛型并不是。比如,String[]是Object[]的一種子類型,但是Stack
瘋狂軟件教育中心專注于Java培訓(xùn),Android培訓(xùn),iOS培訓(xùn),名師小班專業(yè)授課,零基礎(chǔ)入學(xué)到精通輕松進(jìn)名企。學(xué)員平均就業(yè)薪資6500-7300 , 廣州為學(xué)教育科技有限公司介紹 一、公司概述: 廣州為學(xué)教育科技有限公司位于廣州市天河區(qū),緊臨廣東省重點(diǎn)軟件園區(qū)--廣州天河華景軟件園,成立于2008年3月,注冊資金300萬元,是一家專注于JavaEE和3G/4G Android、iOS技術(shù)的專業(yè)培訓(xùn)服務(wù)機(jī)構(gòu)。 瘋狂軟件、瘋狂Java是廣州為學(xué)教育科技有限公司的教育品牌。 1、自主研發(fā)國內(nèi)領(lǐng)先的Java培訓(xùn)教材 廣州為學(xué)教育科技有限公司瘋狂軟件教育中心相繼出版《瘋狂Java講義》、《瘋狂Android講義》、《輕量級Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》、《瘋狂Ajax講義》、《瘋狂XML講義》、《經(jīng)典Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》、《Struts 2.1權(quán)威指南》、《Ruby On Rails敏捷開發(fā)最佳實(shí)踐》、《瘋狂軟件教育中心突破程序員基本功的16課》、《瘋狂JAVA成為程設(shè)高手的16堂課》等著作。其中瘋狂軟件教育中心體系圖書都是已經(jīng)得到廣泛的市場認(rèn)同,并多次重印的暢銷圖書,并被多家高校選作教材,部分圖書如《瘋狂JAVA成為程設(shè)高手的16堂課》已被翻譯成繁體中文版、輸出到臺(tái)灣地區(qū)。 廣州為學(xué)教育科技有限公司瘋狂軟件教育中心體系原創(chuàng)圖書,瘋狂軟件教育中心學(xué)習(xí)路線圖,這些深厚的知識(shí)沉淀已被大量高校、培訓(xùn)機(jī)構(gòu)所引用。 瘋狂軟件教育中心師資團(tuán)隊(duì) 李剛老師,從事10多年的Java EE應(yīng)用開發(fā),現(xiàn)任廣州為學(xué)教育科技有限公司董事長,瘋狂軟件教育中心教學(xué)總監(jiān)。瘋狂Java實(shí)訓(xùn)營創(chuàng)始人,瘋狂Java體系原創(chuàng)圖書作者。51CTO專家門診特邀嘉賓。曾任廣州電信、廣東龍泉科技等公司的技術(shù)培訓(xùn)導(dǎo)師。曾兼任廣東技術(shù)師范學(xué)院計(jì)算機(jī)科學(xué)系的兼職副教授。培訓(xùn)的學(xué)員已在華為、IBM、阿里軟件、立信、普信、網(wǎng)易、電信盈科等知名公司就職。國內(nèi)著名的高端IT技術(shù)作家,已出版《瘋狂Java講義》、《瘋狂Android講義》、《輕量級Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》、《瘋狂Ajax講義》、《瘋狂XML講義》、《經(jīng)典Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》、《Struts 2.x 權(quán)威指南》、《瘋狂HTML 5/CSS3/JavaScript 講義》等著作。其中瘋狂Java體系圖書都是已經(jīng)得到廣泛的市場認(rèn)同,并多次重印的暢銷圖書,并被多所"985" "211"院校選作教材,部分圖書已被翻譯成繁體中文版、授權(quán)到臺(tái)灣地區(qū)。 黃勇老師,高級軟件工程師,系統(tǒng)架構(gòu)師,資深培訓(xùn)講師。十多年的IT行業(yè)從業(yè)經(jīng)歷,精通J2EE, 對Spring,Struts,Hibernate,JQuery,Ajax等開源框架有較深入的研究, 并精通Oracle、 MSSQL, MySQL 等大中型數(shù)據(jù)庫,長期從事教育培訓(xùn)、科研課題研究及參與國內(nèi)多所重點(diǎn)院校開發(fā)實(shí)訓(xùn)課程?,F(xiàn)任瘋狂軟件教育中心總經(jīng)理。 職業(yè)背景: 曾在中國電信、東方紅集團(tuán)、中國人保PICC、新東方等多家知名企業(yè)擔(dān)當(dāng)項(xiàng)目經(jīng)理、技術(shù)經(jīng)理、軟件構(gòu)架師、研發(fā)中心經(jīng)理、高級講師等要職。曾主持開發(fā)的項(xiàng)目有億強(qiáng)無線點(diǎn)單系統(tǒng)、YQCRM客戶關(guān)系管理系統(tǒng)、中國電信廣東省互聯(lián)星空電信增值服務(wù)支撐平臺(tái)、湖南省政務(wù)辦公系統(tǒng)平臺(tái)、談股論金炒股交流平臺(tái)、生活百科視頻網(wǎng)、東方紅集團(tuán)OA自動(dòng)化辦公系統(tǒng)、寬頻點(diǎn)播平臺(tái)等多項(xiàng)企業(yè)級應(yīng)用的系統(tǒng)分析與設(shè)計(jì)開發(fā)。 授課經(jīng)驗(yàn) 授課“寓觀念于談笑間,蘊(yùn)哲理于詼諧中”,風(fēng)格生動(dòng)、幽默,講解深入淺出。扎實(shí)的學(xué)理功底,清晰的教學(xué)思路、縝密的思維、一絲不茍的教學(xué),善于激發(fā)學(xué)員的學(xué)習(xí)興趣,注重學(xué)員實(shí)戰(zhàn)能力和動(dòng)手能力的培養(yǎng),深得家長、學(xué)員的廣泛好評。不但具備豐富的教學(xué)經(jīng)驗(yàn),而且擅長教師管理、學(xué)生督導(dǎo)及教學(xué)管理。 對技術(shù)、行業(yè)發(fā)展敏銳、出色的研發(fā)技巧及分析能力,較強(qiáng)的團(tuán)隊(duì)協(xié)調(diào)、項(xiàng)目管理能力,善于在多文化環(huán)境中的人際溝通、合作。尊重團(tuán)隊(duì)成員的尊嚴(yán)和價(jià)值引導(dǎo)團(tuán)隊(duì)成員實(shí)現(xiàn)自我。倡導(dǎo)“為高品質(zhì)工作而努力”的職場文化 肖文吉老師,十多年Java軟件開發(fā)經(jīng)驗(yàn),具有出色的研發(fā)技巧及分析能力,對技術(shù)、行業(yè)的發(fā)展有敏銳的判斷力,瘋狂Java實(shí)訓(xùn)營創(chuàng)始人之一?,F(xiàn)任瘋狂軟件教育中心高級講師。多年Java EE核心技術(shù)應(yīng)用經(jīng)驗(yàn)。精通JavaEE,對Spring、Struts、Hibernate、Ajax等開源框架有深入研究,曾經(jīng)研發(fā)過企業(yè)內(nèi)部web框架, 精通Oracle、PL/SQL、MSSQL、MySQL等數(shù)據(jù)庫。帶領(lǐng)團(tuán)隊(duì)研發(fā)廣東省郵政機(jī)要信息系統(tǒng)、廣東省郵政物流監(jiān)控系統(tǒng)、廣東省郵政個(gè)性化平臺(tái)、廣東省電子口岸報(bào)關(guān)及付費(fèi)系統(tǒng)等大型企業(yè)級項(xiàng)目。長期為廣東省稅務(wù)局、廣東省郵政做企業(yè)內(nèi)訓(xùn)和提供軟件解決方案。先后在北京、上海、廣州等地進(jìn)行培訓(xùn)任教,學(xué)員遍布全國各地。培訓(xùn)學(xué)員已入職匯豐銀行、中軟國際、神州數(shù)碼、華為、中興通訊、用友軟件、京華網(wǎng)絡(luò)、東南融通、 羅文強(qiáng)老師,多年Java從業(yè)經(jīng)驗(yàn),億陽信通、軟通動(dòng)力等公司擔(dān)任技術(shù)經(jīng)理、項(xiàng)目經(jīng)理等職位。現(xiàn)任瘋狂軟件教育中心高級項(xiàng)目經(jīng)理。先后為電信、移動(dòng)、華為等企業(yè)設(shè)計(jì)和開發(fā)過的系統(tǒng)主要包括:多平臺(tái)在線支付集成、辦公自動(dòng)化、防火墻管理自動(dòng)化、通信網(wǎng)數(shù)據(jù)采集和分析。主要應(yīng)用的技術(shù)包括:Socket和I/O流、消息隊(duì)列、服務(wù)集成、流程引擎、EJB,同時(shí)還對各種開源技術(shù)、框架有非常深厚的研究。在團(tuán)隊(duì)中的時(shí)候,積極在團(tuán)隊(duì)中培養(yǎng)各種技術(shù)人才,先后培養(yǎng)了網(wǎng)絡(luò)通信、大量消息處理、流程引擎等方面的人才,這些人目前分布在移動(dòng)、華為、電信等企業(yè)中。 徐磊老師,高級軟件工程師,計(jì)算機(jī)科學(xué)與技術(shù)專業(yè),多年Java、Android從業(yè)經(jīng)驗(yàn),曾擔(dān)任多家名企開發(fā)負(fù)責(zé)人,曾擔(dān)任華為VMS系統(tǒng)埃及項(xiàng)目交付經(jīng)理。具有很強(qiáng)的項(xiàng)目實(shí)戰(zhàn)能力,具有較豐富的項(xiàng)目開發(fā)經(jīng)驗(yàn),項(xiàng)目架構(gòu)設(shè)計(jì)能力以及項(xiàng)目進(jìn)度管理能力,對JavaSE、Java EE:Spring、hibernate、MyBits、Struts2、JQuery、JavaScript、Ajax、json、easyui、ligerUI,Mysql,JDBC,oracle對移動(dòng)端Android等技術(shù)有較深入的研究。曾負(fù)責(zé)開發(fā)及設(shè)計(jì)的項(xiàng)目:移動(dòng)OMC網(wǎng)管系統(tǒng),百度離線寶接口網(wǎng)關(guān)系統(tǒng),電力UC項(xiàng)目,高速交通管理系統(tǒng),安防視頻監(jiān)控系統(tǒng),電信網(wǎng)絡(luò)質(zhì)量監(jiān)測系統(tǒng),華為VMS(語音郵箱)系統(tǒng),VVM系統(tǒng)(移動(dòng)客戶端Android平臺(tái)),中移動(dòng)RCS項(xiàng)目等。授課風(fēng)格:細(xì)致,極富耐心。授課思路清晰,有條理,擅于表達(dá)。擅長運(yùn)用生動(dòng),通俗的比喻講解技術(shù)難點(diǎn)與重點(diǎn),注重培養(yǎng)學(xué)生實(shí)際工作習(xí)慣,注重細(xì)節(jié),想學(xué)員之所想。對軟件行業(yè)職業(yè)發(fā)展有較深入的研究與思考,擅長為學(xué)生抽絲剝繭,授業(yè)解惑,深受學(xué)員信任。 羅春龍,高級軟件工程師,具備多年的WEB技術(shù)開發(fā)和教學(xué)經(jīng)驗(yàn),曾參與多個(gè)大型OA、ERP系統(tǒng)的研發(fā)及項(xiàng)目架構(gòu),對WEB系統(tǒng)有深入研究;熟悉JavaEE的各種開發(fā)模式;熟悉面向?qū)ο蟮能浖治?、設(shè)計(jì)方法OOA、OOD;熟悉多種JAVA應(yīng)用服務(wù)器,如Tomcat、Weblogic,JBOSS等; 主要應(yīng)用的技術(shù)包括:Struts2、Springmvc、Hibernate、Spring、Mybatis 、Aax、Bootstrap、JqueryEasyUi、消息服器、Angularjs、Lucune、流程引擎、EJB等 教學(xué)風(fēng)格:思路清晰、深入淺出、認(rèn)真負(fù)責(zé)并能熱心解答同學(xué)們的問題、能夠?qū)⒆约旱捻?xiàng)目開發(fā)經(jīng)驗(yàn)和管理經(jīng)驗(yàn)結(jié)合到授課中,讓學(xué)生更能體會(huì)到真實(shí)的企業(yè)項(xiàng)目開發(fā)。 2、IT實(shí)踐教育的“黃埔軍?!? 廣州為學(xué)教育科技有限公司緊扣IT前沿技術(shù)的脈搏,高瞻遠(yuǎn)矚立于潮頭,引領(lǐng)行業(yè)參與者,開創(chuàng)IT教育培訓(xùn)的新天地,被稱為新式IT教育的“黃埔軍校”。瘋狂軟件教育中心教育中心主要面對大學(xué)生和準(zhǔn)大學(xué)生的長期就業(yè)培訓(xùn)、企業(yè)員工定制內(nèi)訓(xùn)、在職工程師的短期高端培訓(xùn)以及企業(yè)級應(yīng)用的產(chǎn)品研發(fā),其專業(yè)服務(wù)和質(zhì)量承諾在客戶中贏得廣泛的聲譽(yù)。為保服務(wù)的質(zhì)量,基地與廣東水利電力職業(yè)技術(shù)學(xué)院、華南農(nóng)業(yè)大學(xué)、清遠(yuǎn)職業(yè)技術(shù)學(xué)院、仲愷農(nóng)業(yè)工程學(xué)院、廣東工業(yè)大學(xué)、江門職業(yè)技術(shù)學(xué)院、南華工商職業(yè)技術(shù)學(xué)院等高等學(xué)府建立了師資力量方面的合作關(guān)系,同時(shí)與中國電信、中國移動(dòng)、中國郵政、新華南方、匯豐銀行等知名企業(yè)建立了廣泛的戰(zhàn)略合作伙伴關(guān)系。 廣州為學(xué)教育科技有限公司的業(yè)務(wù)范圍已擴(kuò)展到IT綜合技能培訓(xùn)、職業(yè)技能測評、人才服務(wù)、人才派遣、高校委培教師和IT項(xiàng)目外包等多項(xiàng) IT 人才服務(wù)領(lǐng)域。這使得基地?fù)碛袉渭兣嘤?xùn)機(jī)構(gòu)所不可能具備的廣泛的大型IT企業(yè)人才需求資源,作為高校畢業(yè)生和大型企業(yè)之間人才培養(yǎng)及招聘的橋梁,基地的學(xué)員在畢業(yè)后將面向全國享受完善的就業(yè)推薦服務(wù),并同時(shí)獲取享受終生獵頭服務(wù)的資格。 公司作為軟件開發(fā)、游戲開發(fā)人才輸送渠道,承擔(dān)著為本土企業(yè)進(jìn)行解決技術(shù)人才的職能,提供整合外包人才的方案;同時(shí)扶持自主創(chuàng)業(yè);建立大學(xué)生實(shí)訓(xùn)工廠及研發(fā)中心。