出版時間:2013-1 出版社:電子工業(yè)出版社 作者:李剛 頁數(shù):484
Tag標(biāo)簽:無
前言
前言 Java語言擁有的開發(fā)人群越來越大了,大量程序員已經(jīng)進入或正打算進入Java編程領(lǐng)域。這當(dāng)然和Java語言本身的優(yōu)秀不無關(guān)系,卻也和Java編程入門簡單有關(guān)。一個毫無編程基礎(chǔ)的初學(xué)者,只要有點數(shù)據(jù)庫和SQL基礎(chǔ),大概花不到一個月時間就可以學(xué)會編寫JSP頁面,說不定就可以找到一份Java編程的工作了。如果他肯再多下點功夫,學(xué)習(xí)一下編寫Struts Action類、配置Action,編寫Spring Bean類、配置Bean,他甚至可能自我感覺很不錯了?! 栴}是:這種“快餐式”的程序員、“突擊式”的程序員真的滿足要求嗎?如果僅僅滿足于這些簡單的、重復(fù)式開發(fā),他們也許沒有太多的問題,但他們可能很少有突破的機會。究其根本原因,很大程度上是因為他們的基本修養(yǎng)不夠扎實。對他們而言,與其說Java是一種面向?qū)ο蟮恼Z言,不如說更像一種腳本;他們從源代碼層次來看程序運行(甚至只會從Eclipse等集成開發(fā)環(huán)境中看程序運行),完全無法從底層內(nèi)存分配的角度來看程序運行;他們天天在用Java類庫、用Struts、用Spring,但對這些東西的實現(xiàn)知之甚少--這又如何突破自己、獲得更好的提高呢? 鑒于此種現(xiàn)狀,“瘋狂軟件教育中心”訓(xùn)練過程中除了采用大量的實際項目來驅(qū)動教學(xué)之外,往往會花時間、精力來培養(yǎng)學(xué)員的基本修養(yǎng)。比如講授Spring框架,如果只關(guān)注編寫B(tài)ean類、配置Bean,一天就足夠了。而筆者往往會深入Spring框架的底層實現(xiàn),帶領(lǐng)學(xué)生從工廠模式、策略模式、門面模式、代理模式、命令模式的角度來深度分析Spring框架實現(xiàn),然后進行對比,總結(jié)Spring框架的優(yōu)勢到底在哪里?不使用Spring框架是否有替換解決方案?進而感受設(shè)計模式對實際開發(fā)的幫助?! ∩厦孢@些內(nèi)容,看似“高深”,但其實質(zhì)依然離不開Java編程的基本功。完全可以這樣說:一旦讀者真正把基本功打扎實了,將可以看得更高、更透徹。 在這樣的背景下,筆者想將自己多年的一些經(jīng)驗、總結(jié)通過本書與大家分享,希望把自己多年積累的經(jīng)驗、心得表達出來;把自己走過的彎路“標(biāo)”出來,讓后來者盡量少走彎路。 本書內(nèi)容 本書第一部分主要介紹Java內(nèi)存管理相關(guān)方面的知識,內(nèi)存管理既是Java程序員容易忽視的地方,又是Java編程的重點。實際上,許多有一定編程經(jīng)驗的Java開發(fā)者,自然而然就會關(guān)心垃圾回收、內(nèi)存管理、性能優(yōu)化相關(guān)內(nèi)容。無論學(xué)習(xí)哪種語言,如果能真正從程序運行的底層機制、內(nèi)存分配細節(jié)、內(nèi)存回收細節(jié)把握程序執(zhí)行過程,這樣才能有豁然開朗的感覺,本書第一部分正是旨在幫助大家更好地掌握Java內(nèi)存管理相關(guān)知識?! ”緯谌糠炙榻B的常見數(shù)據(jù)結(jié)構(gòu)、排序算法的Java實現(xiàn),則是筆者一直想介紹的內(nèi)容--也許你初涉編程時感受不到這些經(jīng)典算法的用途,因為你可以直接利用別人的實現(xiàn);但如果你希望突破自己,上升到另外一個高度時,你就不可避免地需要自己開發(fā)類庫,而不是總使用別人的類庫,那這些經(jīng)典算法的作用就顯現(xiàn)出來了?! ”緯诙糠趾偷谒牟糠謩t主要來自于參加“瘋狂軟件教育中心”的學(xué)生,正如每個動手編程的初學(xué)者,他們都曾經(jīng)遭遇過各種各樣的陷阱,筆者總是提醒他們應(yīng)該將這些陷阱收集起來,以免再次陷進去。本書第二部分收集了Java編程中各種常見的陷阱;第四部分的內(nèi)容則解決了他們進入實際開發(fā)之前的困擾,包括程序開發(fā)的基本方法,有效進行程序調(diào)試的方法,如何看待、使用IDE工具,軟件測試等相關(guān)內(nèi)容?! ”緯创a的下載地址為:http://www.broadview.com.cn/19232。 本書寫給誰看 如果你想從零開始學(xué)習(xí)Java編程,本書不適合你。如果你已經(jīng)學(xué)會了Java基本語法,動手編程卻感到困難重重,或者你已經(jīng)是一個Java程序員了,實際開發(fā)中卻感覺力不從心,本書將非常適合你。本書會幫助你找出自己的技術(shù)短板,提升Java編程的基本修養(yǎng)。
內(nèi)容概要
《瘋狂 Java 程序員的基本修養(yǎng)》歸納了Java學(xué)習(xí)者、工作者在學(xué)習(xí)、工作過程中最欠缺的技術(shù)短板,本書把Java編程中的重點、要點、難點、常見陷阱收集在一起,旨在幫助讀者重點突破這些看似"司空見慣"的基本功?! ”緯R主要分為四個部分,第一部分主要介紹Java程序的內(nèi)存管理,這部分是大多Java程序員最容易忽略的地方--因為Java不像C,而且Java提供了垃圾回收機制,因此導(dǎo)致許多Java程序員對內(nèi)存管理重視不夠;第二部分主要介紹了Java編程過程中各種常見的陷阱,這些陷阱有些來自于李剛老師早年痛苦的經(jīng)歷,有些來自于他的眾多學(xué)子的痛苦經(jīng)歷,都是Java程序員在編程過程中的"前車之鑒",希望讀者能引以為戒;第三部分主要介紹常用數(shù)據(jù)結(jié)構(gòu)的Java實現(xiàn),這部分內(nèi)容也是大多Java程序員重視不夠的地方--因為許多初級程序
作者簡介
李剛,從事10多年的Java EE應(yīng)用開發(fā),現(xiàn)任瘋狂軟件教育中心教學(xué)總監(jiān)。 瘋狂Java實訓(xùn)營創(chuàng)始人,瘋狂Java體系圖書作者。曾任LITEON公司J2EE技術(shù)主管,負責(zé)該公司的企業(yè)信息化平臺的架構(gòu)設(shè)計。 51CTO專家門診特邀嘉賓。 曾任廣州電信、廣東龍泉科技等公司的技術(shù)培訓(xùn)導(dǎo)師,廣東技術(shù)師范學(xué)院計算機科學(xué)系的兼職副教授。 培訓(xùn)的學(xué)生已在華為、IBM、阿里軟件、網(wǎng)易、電信盈科等名企就職。 國內(nèi)著名高端IT技術(shù)作家,已出版《瘋狂Java講義》、《瘋狂Android講義》、《輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)》、《瘋狂Ajax講義》、《瘋狂XML講義》、《經(jīng)典Java EE企業(yè)應(yīng)用實戰(zhàn)》、《瘋狂HTML 5/CSS 3/JavaScript講義》、《Struts 2.x權(quán)威指南》等著作。其中瘋狂Java體系圖書均已得到廣泛的市場認同,多次重印成為超級暢銷書,并被多所“985”“211”院校選作教材。部分圖書已被翻譯成繁體中文版、授權(quán)到臺灣地區(qū)。
書籍目錄
第1章 數(shù)組及其內(nèi)存管理 11.1 數(shù)組初始化 21.1.1 Java數(shù)組是靜態(tài)的 21.1.2 數(shù)組一定要初始化嗎 51.1.3 基本類型數(shù)組的初始化 71.1.4 引用類型數(shù)組的初始化 91.2 使用數(shù)組 121.2.1 數(shù)組元素就是變量 121.2.2 沒有多維數(shù)組 141.3 本章小結(jié) 20第2章 對象及其內(nèi)存管理 212.1 實例變量和類變量 222.1.1 實例變量和類變量的屬性 232.1.2 實例變量的初始化時機 262.1.3 類變量的初始化時機 302.2 父類構(gòu)造器 322.2.1 隱式調(diào)用和顯式調(diào)用 322.2.2 訪問子類對象的實例變量 342.2.3 調(diào)用被子類重寫的方法 372.3 父子實例的內(nèi)存控制 392.3.1 繼承成員變量和繼承方法的區(qū)別 392.3.2 內(nèi)存中子類實例 422.3.3 父、子類的類變量 472.4 final修飾符 482.4.1 final修飾的變量 482.4.2 執(zhí)行“宏替換”的變量 532.4.3 final方法不能被重寫 572.4.4 內(nèi)部類中的局部變量 592.5 本章小結(jié) 62第3章 常見Java集合的實現(xiàn)細節(jié) 633.1 Set和Map 643.1.1 Set和Map的關(guān)系 643.1.2 HashMap和HashSet 693.1.3 TreeMap和TreeSet 793.2 Map和List 853.2.1 Map的values()方法 853.2.2 Map和List的關(guān)系 913.3 ArrayList和LinkedList 923.3.1 Vector和ArrayList的區(qū)別 943.3.2 ArrayList和LinkedList的實現(xiàn)差異 973.3.3 ArrayList和LinkedList的性能分析及適用場景 1013.4 Iterator迭代器 1013.4.1 Iterator實現(xiàn)類與迭代器模式 1023.4.2 迭代時刪除指定元素 1033.5 本章小結(jié) 106第4章 Java的內(nèi)存回收 1074.1 Java引用的種類 1084.1.1 對象在內(nèi)存中的狀態(tài) 1084.1.2 強引用 1114.1.3 軟引用 1114.1.4 弱引用 1144.1.5 虛引用 1184.2 Java的內(nèi)存泄漏 1194.3 垃圾回收機制 1234.3.1 垃圾回收的基本算法 1234.3.2 堆內(nèi)存的分代回收 1254.3.3 與垃圾回收相關(guān)的附加選項 1274.3.4 常見的垃圾回收器 1274.4 內(nèi)存管理小技巧 1314.4.1 盡量使用直接量 1324.4.2 使用StringBuilder和StringBuffer進行字符串連接 1324.4.3 盡早釋放無用對象的引用 1324.4.4 盡量少用靜態(tài)變量 1334.4.5 避免在經(jīng)常調(diào)用的方法、循環(huán)中創(chuàng)建Java對象 1334.4.6 緩存經(jīng)常使用的對象 1344.4.7 盡量不要使用finalize方法 1344.4.8 考慮使用SoftReference 1354.5 本章小結(jié) 135第5章 表達式中的陷阱 1365.1 關(guān)于字符串的陷阱 1375.1.1 JVM對字符串的處理 1375.1.2 不可變的字符串 1405.1.3 字符串比較 1425.2 表達式類型的陷阱 1445.2.1 表達式類型的自動提升 1445.2.2 復(fù)合賦值運算符的陷阱 1455.2.3 Java 7新增的二進制整數(shù) 1475.3 輸入法導(dǎo)致的陷阱 1485.4 注釋字符必須合法 1495.5 轉(zhuǎn)義字符的陷阱 1495.5.1 慎用字符的Unicode轉(zhuǎn)義形式 1495.5.2 中止行注釋的轉(zhuǎn)義字符 1505.6 泛型可能引起的錯誤 1515.6.1 原始類型變量的賦值 1515.6.2 原始類型帶來的擦除 1535.6.3 創(chuàng)建泛型數(shù)組的陷阱 1555.7 正則表達式的陷阱 1575.8 多線程的陷阱 1585.8.1 不要調(diào)用run方法 1585.8.2 靜態(tài)的同步方法 1605.8.3 靜態(tài)初始化塊啟動新線程執(zhí)行初始化 1625.8.4 注意多線程執(zhí)行環(huán)境 1675.9 本章小結(jié) 171第6章 流程控制的陷阱 1726.1 switch語句陷阱 1736.1.1 default分支永遠會執(zhí)行嗎 1736.1.2 break的重要性 1746.1.3 Java 7增強的switch表達式 1766.2 標(biāo)簽引起的陷阱 1776.3 if語句的陷阱 1786.3.1 else隱含的條件 1786.3.2 小心空語句 1816.4 循環(huán)體的花括號 1826.4.1 什么時候可以省略花括號 1826.4.2 省略花括號的危險 1836.5 for循環(huán)的陷阱 1856.5.1 分號惹的禍 1856.5.2 小心循環(huán)計數(shù)器的值 1886.5.3 浮點數(shù)作循環(huán)計數(shù)器 1886.6 foreach循環(huán)的循環(huán)計數(shù)器 1906.7 本章小結(jié) 192第7章 面向?qū)ο蟮南葳?1937.1 instanceof運算符的陷阱 1947.2 構(gòu)造器的陷阱 1987.2.1 構(gòu)造器之前的void 1987.2.2 構(gòu)造器創(chuàng)建對象嗎 1997.2.3 無限遞歸的構(gòu)造器 2037.3 持有當(dāng)前類的實例 2057.4 到底調(diào)用哪個重載的方法 2067.5 方法重寫的陷阱 2097.5.1 重寫private方法 2097.5.2 重寫其他訪問權(quán)限的方法 2107.6 非靜態(tài)內(nèi)部類的陷阱 2117.6.1 非靜態(tài)內(nèi)部類的構(gòu)造器 2117.6.2 非靜態(tài)內(nèi)部類不能擁有靜態(tài)成員 2137.6.3 非靜態(tài)內(nèi)部類的子類 2147.7 static關(guān)鍵字 2157.7.1 靜態(tài)方法屬于類 2157.7.2 靜態(tài)內(nèi)部類的限制 2177.8 native方法的陷阱 2177.9 本章小結(jié) 219第8章 異常處理的陷阱 2208.1 正確關(guān)閉資源的方式 2218.1.1 傳統(tǒng)關(guān)閉資源的方式 2218.1.2 使用Java 7增強的try語句關(guān)閉資源 2248.2 finally塊的陷阱 2268.2.1 finally的執(zhí)行規(guī)則 2268.2.2 finally塊和方法返回值 2278.3 catch塊的用法 2298.3.1 catch塊的順序 2298.3.2 不要用catch代替流程控制 2318.3.3 只有catch可能拋出的異常 2328.3.4 做點實際的修復(fù) 2358.4 繼承得到的異常 2378.5 Java 7增強的throw語句 2388.6 本章小結(jié) 240第9章 線性表 2419.1 線性表概述 2429.1.1 線性表的定義及邏輯結(jié)構(gòu) 2429.1.2 線性表的基本操作 2439.2 順序存儲結(jié)構(gòu) 2439.3 鏈式存儲結(jié)構(gòu) 2489.3.1 單鏈表上的基本運算 2499.3.2 循環(huán)鏈表 2559.3.3 雙向鏈表 2569.4 線性表的分析 2629.4.1 線性表的實現(xiàn)分析 2629.4.2 線性表的功能 2639.5 本章小結(jié) 264第10章 棧和隊列 26510.1 棧 26610.1.1 棧的基本定義 26610.1.2 棧的常用操作 26710.1.3 棧的順序存儲結(jié)構(gòu)及實現(xiàn) 26710.1.4 棧的鏈式存儲結(jié)構(gòu)及實現(xiàn) 27210.1.5 Java集合中的棧 27510.2 隊列 27510.2.1 隊列的基本定義 27510.2.2 隊列的常用操作 27610.2.3 隊列的順序存儲結(jié)構(gòu)及實現(xiàn) 27610.2.4 循環(huán)隊列 28010.2.5 隊列的鏈式存儲結(jié)構(gòu)及實現(xiàn) 28410.2.6 Java集合中的隊列 28710.3 雙端隊列 28810.4 本章小結(jié) 289第11章 樹和二叉樹 29011.1 樹的概述 29111.1.1 樹的定義和基本術(shù)語 29111.1.2 樹的基本操作 29211.1.3 父節(jié)點表示法 29311.1.4 子節(jié)點鏈表示法 29611.2 二叉樹 30111.2.1 二叉樹的定義和基本概念 30111.2.2 二叉樹的基本操作 30211.2.3 二叉樹的順序存儲 30311.2.4 二叉樹的二叉鏈表存儲 30611.2.5 二叉樹的三叉鏈表存儲 31011.3 遍歷二叉樹 31311.3.1 先序遍歷 31411.3.2 中序遍歷 31411.3.3 后序遍歷 31511.3.4 廣度優(yōu)先(按層)遍歷 31611.4 轉(zhuǎn)換方法 31611.4.1 森林、樹和二叉樹的轉(zhuǎn)換 31711.4.2 樹的鏈表存儲 31811.5 哈夫曼樹 31811.5.1 哈夫曼樹的定義和基本概念 31911.5.2 創(chuàng)建哈夫曼樹 31911.5.3 哈夫曼編碼 32211.6 排序二叉樹 32311.7 紅黑樹 33111.7.1 插入操作 33211.7.2 刪除操作 33511.8 本章小結(jié) 344第12章 常用的內(nèi)部排序 34512.1 排序的基本概念 34612.1.1 排序概述 34612.1.2 內(nèi)部排序的分類 34712.2 選擇排序法 34712.2.1 直接選擇排序 34712.2.2 堆排序 35112.3 交換排序 35612.3.1 冒泡排序 35612.3.2 快速排序 35812.4 插入排序 36012.4.1 直接插入排序 36012.4.2 折半插入排序 36212.4.3 Shell排序 36412.5 歸并排序 36712.6 桶式排序 37012.7 基數(shù)排序 37212.8 本章小結(jié) 375第13章 程序開發(fā)經(jīng)驗談 37613.1 扎實的基本功 37713.1.1 快速的輸入能力 37713.1.2 編程實現(xiàn)能力 37913.1.3 快速排錯 37913.2 程序開發(fā)之前 38013.2.1 分析軟件的組件模型 38013.2.2 建立軟件的數(shù)據(jù)模型 38313.3 理清程序的實現(xiàn)流程 38413.3.1 各組件如何通信 38413.3.2 人機交互的實現(xiàn) 38613.3.3 復(fù)雜算法的分析 38813.4 編寫開發(fā)文檔 39113.4.1 繪制建模圖、流程圖 39113.4.2 提供簡要說明 39313.4.3 編寫偽碼實現(xiàn) 39313.5 編碼實現(xiàn)和開發(fā)心態(tài) 39413.5.1 開發(fā)是復(fù)雜的 39413.5.2 開發(fā)過程是漫長的 39413.6 本章小結(jié) 395第14章 程序調(diào)試經(jīng)驗談 39614.1 程序的可調(diào)試性 39714.1.1 增加注釋 39714.1.2 使用log 39714.2 程序調(diào)試的基本方法 40514.2.1 借助編譯器的代碼審查 40514.2.2 跟蹤程序執(zhí)行流程 40814.2.3 斷點調(diào)試 40914.2.4 隔離調(diào)試 41114.2.5 錯誤重現(xiàn) 41214.3 記錄常見錯誤 41414.3.1 常見異??赡艿腻e誤原因 41414.3.2 常見運行時異常可能的錯誤原因 41614.4 程序調(diào)試的整體思路 41714.4.1 分段調(diào)試 41814.4.2 分模塊調(diào)試 41914.5 調(diào)試心態(tài) 41914.5.1 誰都會出錯 42014.5.2 調(diào)試比寫程序更費時 42014.6 本章小結(jié) 420第15章 IDE工具心法談 42115.1 何時開始利用IDE工具 42215.2 IDE工具概述 42315.2.1 IDE工具的基本功能 42415.2.2 常見的Java IDE工具 42515.3 項目管理 42815.3.1 建立項目 42815.3.2 自動編譯 43415.3.3 自動部署、運行 43515.4 代碼管理 43615.4.1 向?qū)降拇a生成 43615.4.2 代碼生成器 43815.4.3 代碼提示 43915.4.4 自動代碼補齊 44115.4.5 實時錯誤提示 44115.5 項目調(diào)試 44215.5.1 設(shè)置斷點 44215.5.2 單步調(diào)試 44415.5.3 步入、步出 44515.6 團隊協(xié)作功能 44615.7 本章小結(jié) 450第16章 軟件測試經(jīng)驗談 45116.1 軟件測試概述 45216.1.1 軟件測試的概念和目的 45216.1.2 軟件測試的分類 45416.1.3 開發(fā)活動和測試活動 45416.1.4 常見的Bug管理工具 45516.2 單元測試 45616.2.1 單元測試概述 45616.2.2 單元測試的邏輯覆蓋 45816.2.3 JUnit介紹 46116.2.4 JUnit的用法 46116.3 系統(tǒng)測試和自動化測試 46716.3.1 系統(tǒng)測試概述 46716.3.2 自動化測試 46816.3.3 常見的自動化測試工具 46916.4 性能測試 47016.4.1 性能測試概述 47016.4.2 性能測試的相關(guān)概念 47116.4.3 常見的性能測試工具 47216.5 本章小結(jié) 472
編輯推薦
李剛編著的《瘋狂Java程序員的基本修養(yǎng)》第一部分主要介紹Java內(nèi)存管理相關(guān)方面的知識,內(nèi)存管理既是Java程序員容易忽視的地方,又是Java編程的重點。 本書第三部分所介紹的常見數(shù)據(jù)結(jié)構(gòu)、排序算法的Java實現(xiàn),則是筆者一直想介紹的內(nèi)容——也許你初涉編程時感受不到這些經(jīng)典算法的用途,因為你可以直接利用別人的實現(xiàn);但如果你希望突破自己,上升到另外一個高度時,你就不可避免地需要自己開發(fā)類庫,而不是總使用別人的類庫,那這些經(jīng)典算法的作用就顯現(xiàn)出來了。 本書第二部分收集了Java編程中各種常見的陷阱;第四部分的內(nèi)容則解決了他們進入實際開發(fā)之前的困擾,包括程序開發(fā)的基本方法,有效進行程序調(diào)試的方法,如何看待、使用IDE工具,軟件測試等相關(guān)內(nèi)容。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載