鏈接:
-
筆記目錄:畢向東Java基礎視頻教程-筆記
-
GitHub庫:JavaBXD33
測試
01-Java基礎知識
一、數據類型
基本類型
title...
(just a test....)
目錄
注:<按需!!!>目錄部分就簡單來,在內容部分可以在最開始加一個“本節關鍵字摘要”
1-語言環境搭建及使用入門
- 1.1-Java語言環境的搭建
- 1.2-hello world
- 1.3-classpath的配置
2-Java基礎語法
- 2.1-
(數據類型,自增自減,位運算(重點說一下應用場景,特別是兩值互換的三種思路))
(選擇結構:switch中選擇的類型只有四種(后期加了兩種);若某個case缺了break時的執行流程)
(循環結構:for與while的區別-初始化變量的作用域;最簡單的無限循環兩種形式)
(流程控制語句 - break:下方若有語句,則執行不到,會報錯,如果要放在前面,可加一個if判斷之類的,把break放在if中(常用思路,后面的return同理);在for嵌套時默認跳出當前,在內循環時默認內,當在內循環而希望跳出外循環時-命名內外循環后break outer;)
(典型題目:...)
3-函數
(函數的三要素:函數名,參數列表,結果類型)
(return:兩個功能-結束函數(注意這個),返回結果,因此如果return下方還有語句,則下方語句會被屏蔽執行不到,編譯報錯)
(定義函數:明確1:這個功能的結果是什么?明確返回值類型;明確2:這個功能需求未知內容是什么?明確參數列表)
(函數重載overlord:只要參數個數或者參數類型不同,與返回值類型無關;參數列表是有順序的,順序不同也算作重載)
(函數的內存調用圖解:棧-先入后出)
4-數組
(數組:是一個容器,用new新建容器)
(數組定義的格式:一維數組:兩種-格式加示例)
(數組作為引用型變量,指向為空時賦值為null而不能是0,0作為地址在計算機中是不能隨便拿來用的)
(java內存機制:java對內存的划分-5部分;棧及其特點;堆及其特點,對比;圖示略或截圖)
(圖示:如下兩個圖)
(數組操作的常見問題:數組腳標越界異常;空指針異常)
(數組長度的獲取:屬性length-arr.length可獲取到數組的長度值)
(數組的應用:)
(注:每個應用都附相應的代碼鏈接)
(應用1:多個數求和-最基本:定義變量,for遍歷數組,return;容器:一旦數多了,先存,后操作)
(應用2:求最值-注意點:max初始化為數組中的某個值(建議為第一個arr[0]),不要初始化為數組之外的(設為0而數組中都是負數時);遍歷數組時從第二個開始(從第一個開始,則自己跟自己比較);若初始化max=0,也可以拯救一下,將max作為腳標,if(arr[x]>arr[max]) {max=x})
(應用3:將數組轉成字符串:需求;思路-字符串的累加或者相連接原理;優化:temp初始化帶[,for循環中加入判斷是否是最后一個元素來決定加逗號還是方括號)
(應用4:查表法:查表法定義(筆記頁最下方);數組容器的特點;使用場景;分析需求。。。筆記那一整頁都搬運過來;例子一組數(有規律的數可以造出來不用存,無規律數列給予有序編號作為索引;星期的查表法-魯棒性-return與拋出異常的對比))
(應用5:轉十六進制數組版:問題-順序反了,解決:每運算出一位,不要打印,先存;反着存;關鍵點:定義為char數組,每計算出一位進行判斷並轉為char類型,反着存需要定義索引index並做減減運算,額外定義一個toString函數將字符數組轉為字符串而不是在toHex函數中打印,“0x”加在toHex函數的return位置而不是toString函數中)
(應用6:轉十六進制去零版:去零的位置-不是在得到字符數組之后再遍歷判斷,而是更早,在右移運算階段就進行判斷,當剩余為0時即停止;索引的設置:初始化為數組長度,並在while循環中,當條件滿足時才自減arr[--index],保證索引index最終指向的是數組中非空位的最后一位,並在toString的參數列表中加入索引,則得到的字符串沒有空位,是非常舒適的結果)
(應用7:轉十六進制查表版:首先建立表;在循環的計算階段把轉換改為直接查表,省去了判斷,非常厲害arr;關鍵步驟:arr[--index]=chs[temp];)
(應用8:進制轉換通用版:定義總的進制轉換函數trans,然后將其中不同進制的不同參數加入參數列表;引入API幫助文檔,可以直接用java定義好的工具,示例)
(排序:排序有七種算法,最快的是希爾排序)
(應用9:選擇排序:思想:大圈套小圈-拿第一個腳標跟剩余元素比較,獲取最值並存放到第一個腳標位置,作為一輪,之后拿第二個腳標遍歷比較;圖解;外循環-多條線的起點,x<arr.length-1因為如圖取0-4即是五次,內循環-從起點發出的箭頭;返回值為void是因為數組作為引用型變量,調用時把主函數中的地址傳給函數,操作后原地址指向的數組已經變了,與基本數據類型的處理相區別)
(應用10:冒泡排序:思想:大圈套小圈-第一輪從0腳標開始,腳標相鄰的兩個數比較,小的放前,大的放后,得到最大值放在最后一個腳標位置(之后不必再比),第二輪繼續從0腳標開始,相鄰兩數比較,遍歷到最后一個腳標的前一個為止,得到第二大的數放在倒數第二個腳標位置,以此類推;圖解;外循環-控制行數x<arr.length-1,需要減1,因為如圖第一行比較5次,0-4就是5次,內循環-控制每一行的內容,y<arr.length-1-x,-1防止腳標越界,-x控制每行遞減的最大值;實際開發中用java寫好的功能即可,優化好的,並且自己寫容易錯:import java.util.Arrays; Arrays.sort(arr);)
(應用11:位置置換代碼的抽取:兩個排序中都包含了位置置換代碼,為提高復用性,抽取出來;返回值為void;參數列表注意不要遺漏了數組arr,否則換完也沒有效果)
(應用12:普通查找方式:遍歷,效率低;返回值類型-int,索引;參數列表-數組arr和查找目標key;腳標不存在時取一個負數(腳標從0開始,非負,取-1是規范寫法) return -1)
(應用13:二分/折半查找方式:思路:1234;前提-必須有序,無序用普通查找,不建議先對無序數組排序后使用二分,因為這樣腳標值其實變了;按腳標折中,中間值求法1-mid=(min+max)/2,求法2-位運算更快mid=(min+max)>>1,注意是整除,結果是小數時舍棄小數位;注意點-1-100的數,盲猜50,小,則下一步從51-100里取,而不是50-100,端點值比較過了,去掉;所查找的數不存在時-通過判斷是否min<=max,錯位時不再折半返回-1;代碼體現:最外側while判斷條件的兩種形式-一種判斷是否與中間值相等(while(arr[mid]!=key)),一種判斷頭尾腳標有無距離(while(min<=max)))
(二維數組:定義-三種格式(不同格式對應不同的圖解和打印含義,分別說一下);內存圖解;打印顯示含義-三種情況分析;二維數組的長度-arr.length表示二維數組的長度(即有幾個一維數組)arr[i].length表示其中某一個一維數組i的長度)
(定義格式1-圖解)
(定義格式2-圖解1)
(定義格式2-圖解2-對一維數組賦值后)
(數組練習:)
(練習1:數組反轉;思路:頭尾互換,不斷移動腳標,直到兩個腳標交叉)
(練習2:在有序數組中插入元素時獲取插入點;思路:有序數組查找元素用二分查找,元素不在數組中是return min,分析三種不同情況證明確實是min;實際開發中可直接用java自定義的二分查找Arrays.binarySearch(arr, key),其中return -(min+1),查找不到時返回插入點並表示為負數,+1為了區分當腳標為0時仍表示為負數)
(基礎部分小結:編程思想)
(在注釋中寫明分析思路:需求-思路-步驟-相應代碼-測試)
(函數復用性:函數復用性-函數抽取封裝,主函數中只放需要執行的代碼)
(對象復用性:多個類中需要相同功能時,將所需功能封裝到指定類中,使用時只要找到功能所屬的類就可以了-同為引用型變量,類與數組一樣,使用前需要先new一個實體出來才能繼續用,示例關鍵語句(那兩句);功能類中可以定義多個相似或集中的功能;使用時不需要考慮功能類中的具體代碼,只要用生成的.class文件即可--引出“對象”:ArrayTool tool=new ArrayTool();//這個就是對象,類就是對象;實際開發中用java寫好的功能,調用即可Arrays.sort(arr);)
ps:
- 不確定性在java里是不允許存在的(例如函數重載時參數列表相同會報錯)
- 廢話在java里是不允許存在的(例如break或者return下方永遠都執行不到的語句會報錯)
1-語言環境搭建及使用入門
-
1.1-Java語言環境的搭建
-
1.2-hello world
-
1.3-classpath的配置