境搭建與基礎(chǔ)語法精講)
1. Java入門從零開始的環(huán)境搭建與基礎(chǔ)語法作為一名從2008年就開始使用Java的老程序員我見證了Java從1.6到21的整個(gè)發(fā)展歷程。今天我想用最接地氣的方式帶大家真正理解Java的核心概念和實(shí)操要點(diǎn)。不同于教科書式的講解我會(huì)結(jié)合十多年踩坑經(jīng)驗(yàn)告訴你哪些是必須掌握的重點(diǎn)哪些是可以暫時(shí)放過的細(xì)節(jié)。1.1 計(jì)算機(jī)基礎(chǔ)與Java生態(tài)1.1.1 計(jì)算機(jī)組成對編程的影響很多教程一上來就講Java語法但我想先說說硬件基礎(chǔ)。理解計(jì)算機(jī)組成能幫你寫出更高效的代碼CPUJava的JIT編譯器會(huì)把熱點(diǎn)代碼編譯成機(jī)器指令CPU核心數(shù)影響多線程性能內(nèi)存JVM堆內(nèi)存設(shè)置-Xmx不能超過物理內(nèi)存的70%硬盤SSD能顯著提升項(xiàng)目編譯速度特別是大型項(xiàng)目輸入設(shè)備IDE的智能提示效率直接影響編碼速度建議開發(fā)機(jī)至少16G內(nèi)存SSD這對Java開發(fā)體驗(yàn)提升巨大1.1.2 Java技術(shù)體系詳解Java三大平臺(tái)的區(qū)別經(jīng)常讓新手困惑我用實(shí)際項(xiàng)目經(jīng)驗(yàn)說明JavaSE基礎(chǔ)核心我做的金融交易系統(tǒng)客戶端就是基于Swing雖然現(xiàn)在更推薦JavaFXJavaEE企業(yè)級開發(fā)標(biāo)準(zhǔn)但注意Oracle已經(jīng)把JavaEE交給Eclipse基金會(huì)現(xiàn)稱Jakarta EEJavaME曾經(jīng)在功能機(jī)時(shí)代很火現(xiàn)在基本被Android替代1.2 JDK安裝與配置實(shí)戰(zhàn)1.2.1 JDK版本選擇建議2024年我的版本推薦學(xué)習(xí)用JDK17LTS長期支持版生產(chǎn)環(huán)境JDK11或17目前企業(yè)主流嘗鮮體驗(yàn)JDK212023年9月發(fā)布避坑提示不要安裝Oracle JDK的商業(yè)版本選擇OpenJDK構(gòu)建版如Amazon Corretto或Azul Zulu1.2.2 環(huán)境變量配置詳解PATH和JAVA_HOME的設(shè)置是初學(xué)者的第一個(gè)坎。分享我的配置模板# 系統(tǒng)變量 JAVA_HOMEC:\Dev\jdk-17.0.2 # Path追加 %JAVA_HOME%\bin驗(yàn)證安裝成功的完整檢查清單java -version顯示預(yù)期版本javac -version與java版本一致在任意路徑下都能執(zhí)行上述命令1.2.3 多版本切換技巧我電腦上同時(shí)安裝了JDK8、11和17切換方法為每個(gè)版本創(chuàng)建獨(dú)立變量JAVA8_HOMEC:\Dev\jdk1.8.0_301 JAVA11_HOMEC:\Dev\jdk-11.0.12修改JAVA_HOME指向目標(biāo)版本刷新環(huán)境變量refreshenv或重啟終端實(shí)測技巧使用JEnv或SDKMAN!工具可以更優(yōu)雅地管理多版本1.3 第一個(gè)Java程序的深度解析1.3.1 HelloWorld的每個(gè)細(xì)節(jié)public class HelloWorld { public static void main(String[] args) { System.out.println(你好世界); } }關(guān)鍵點(diǎn)解析public class聲明文件名必須為HelloWorld.javamain方法JVM執(zhí)行的入口參數(shù)String[] args用于接收命令行參數(shù)System.out標(biāo)準(zhǔn)輸出流實(shí)際開發(fā)中建議使用日志框架如SLF4J1.3.2 常見編譯錯(cuò)誤解決初學(xué)者最常遇到的5個(gè)錯(cuò)誤類名是HelloWorld, 文件名卻是helloWorld.java→ 大小寫敏感找不到符號→ 檢查拼寫特別是System的首字母大寫需要;→ 每個(gè)語句必須以分號結(jié)尾非法字符→ 確認(rèn)所有符號都是英文半角無法找到主類→ 檢查classpath和包聲明1.4 Java語法核心精要1.4.1 數(shù)據(jù)類型的內(nèi)存真相整型實(shí)戰(zhàn)建議優(yōu)先用int除非明確需要節(jié)省內(nèi)存才用byte/shortlong類型賦值要加L后綴long bigNum 10000000000L;浮點(diǎn)型陷阱// 錯(cuò)誤示范 double result 0.1 0.2; // 實(shí)際是0.30000000000000004 // 正確做法 BigDecimal a new BigDecimal(0.1); BigDecimal b new BigDecimal(0.2); System.out.println(a.add(b)); // 0.3字符型冷知識(shí)Java的char是16位Unicode可以表示中文轉(zhuǎn)義字符在正則表達(dá)式中也很重要如\d匹配數(shù)字1.4.2 類型轉(zhuǎn)換的實(shí)用法則自動(dòng)轉(zhuǎn)換的完整優(yōu)先級 byte → short → int → long → float → double強(qiáng)制轉(zhuǎn)換的風(fēng)險(xiǎn)案例int i 128; byte b (byte)i; // 結(jié)果是-128發(fā)生了溢出黃金法則整數(shù)運(yùn)算默認(rèn)用int浮點(diǎn)數(shù)用double需要其他類型時(shí)顯式轉(zhuǎn)換1.4.3 標(biāo)識(shí)符命名最佳實(shí)踐來自《阿里巴巴Java開發(fā)手冊》的建議類名UpperCamelCase如UserService方法名lowerCamelCase如getUserName常量全大寫加下劃線如MAX_RETRY_COUNT包名全小寫使用公司域名倒序如com.github.yourname1.5 開發(fā)環(huán)境進(jìn)階配置1.5.1 IDE的選擇與優(yōu)化我對比過的主流IDEIntelliJ IDEA智能補(bǔ)全最強(qiáng)社區(qū)版免費(fèi)Eclipse插件豐富但啟動(dòng)慢VS Code輕量但需要配置Java擴(kuò)展IDEA必備設(shè)置調(diào)整JVM參數(shù)Help → Edit Custom VM Options-Xms1g -Xmx2g開啟自動(dòng)導(dǎo)包Settings → Editor → General → Auto Import設(shè)置編碼為UTF-8File Encodings全部設(shè)為UTF-81.5.2 構(gòu)建工具入門現(xiàn)代Java項(xiàng)目必備Mavenpom.xml管理依賴Gradle構(gòu)建速度更快配置更靈活簡單Maven示例dependencies dependency groupIdorg.apache.commons/groupId artifactIdcommons-lang3/artifactId version3.12.0/version /dependency /dependencies1.6 調(diào)試技巧與異常處理1.6.1 斷點(diǎn)調(diào)試實(shí)戰(zhàn)在IDEA中調(diào)試HelloWorld在main方法第一行左側(cè)點(diǎn)擊添加斷點(diǎn)右鍵選擇Debug HelloWorld.main()使用調(diào)試工具欄Step Over (F8)逐行執(zhí)行Step Into (F7)進(jìn)入方法Evaluate Expression實(shí)時(shí)計(jì)算表達(dá)式1.6.2 常見運(yùn)行時(shí)異常新手必遇的5大異常NullPointerException調(diào)用null對象的方法ArrayIndexOutOfBoundsException數(shù)組越界ClassCastException類型強(qiáng)制轉(zhuǎn)換失敗NumberFormatException字符串轉(zhuǎn)數(shù)字失敗ArithmeticException除數(shù)為零處理建議try { Integer.parseInt(abc); } catch (NumberFormatException e) { System.err.println(不是有效的數(shù)字格式); e.printStackTrace(); // 實(shí)際項(xiàng)目應(yīng)該用logger }2. 從HelloWorld到真實(shí)項(xiàng)目2.1 項(xiàng)目結(jié)構(gòu)規(guī)范標(biāo)準(zhǔn)的Maven項(xiàng)目結(jié)構(gòu)src/ main/ java/ # 源代碼 resources/ # 配置文件 test/ java/ # 測試代碼 target/ # 編譯輸出 pom.xml # 項(xiàng)目配置2.2 代碼質(zhì)量工具必備的靜態(tài)檢查工具Checkstyle代碼風(fēng)格檢查SpotBugs潛在bug檢測PMD代碼質(zhì)量分析在pom.xml中配置示例build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-checkstyle-plugin/artifactId version3.1.2/version /plugin /plugins /build2.3 單元測試入門JUnit 5基礎(chǔ)用法import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class CalculatorTest { Test void testAdd() { assertEquals(4, Calculator.add(2, 2)); } }測試命名規(guī)范測試類名被測試類名Test如UserServiceTest測試方法名should_ExpectedBehavior_When_StateUnderTest如should_ReturnTrue_When_PasswordIsStrong3. 學(xué)習(xí)路線建議根據(jù)我?guī)氯说慕?jīng)驗(yàn)推薦的學(xué)習(xí)路徑基礎(chǔ)語法2周面向?qū)ο?周常用API集合、IO等4周數(shù)據(jù)庫與JDBC2周Web基礎(chǔ)Servlet/JSP3周框架SpringMyBatis6周分布式與微服務(wù)持續(xù)學(xué)習(xí)關(guān)鍵建議每個(gè)階段都要?jiǎng)邮肿鲂№?xiàng)目比如學(xué)完IO可以嘗試寫個(gè)文件管理器我見過太多初學(xué)者在環(huán)境配置階段就放棄了。其實(shí)只要熬過最初的艱難Java會(huì)給你豐厚的回報(bào)。我當(dāng)初花了三天才配好第一個(gè)HelloWorld但現(xiàn)在回頭看那些踩過的坑都成了寶貴的經(jīng)驗(yàn)。