- 01計算機語言概述
- 02Java語言發(fā)展史
- 03-Java語言的特性
- 04-Java跨平臺原理
- 05-JVM-JRE-JDK三者關系
- 06-JDK安裝
- 07-環(huán)境變量配置
- 08-第一個Java程序
- 09-編寫Java程序注意事項
- 10-Java編譯過程
- 11-安裝IDEA開發(fā)工具
- 12-使用IDEA創(chuàng)建工程
- 13-IDEA設置樣式與提示
- 14-IDEA隱藏.iml文件
- 15-IDEA導入主題
- 16-進制概念
- 17-進制的表現(xiàn)形式
- 18-十進制轉(zhuǎn)二進制
- 19-二進制轉(zhuǎn)十進制
- 20-二進制與八進制十六進制之間的轉(zhuǎn)換
- 21-計算機數(shù)據(jù)存儲單位
- 22-原碼反碼補碼
- 23-字面量與常量
- 24-變量
- 25-變量的特點
- 26-標識符與命名規(guī)則
- 27-關鍵字與表達式
- 28-注釋
- 29-數(shù)據(jù)類型分類
- 30-數(shù)據(jù)類型占用空間大小
- Java基礎語言編程31-整數(shù)與浮點數(shù)
- 32-字符類型與ASCII碼表
- 33-boolean布爾類型
- 34-數(shù)據(jù)類型轉(zhuǎn)換規(guī)則
- 35-強制類型轉(zhuǎn)換
- 36-自動類型提升
- 37-字符串相加
- 38-除號注意事項與取模操作
- Java語言編程學習39-自增與自減
- 40-自增與自減加強訓練
- Java語言編程基礎學習41-賦值運算
- Java編程語言學習42-比較運算符與邏輯運算符
- Java編程語言學習43-異或操作
- Java語言編程基礎學習44-短路與和短路或
- 45-位運算
- 46-左移與右移運算
- 47-運算符優(yōu)先級與順序結(jié)構
- 48-if條件語句
- 49-if-else選擇條件語句
- 50-if-else-If多選擇條件語句
- 51-switch語句與注意事項
- 52-while循環(huán)結(jié)構與斷點調(diào)試
- 53-do-while循環(huán)
- 54-for循環(huán)
- 55-for循環(huán)小練習
- 56-死循環(huán)的寫法
- 57-break語句
- 58-continue語句
- 59-return語句
- 60-嵌套循環(huán)
- 61-水仙花數(shù)算法分析
- 62-水仙花數(shù)算法代碼實現(xiàn)
- 63-嵌套循環(huán)練習打印長方形
- 65-嵌套嵌套練習打印等邊三角形
- 64-嵌套循環(huán)練習打印直角三角形
- 66-嵌套循環(huán)練習九九乘法表
- 67-控制外層循環(huán)
- 68-什么是方法
- 69-方法注意事項
- Java語言基礎編程序?qū)W習70-方法參數(shù)與注意事項
- 71-方法返回值
- Java語言基礎編程序?qū)W習72-方法駝峰命名
- 73-方法定義練習
- 74-方法重載
- 75-數(shù)組的定義與取值
- 76-數(shù)組靜態(tài)初始化
- 77-數(shù)組動態(tài)初始化
- 78-遍歷數(shù)組
- 零基礎學 Java編程79-如何打印數(shù)組
- 80-倒序打印數(shù)組
- 81-數(shù)組元素的交換
- 82-冒泡排序算法分析
- 83-冒泡排序-實現(xiàn)一輪數(shù)據(jù)排序
- 84-冒泡排序-實現(xiàn)所有數(shù)據(jù)排序
- 85-選擇排序算法分析
- 86-選擇排序-實現(xiàn)一輪最小元素排在最前
- 87-選擇排序-實現(xiàn)所有數(shù)據(jù)排序
- 88-二分查找算法分析
- 89-二分查找算法實現(xiàn)與源碼分析
- 90-二分查找算法源碼分析
- Java編程語言基礎學習91-什么是二維數(shù)組
- Java基礎語言核心編程92-二維數(shù)組遍歷
- 93-數(shù)組快速遍歷
- Java基礎語言編程開發(fā)95-變量的作用域
- 96-面向過程
- 97-什么是對象
- 98-面向過程與面向?qū)ο笏季S方式
- 99-面向?qū)ο笕筇卣?/a>
- 100-什么是類
- 101-類與對象的關系
- 102-如何定義類
- 103-使用Java代碼定義類
- 104-類的實例化
- 105-對象創(chuàng)建過程
- 106-JVM內(nèi)存劃分
- 107-虛擬機棧與方法的棧幀
- 108-引用數(shù)據(jù)類型
- 109-數(shù)組在內(nèi)存中的表現(xiàn)形式
- 110-創(chuàng)建對象過程內(nèi)存分析
- 111-引用數(shù)據(jù)類型地址
- 112-基本數(shù)據(jù)類型值傳遞
- 113-值傳遞加強練習
- 114-地址傳遞加強練習
- 115-什么是匿名對象
- 116-構造器的作用與特點
- 117-默認構造器特點
- 118-自定義構造器
- 119-自定義構造器參數(shù)傳遞注意事項
- 120-構造器重載
- 121-static關鍵字作用與特點
- 122-static修飾成員變量
- 123-static修飾方法
- 124-static成員內(nèi)存分析
- 125-成員變量與局部變量
- 126-變量的初始值與作用域
- 127-變量的生命期
- 128-封裝思想
- 129-什么是包
- 130.包的創(chuàng)建
- 131-import關鍵字
- 132-private關鍵字作用
- 133-protected關鍵字作用
- 134-public關鍵字
- 135-默認訪問權限
- 136-get與set方法
- 137-this關鍵字作用
- 138-繼承思想詳細介紹
- 139-繼承extends關鍵字使用
- 140-protected在繼承狀態(tài)下訪問權限
- 141-默認修飾符在繼承狀態(tài)的訪問權限
- 142-子類可以父類中哪些成員
- 143-繼承時方法的覆蓋
- 144-方法重載與方法重寫的區(qū)別
- 145-super關鍵字作用
- 146-super構造器
- 147-子類初始化過程
- 148-繼承狀態(tài)下靜態(tài)方法的隱藏
- 149-繼承狀態(tài)下成員變量的隱藏
- 150-什么是UML
- 151-UML中類圖的表示
- 152-UML中類繼承關系表示
- 153-什么是多態(tài)
- 154-多態(tài)代碼演示
- 155-多態(tài)的作用
- 156-多態(tài)時方法調(diào)用注意事項
- 157-多態(tài)練習
- 158-instanceof關鍵字作用
- 159-局部代碼塊
- 160-初始化代碼塊
- 161-靜態(tài)代碼塊
- 162-類什么時候被加載
- 163-繼承狀態(tài)下字節(jié)碼加載順序
- 164-成員初始過程面試題講解
- 165-final關鍵字作用
- 166-什么是單例模式
- 167-單例-餓漢模式
- 168-單例-懶漢模式
- Java核心基礎編程169-抽象方法解決什么問題
- 170-抽象方法
- 94-可變參數(shù)
- 171-抽象類
- 172-特殊的抽象類
- 173-什么是接口
- 174-Java接口的定義與注意點
- 175-接口多繼承
- 76-接口的實現(xiàn)
- 177-接口繼承與實現(xiàn)綜合練習
- 178-接口和抽象類的區(qū)別
- 179-接口的多態(tài)
- 180-什么是內(nèi)部類
- 181-實例內(nèi)部類創(chuàng)建
- 182-實例內(nèi)部類變量的訪問
- 183-靜態(tài)內(nèi)部類創(chuàng)建
- 184-靜態(tài)內(nèi)部類注意事項
- 185-匿名內(nèi)部類
- 186-什么是枚舉
- 187-Java中枚舉的定義與使用
- 188-枚舉創(chuàng)建源碼分析
- 189-UML中接口實現(xiàn)畫法
- 190-工廠設計模式概述
- 191-簡單工廠設計模式
- 192-工廠方法設計模式
- 193-抽象工廠設計模式
- 194-什么是包裝類
- 195-裝箱操作
- 196-拆箱操作
- 197-自動裝箱與自動拆箱
- 198-字符串與基本數(shù)據(jù)類型和包裝類的轉(zhuǎn)換
- 199-包裝類valueOf緩存設計
- 200-mian方法參數(shù)介紹
- 201-Scanner類
- 202-arraycopy數(shù)據(jù)拷貝
- 203-終止JVM運行
- 204-垃圾回收器GC
- 205-Math類
- 206-程序中金額表示
- 207-String類在JDK9中的變化
- 209-JDK9中equals源碼分析
- 209210-字符串與常量池
- 211-字符串常用方法1
- 212-字符串常用方法2
- 213-字符串常用方法3
- 214-String類型拼接時效率問題
- 215-可變字符串與不可變字符串
- 216-可變字符串兩者區(qū)別
- 217-Random類
- 218-Random生成指定范圍內(nèi)的隨機數(shù)
- 219-UUID生成隨機唯一標識符
- 220-生成5位驗證碼
- 221-獲取當前日期時間
- 222-日期格式化
- 223-數(shù)組與集合的區(qū)別
- 224-Collection集合繼承結(jié)構圖
- 225-Collection集合創(chuàng)建
- 226-Collection集合常用方法1
- 227-Collection集合常用方法2
- 228-Collection添加任意類型注意點
- 229-迭代器遍歷元素
- 230-迭代器源碼分析
- 231-并發(fā)修改異常
- 232-遍歷刪除2個元素集合特殊情況
- 234-ListIterator迭代器方法
- 235-ArrayList數(shù)據(jù)結(jié)構分析
- 236-ArrayList去除集合當中重復的元素
- 237-ArrayList去除當中重復的元素方法抽取
- 238-ArrayList去除自定義對象元素重復元素
- 239-LinkedList數(shù)據(jù)結(jié)構分析
- 240-LinkedList特有方法
- 241-LinkedList實現(xiàn)棧結(jié)構存儲
- 242-List實現(xiàn)類總結(jié)
- 243-Vector特有方法
- 244-沒有泛型的問題
- 245-泛型定義
- 246-集合使用泛型的好處
- 247-泛型使用注意點及本質(zhì)
- 248-自定義泛型方法
- 249-泛型通配符
- 250-泛型通配符-泛型的上限和下限
- 251-泛型擦除
- 252-List與數(shù)組的互相轉(zhuǎn)換
- 253-集合嵌套集合
- 254-Set集合特性演示
- 255-Set自定義對象相等判斷
- 256-hashCode
- 257-HashSet去重原理分析
- 258-LinkedHashSet
- 259-生成1到20之間不重復的隨機數(shù)
- 260-去除重復字符串練習
- 261-TreeSet
- 262-TreeSet添加自定義對象
- 263-TreeSet二叉樹原理分析
- 264-TreeSet自定義對象屬性排序
- 265-TreeSet比較器
- 266-Map映射關系概述
- 267-Map添加元素
- 268-Map修改元素
- 269-Map常用方法
- 270-Map獲取元素及遍歷元素
- 271-Map通過entry對象遍歷元素
- 272-Map自定義對象做為key
- 273-LinkedHashMap
- 274-TreeMap
- 275-Map統(tǒng)計字符串中字符出現(xiàn)的次數(shù)
- 276-HashMap與HashTable區(qū)別
- 277-異常概述
- 278-JVM異常處理方式
- 279-處理多個異常
- 280-JDK7之后處理多個異常
- 281-try_catch處理異常
- 282-獲取異常信息
- 283-throw拋出異常
- 284-throw與throws的區(qū)別
- 285-finally
- 286-finally返回值問題
- 287-自定義異常
- 288-File類作用
- 289-File類創(chuàng)建
- 290-File類常用方法
- 291-相對路徑與絕對路徑
- 292-File判斷方法
- 293-File的創(chuàng)建與刪除
- 294-目錄的遍歷
- 295-什么是遞歸
- 296-遞歸練習
- 297-遞歸調(diào)用內(nèi)存分析
- 298-遞歸打印多級目錄
- 299-多級目錄樹形結(jié)構輸出
- 300-多級目錄樹形結(jié)構優(yōu)化顯示
- 301-什么是IO流
- 302-字節(jié)輸出流
- 303-write寫出字節(jié)信息
- 304-write追加寫出字節(jié)信息
- 305-write寫出字節(jié)數(shù)組
- 306-write寫出時換行
- 307-字節(jié)輸入流讀取文件
- 308-通過While循環(huán)讀取所有字節(jié)信息
- 309-讀取字節(jié)數(shù)組內(nèi)容
- 310-字節(jié)數(shù)組while循環(huán)讀取所有內(nèi)容
- 311-磁盤圖片復制到工程中
- 312-字符流讀取內(nèi)容
- 313-字符流寫入close與flush的區(qū)別
- 314-字符流寫入字符數(shù)組與字符串
- 315-IO流異常處理
- 316-字節(jié)緩沖流
- 317-字符緩沖流
- 318-打印流
- 319-為什么會產(chǎn)生亂碼
- 320-解決文件亂碼
- 321-序列化
- 322-并行與并發(fā)
- 323-進程與線程
- 324-什么是多線程
- 325-進程與線程的區(qū)別
- 326Java中使用Thread創(chuàng)建線程
- 327-線程內(nèi)存結(jié)構與設置名稱
- 328-線程休眠
- 330-使用Runnable接口方式創(chuàng)建線程
- 331-匿名內(nèi)部類方式創(chuàng)建線程
- 332-多線程共享數(shù)據(jù)資源搶奪
- 333-同步鎖解決資源共享問題
- 334-使用Lock方式進行加鎖
- 335-線程間通信
01
先了解什么是Java的四個方面
初學者先弄清這些Java的基本概念也是必不可少的,死記硬背肯定是不行的,重在理解,理解它們之間的區(qū)別與聯(lián)系,分別有哪些應用。
想想這些代碼中用到了哪些知識點,不要一味地照著書本敲代碼,而不去理解。
①Java編程語言,即語法
②Java文件格式,即各種文件夾、文件的后綴
③Java虛擬機(JVM),即處理*.class文件的解釋器
④Java應用程序接口(Java API)
02
掌握靜態(tài)方法和屬性
靜態(tài)方法和屬性用于描述某一類對象群體的特征,而不是單個對象的特征。Java中大量應用了靜態(tài)方法和屬性,這是一個通常的技巧。
但是這種技巧在很多語言中不被頻繁地使用。理解靜態(tài)方法和屬性對于理解類與對象的關系是十分有幫助的,在大量的Java規(guī)范中,靜態(tài)方法和屬性被頻繁使用。
與內(nèi)容無關
因此學習者應該理解靜態(tài)方法和屬性。Java在方法和屬性的調(diào)用上是一致的,區(qū)別只表現(xiàn)在聲明的時候,這和c++是不同的。
03
JAVA的三個技術平臺的關系
Java分為三個體系,分別為Java SE(J2SE,Java2 Platform Standard Edition,標準版)、JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企業(yè)版)、Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。
要知道java是分兩部分的:一個是編譯,一個是運行。
javac:負責的是編譯的部分,當執(zhí)行javac時,會啟動java的編譯器程序。對指定擴展名的.java文件進行編譯,生成了jvm可以識別的字節(jié)碼文件,也就是class文件,也就是java的運行程序。
java:負責運行的部分會啟動jvm加載運行時所需的類庫,并對class文件進行執(zhí)行.一個文件要被執(zhí)行,必須要有一個執(zhí)行的起始點,這個起始點就是main函數(shù)。
04
掌握JAVA代碼的基本格式
①Java注釋盡可能全面
對于方法的注釋應該包含詳細的入?yún)⒑徒Y(jié)果說明,有異常拋出的情況也要詳細敘述:類的注釋應該包含類的功能說明、作者和修改者。
②多次使用的相同變量最好歸納成常量
多處使用的相同值的變量應該盡量歸納為一個常量,方便日后的維護。
③盡量少的在循環(huán)中執(zhí)行方法調(diào)用
盡量在循環(huán)中少做一些可避免的方法調(diào)用,這樣可以節(jié)省方法棧的創(chuàng)建。
例如:
for(int i=0;i System.out.println(i); } 可以修改為: for(int i=0,size=list.size();i System.out.println(i); } ④常量的定義可以放到接口中 在Java中,接口里只允許存在常量,因此把常量放到接口中聲明就可以省去public static final這幾個關鍵詞。 ⑤ArrayList和LinkedList的選擇 這個問題比較常見。通常程序員最好能夠?qū)ist的使用場景做出評估,然后根據(jù)特性作出選擇。 ArrayList底層是使用數(shù)組實現(xiàn)的,因此隨機讀取數(shù)據(jù)會比LinkedList快很多,而LinkedList是使用鏈表實現(xiàn)的,新增和刪除數(shù)據(jù)的速度比ArrayList快不少。 ⑥String,StringBuffer和StringBuilder 這個問題也比較常見。在進行字符串拼接處理的時候,String通常會產(chǎn)生多個對象,而且將多個值緩存到常量池中。 例如: String a=“a”; String b=“b”; a=a+b; 這種情況下jvm會產(chǎn)生“a”,“b”,“ab”三個對象。而且字符串拼接的性能也很低。因此通常需要做字符串處理的時候盡量采用StringBuffer和StringBuilder來。 ⑦包裝類和基本類型的選擇 在代碼中,如果可以使用基本數(shù)據(jù)類型來做局部變量類型的話盡量使用基本數(shù)據(jù)類型,因為基本類型的變量是存放在棧中的,包裝類的變量是在堆中,棧的操作速度比堆快很多。 與內(nèi)容無關 ⑧盡早的將不再使用的變量引用賦給null 這樣做可以幫助jvm更快的進行內(nèi)存回收。當然很多人其實對這種做法并不感冒。 ⑨在finally塊中對資源進行釋放 典型的場景是使用io流的時候,不論是否出現(xiàn)異常最后都應該在finally中對流進行關閉。 ⑩在HashMap中使用一個Object作為key 在jdk的HashMap實現(xiàn)中,判斷兩個Object類型的key是否相同的標準是hashcode是否相同和equals方法的返回值。 如果業(yè)務上需要對兩個數(shù)據(jù)相同的內(nèi)存對象當作不同的key存儲到hashmap中就要對hashcode和equals方法進行覆蓋。 Java描述復雜數(shù)據(jù)結(jié)構的主要方式是集合框架。Java沒有指針,而是通過強大的集合框架描述數(shù)組、對象數(shù)組等復雜的數(shù)據(jù)結(jié)構。 與內(nèi)容無關 學好這些數(shù)據(jù)結(jié)構的描述方法對于應用程序編寫,特別是涉及到服務器方、3層結(jié)構編程至關重要。程序員在這個時候不能再用諸如數(shù)據(jù)庫結(jié)果集之類的結(jié)構描述數(shù)據(jù)了。 由于很多語言沒有這么強大的集合框架體系,很多初學者不知所措,更不知道拿來做什么用,因此應該引起足夠的重視。
