版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java學(xué)習(xí)筆記Java相關(guān)課程系列筆記之一筆記內(nèi)容說明4月18日的五天Java訓(xùn)練營(劉英謙老師主講,占筆記內(nèi)容10%);Java基礎(chǔ)和面向?qū)ο螅▌⑸n松老師主講,占筆記內(nèi)容40%);Java SE核心 I 和Java SE 核心 II(范傳奇老師主講,占筆記內(nèi)容40%);其他視頻及書籍資料(占筆記內(nèi)容10%)目 錄一、 Java技術(shù)基礎(chǔ)11.1編程語言11.2 Java的特點11.3 Java開發(fā)環(huán)境11.4 Java開發(fā)環(huán)境配置21.5 Linux命令與相關(guān)知識21.6 Eclipse/Myeclipse程序結(jié)構(gòu)3二、 Java語言基礎(chǔ)42.1基礎(chǔ)語言要素42.2八種基本數(shù)據(jù)類型42.3常
2、量和變量52.4運算符與表達(dá)式52.5編程風(fēng)格62.6流程控制語句72.7數(shù)組82.8字符串82.9方法三要素92.10插入排序92.11冒泡排序92.12冒泡排序:輕氣泡上浮的方式102.13二分法查找102.14 Java系統(tǒng)API方法調(diào)用112.15二進(jìn)制基礎(chǔ)112.16 Java基礎(chǔ)其他注意事項11三、 面向?qū)ο?33.1類133.2對象133.3包143.4方法及其調(diào)用143.5引用143.6訪問控制(封裝)143.7構(gòu)造器143.8 super()、super和 this()、this153.9重載和重寫163.10繼承173.11 static203.12 final213.13
3、多態(tài)223.14抽象類223.15接口233.16內(nèi)部類233.17匿名類243.18二維數(shù)組和對象數(shù)組253.19其他注意事項26四、 Java SE核心I274.1 Object類274.2 String類284.3 StringUtils類304.4 StringBuilder類304.5正則表達(dá)式314.6 Date類324.7 Calendar類324.8 SimpleDateFormat類334.9 DateFormat類334.10包裝類344.11 BigDecimal類354.12 BigInteger類354.13 Collection集合框架354.14 List集合的實
4、現(xiàn)類ArrayList和LinkedList364.15 Iterator迭代器394.16泛型404.17增強型for循環(huán)404.18 List高級數(shù)據(jù)結(jié)構(gòu):Queue隊列414.19 List高級數(shù)據(jù)結(jié)構(gòu):Deque棧414.20 Set集合的實現(xiàn)類HashSet424.21 Map集合的實現(xiàn)類HashMap434.22單例模式和模版方法模式45五、 Java SE核心II465.1 Java異常處理機制465.2 File文件類485.3 RandomAccessFile類505.4基本流:FIS和FOS525.5緩沖字節(jié)高級流:BIS和BOS535.6基本數(shù)據(jù)類型高級流:DIS和DOS
5、535.7字符高級流:ISR和OSW545.8緩沖字符高級流:BR和BW555.9文件字符高級流:FR和FW565.10 PrintWriter575.11對象序列化575.12 Thread線程類及多線程585.13 Socket網(wǎng)絡(luò)編程625.14線程池645.15雙緩沖隊列641、 Java技術(shù)基礎(chǔ)1.1編程語言機器語言:0 1在硬件直接執(zhí)行匯編語言:助記符高級語言: (Java運行比C/C+慢)1)面向過程的高級語言:程序設(shè)計的基本單位為函數(shù),如:C/C+語言。2)面向?qū)ο蟮母呒壵Z言:程序設(shè)計的基本單位為類,如:Java、C#。1.2 Java的特點平臺無關(guān)性、簡單性、面向?qū)ο蟆⒔研?/p>
6、、多線程、自動內(nèi)存管理。平臺無關(guān)性:指Java語言平臺無關(guān),而Java的虛擬機卻不是,需要下載對應(yīng)平臺JVM虛擬機的。自動內(nèi)存管理:對臨時存儲的數(shù)據(jù)自動進(jìn)行回收,釋放內(nèi)存。如:引用類型的變量沒有指向時,被回收;程序執(zhí)行完后,局部變量被回收。1.3 Java開發(fā)環(huán)境Java Developement KitJava開發(fā)工具包,簡稱JDK,是由Sun公司提供的一個免費的Java開發(fā)工具,編程人員和最終用戶可以利用這個工具來編譯、運行Java程序。目前版本有JDK1.0、JDK1.1、JDK1.2、JDK1.3、JDK1.4、JDK1.5(J2SE5.0)、JDK1.6(J2SE6.0)、JDK1.
7、7(J2SE7.0)。JDK結(jié)構(gòu):JDK |-開發(fā)工具(Tools)命令:java、javac、jar、rmic . |- JRE(Java基本運行環(huán)境) |-系統(tǒng)API庫,系統(tǒng)類庫 | 系統(tǒng)帶來的標(biāo)準(zhǔn)程序庫,標(biāo)準(zhǔn)API |- J VM java虛擬機 java 語言的執(zhí)行環(huán)境1.4 Java開發(fā)環(huán)境配置安裝完JDK之后,不能立刻使用,需要設(shè)置環(huán)境變量:1)設(shè)置PATH:D:Javajdk1.6.0bin(指向JDK中bin文件夾,有各種編譯命令)。2)CLASSPATH:告訴Java程序去哪里查找第三方和自定義類,如果 .class文件和類源文件在同一文件夾內(nèi),則不需要配置classpath
8、,后續(xù)有包,則需要。AWindows:在命令行執(zhí)行set CLASSPATH=E:workspace1304bin (臨時環(huán)境配置)java day02.Demo1u 注意事項:v E: set classpath= c: (不加分號就不找當(dāng)前路徑) = . ; c: ; d: ;(先找classpath,若無,再找當(dāng)前路徑)v C、D兩盤有同名 . class 文件,classpath設(shè)置為D盤,而命令行窗口當(dāng)前盤符為C盤,則JVM現(xiàn)找classpath路徑,后找當(dāng)前路徑。BLinux:在控制臺執(zhí)行設(shè)置CLASSPATH環(huán)境變量,指向package所在的目錄,一般是項目文件夾中的bin目錄。
9、執(zhí)行java package.ClassName (包名必須寫)。 export CLASSPATH=/home/soft01/workspace/1304/bin (臨時環(huán)境配置) java day01.HelloWorld java -cp /home/soft01/workspace/1304/bin day01.HelloWorld(二合一)u 注意事項:v Windows根目錄是反斜線:v Linux根目錄是斜線:/1.5 Linux命令與相關(guān)知識1)Linux無盤符,只有一個根目錄(root)2)終端 = 控制臺 = 命令行窗口3)pwd:打印當(dāng)前工作目錄,顯示當(dāng)前工作目錄的位置4
10、)ls:列表顯示目錄內(nèi)容,默認(rèn)顯示當(dāng)前目錄內(nèi)容5)cd:改變當(dāng)前工作目錄;cd后不加參數(shù)=返回home文件夾;cd :返回home; cd /:切換到根目錄;cd . :返回上一層目錄(相對的);6)mkdir:創(chuàng)建文件夾(目錄) 注意:目錄 = 文件夾7)rm:刪除文件;rm xx xx:可刪多個文件; rm rf xx:-為減號,r表遞歸,f表強制8)cat xx:顯示文本文件內(nèi)容9)啟動Java開發(fā)工具:cd/opt/eclipse ./eclipse . 表當(dāng)前目錄下10)絕對路徑: /home (以 / 開始為絕對路徑,相對于根目錄) 相對路徑:home (相對于當(dāng)前工作目錄)11)
11、home(用戶主目錄,用戶的家):/home/username 如:/home/soft0112)主目錄(home):有最大訪問權(quán)限:什么都能干,增刪改查、建目錄等 其他地方:一般只能查看,不能增刪改查、創(chuàng)建目錄等1.6 Eclipse/Myeclipse程序結(jié)構(gòu)Project項目文件 |- src源文件| |- Package包|-.java源文件 |- bin |- Package包|- .class字節(jié)碼程序u 注意事項:v Myeclipse5.5消耗少,Myeclipse6.5最穩(wěn)定2、 Java語言基礎(chǔ)2.1基礎(chǔ)語言要素1)標(biāo)識符:給類、方法、變量起的名字A必須以字母或下劃線或 $
12、 符號開始,其余字符可以是字母、數(shù)字、$ 符號和下劃線。B只能包含兩個特殊字符,即下劃線 _ 和美元符號 $ 。不允許有任何其他特殊字符。C標(biāo)識符不能包含空格。D區(qū)分大小寫。2)關(guān)鍵字:只有系統(tǒng)才能用的標(biāo)識符u 注意事項:v true、false、null不是關(guān)鍵字!是字面量。v main不是關(guān)鍵字!但是是一個特殊單詞,可以被JVM識別,主函數(shù)是固定格式,作為程序的入口。3) 注釋:單行注釋:/ 多行注釋:/* */ 文檔注釋:/*/u 注意事項:開發(fā)中類前、屬性前、方法前,必須有文檔注視。2.2八種基本數(shù)據(jù)類型1)四種整數(shù)類型(byte、short、int、long):byte:8位,用于表
13、示最小數(shù)據(jù)單位,如文件中數(shù)據(jù),-128127short:16位,很少用,-32768 32767int:32位、最常用,-231-1231 (21億)long:64位、次常用u 注意事項:v int i=5; / 5叫直接量(或字面量),即直接寫出的常數(shù)。v 整數(shù)字面量默認(rèn)都為int類型,所以在定義的long型數(shù)據(jù)后面加L或l。v 小于32位數(shù)的變量,都按int結(jié)果計算。v 強轉(zhuǎn)符比數(shù)學(xué)運算符優(yōu)先級高。見常量與變量中的例子。2)兩種浮點數(shù)類型(float、double):float:32位,后綴F或f,1位符號位,8位指數(shù),23位有效尾數(shù)。double:64位,最常用,后綴D或d,1位符號位,
14、11位指數(shù),52位有效尾數(shù)。u 注意事項:v 二進(jìn)制浮點數(shù):1010100010=101010001.0*2=10101000.10*210(2次方)=1010100.010*211(3次方)= . 1010100010*21010(10次方)v 尾數(shù): . 1010100010 指數(shù):1010 基數(shù):2v 浮點數(shù)字面量默認(rèn)都為double類型,所以在定義的float型數(shù)據(jù)后面加F或f;double類型可不寫后綴,但在小數(shù)計算中一定要寫D或X.X。v float 的精度沒有l(wèi)ong高,有效位數(shù)(尾數(shù))短。v float 的范圍大于long 指數(shù)可以很大。v 浮點數(shù)是不精確的,不能對浮點數(shù)進(jìn)行精
15、確比較。3)一種字符類型(char):char:16位,是整數(shù)類型,用單引號括起來的1個字符(可以是一個中文字符),使用Unicode碼代表字符,0216-1(65535)。u 注意事項:v 不能為0個字符。v 轉(zhuǎn)義字符:n 換行 r 回車 t Tab字符 雙引號 表示一個v 兩字符char中間用“+”連接,內(nèi)部先把字符轉(zhuǎn)成int類型,再進(jìn)行加法運算,char本質(zhì)就是個數(shù)!二進(jìn)制的,顯示的時候,經(jīng)過“處理”顯示為字符。4)一種布爾類型(boolean):true真 和false假。5)類型轉(zhuǎn)換: char-自動轉(zhuǎn)換:byte-short-int-long-float-double 強制轉(zhuǎn)換:會
16、損失精度,產(chǎn)生誤差,小數(shù)點以后的數(shù)字全部舍棄。 容易超過取值范圍。2.3常量和變量變量:內(nèi)存中一塊存儲空間,可保存當(dāng)前數(shù)據(jù)。在程序運行過程中,其值是可以改變的量。1)必須聲明并且初始化以后使用(在同一個作用域中不能重復(fù)聲明變量)!2)變量必須有明確類型(Java是強類型語言)。3)變量有作用域(變量在聲明的地方開始,到塊結(jié)束)。變量作用域越小越好。4)局部變量在使用前一定要初始化!成員變量在對象被創(chuàng)建后有默認(rèn)值,可直接用。5)在方法中定義的局部變量在該方法被加載時創(chuàng)建。常量:在程序運行過程中,其值不可以改變的量。u 注意事項:v 字面量、常量和變量的運算機制不同,字面量、常量由編譯器計算,變量
17、由運算器處理,目的是為了提高效率。eg:小于32位數(shù)的字面量處理byte b1 = 1; byte b2 = 3;/byte b3 = b1+b2;/編譯錯誤,按照int結(jié)果,需要強制轉(zhuǎn)換byte b3 = (byte)(b1+b2);/byte b3 = (byte)b1+(byte)b2;/編譯錯誤!兩個byte、short、char相加還是按int算System.out.println(b3); /選擇結(jié)果:A編譯錯誤B運行異常 C 4 D b3byte b4 = 1+3;/字面量運算,編譯期間替換為4,字面量4/byte b4 = 4; 不超過byte就可以賦值v 不管是常量還是變量,
18、必須先定義,才能夠使用。即先在內(nèi)存中開辟存儲空間,才能夠往里面放入數(shù)據(jù)。v 不管是常量還是變量,其存儲空間是有數(shù)據(jù)類型的差別的,即有些變量的存儲空間用于存儲整數(shù),有些變量的存儲空間用于存儲小數(shù)。2.4運算符與表達(dá)式1)數(shù)學(xué)運算:+-*/%+-u 注意事項:v + - * / 兩端的變量必須是同種類型,并返回同種類型。v % 取余運算,負(fù)數(shù)的余數(shù)符號與被模數(shù)符號相同, - 1 % 5 = - 1,1 % - 5 = 1;Num % n,n0,結(jié)果范圍0,n),是周期函數(shù)。v 注意整除問題:1 / 2 = 0(整數(shù)的除法是整除)1.0 / 2 = 0.5 1D / 2 = 0.5v 單獨的前、后自
19、增或自減是沒區(qū)別的,有了賦值語句或返回值,則值不同!eg1:自增自減int a = 1; a = a+; System.out.println(a的值:+a);第1步:后+,先確定表達(dá)式a+的值(當(dāng)前a的值) a+ -1 第2步:+,給a加1 a -2第3步:最后賦值運算,把a+整個表達(dá)式的值賦值給a a -1a被賦值兩次,第1次a = 2,第2次把1賦值給1eg2:自增自減x,y,z分別為5,6,7 計算z + = - y * z+ ;/ x = 5,y = 5,z = 42z = z + - y * z+ 42 = 7 + 5 * 7 從左到右入棧,入的是值eg3:取出數(shù)字的每一位d =
20、num%10;/獲取num的最后一位數(shù)num/=10; /消除num的最后一位2) 位運算:& | (取反) (異或) u 注意事項:v 一個數(shù)異或同一個數(shù)兩次,結(jié)果還是那個數(shù)。v |:上下對齊,有1個1則為1;&:上下對齊,有1個0則為0;(都為二進(jìn)制)v &相當(dāng)于乘法,| 相當(dāng)于加法;&:有0則為0,| :有1則為1,:兩數(shù)相同為0,不同為1。3)關(guān)系運算符: = b ? a : i j ? i : j 相當(dāng)于 a b ? a : ( i j ? i : j )v 三目運算符中:第二個表達(dá)式和第三個表達(dá)式中如果都為基本數(shù)據(jù)類型,整個表達(dá)式的運算結(jié)果由容量高的決定。如:int x = 4;x
21、 4 ? 99.9 : 9; 99.9是double類型,而9是int類型,double容量高,所以最后結(jié)果為9.9。7) 運算符優(yōu)先級:括號 自增自減 ! 算數(shù)運算符 位移運算 關(guān)系運算 邏輯運算 條件運算 賦值運算2.5編程風(fēng)格MyEclipse/Eclipse中出現(xiàn)的紅色叉叉:編譯錯誤編譯錯誤:java編譯器在將Java源代碼編譯為class文件的過程出現(xiàn)的錯誤,一般是語法使用錯誤!當(dāng)有編譯錯誤時候,是沒有class文件產(chǎn)生,也就不能運行程序。Java 程序結(jié)構(gòu):2.6流程控制語句1)選擇控制語句if語句:if 、if-else、if-else-if:可以處理一切分支判斷。格式:if(判
22、斷)、if(判斷)else、if(判斷)else if(判斷)switch語句:switch(必須整數(shù)類型)case 常量1:; case 常量2: ; . u 注意事項:v int類型指:byte、short、int,只能寫long類型,要寫也必須強轉(zhuǎn)成int類型;而byte、short為自動轉(zhuǎn)換成int。v swtich-case:若case中無符合的數(shù),并且default寫在最前(無break時),則為順序執(zhí)行,有break或 則退出。v swtich-case:若case中無符合的數(shù),并且default寫在最后,則執(zhí)行default。v swtich-case:若case中有符合的數(shù),
23、并且default寫在最后,并且default前面的case沒有break時,default也會執(zhí)行。2)循環(huán)控制語句for:最常用,用在與次數(shù)有關(guān)的循環(huán)處理,甚至只用for可以解決任何循環(huán)問題。u 注意事項:for中定義的用于控制次數(shù)的循環(huán)變量,只在for中有效,for結(jié)束則循環(huán)變量被釋放(回收)。while:很常用,用在循環(huán)時候要先檢查循環(huán)條件再處理循環(huán)體,用在與次數(shù)無關(guān)的情況。如果不能明確結(jié)束條件的時候,先使用while(true),在適當(dāng)條件使用if語句加break結(jié)束循環(huán)。do-while:在循環(huán)最后判斷是否結(jié)束的循環(huán)。如:使用while(true) 實現(xiàn)循環(huán)的時候,結(jié)束條件brea
24、k在while循環(huán)體的最后,就可以使用 do-while 。do-while 的結(jié)束條件經(jīng)常是“否定邏輯條件”,不便于思考業(yè)務(wù)邏輯,使用的時候需要注意??梢岳脀hile(true)+ break 替換。循環(huán)三要素:A循環(huán)變量初值 B循環(huán)條件 C循環(huán)變量增量(是循環(huán)趨于結(jié)束的表達(dá)式)for和while循環(huán)體中僅一條語句,也要補全 ,當(dāng)有多條語句,且不寫 時,它們只執(zhí)行緊跟著的第一條語句。 循環(huán)的替換: while(布爾表達(dá)式) 等價 for(;布爾表達(dá)式;) while(true) 等價 for(;) while(true) + break 替換 dowhile(布爾表達(dá)式); for(;)
25、+ break 替換 dowhile(布爾表達(dá)式);3)跳轉(zhuǎn)控制語句continue:退出本次循環(huán),直接執(zhí)行下一次循環(huán)break:退出所有循環(huán)2.7數(shù)組類型一致的一組數(shù)據(jù),相當(dāng)于集合概念,在軟件中解決一組,一堆XX數(shù)據(jù)時候使用數(shù)組。1)數(shù)組變量:是引用類型變量(不是基本變量)引用變量通過數(shù)組的內(nèi)存地址位置引用了一個數(shù)組(數(shù)組對象),即栓到數(shù)組對象的繩子。eg:數(shù)組變量的賦值 int ary = new int3;/ ary-0,0,0-ary1 int ary1 = ary;/ ary 的地址賦值給ary1,ary 與 ary1 綁定了同一個數(shù)組 /ary1 與 ary11 是同一個元素,數(shù)組
26、變量不是數(shù)組(數(shù)組對象)2)數(shù)組(數(shù)組對象)有3種創(chuàng)建(初始化)方式:new int10000 給元素數(shù)量,適合不知道具體元素,或元素數(shù)量較多時 new int3,4,5 不需要給出數(shù)量,直接初始化具體元素適合知道數(shù)組的元素。 2,3,4 靜態(tài)初始化,是簡化版,只能用在聲明數(shù)組變量的時候直接初始化,不能用于賦值等情況。eg:數(shù)組初始化int ary1 = new int2,3,4;/創(chuàng)建數(shù)組時候直接初始化元素int ary2 = 2,3,4;/數(shù)組靜態(tài)初始化,只能在聲明變量的同時直接賦值/ary2 = 4,5,6;/編譯錯誤,不能用于賦值等情況ary2 = new int4,5,6;3)數(shù)組元
27、素的訪問:數(shù)組長度:長度使用屬性訪問,ary.length 獲取數(shù)組下標(biāo)。數(shù)組下標(biāo):范圍:0 length-1就是0,length),超范圍訪問會出現(xiàn)下標(biāo)越界異常。使用index 訪問數(shù)組元素:ary2。迭代(遍歷):就是將數(shù)組元素逐一處理一遍的方法。4)數(shù)組默認(rèn)初始化值:根據(jù)數(shù)組類型的不同,默認(rèn)初始化值為:0(整數(shù))、0.0(浮點數(shù))、false(布爾類型)、u0000(char字符類型,顯示無效果,相當(dāng)于空格,編碼為0的字符,是控制字符,強轉(zhuǎn)為int時顯示0)、null(string類型,什么都沒有,空值的意思)。5)數(shù)組的復(fù)制:數(shù)組變量的賦值,是并不會復(fù)制數(shù)組對象,是兩個變量引用了同一個
28、數(shù)組對象。數(shù)組復(fù)制的本質(zhì)是創(chuàng)建了新數(shù)組,將原數(shù)組的內(nèi)容復(fù)制過來。6)數(shù)組的擴容:創(chuàng)建新數(shù)組,新數(shù)組容量大于原數(shù)組,將原數(shù)組內(nèi)容復(fù)制到新數(shù)組,并且丟棄原數(shù)組,簡單說:就是更換更大的數(shù)組對象。System.arraycopy() 用于復(fù)制數(shù)組內(nèi)容,簡化版的數(shù)組復(fù)制方法:Arrays.copyOf()方法,但需JKD1.5+。2.8字符串字符串(string):永遠(yuǎn)用“”雙引號(英文狀態(tài)下),用字符串連接任何數(shù)據(jù)(整數(shù)),都會默認(rèn)的轉(zhuǎn)化為字符串類型。字符串與基本數(shù)據(jù)類型鏈接的問題:如果第一個是字符串那么后續(xù)就都按字符串處理,如System.out.println(Result)+6 + 6 );那么
29、結(jié)果就是(Result)66,如果第一個和第二個第n個都是基本數(shù)據(jù),第n+1是字符串類型,那么前n個都按加法計算出結(jié)果在與字符串連接。如下例中的System.out.println(1+2+”java”+3+4);結(jié)果為3java34。eg:字符串前后的“+”都是連接符!不是加法運算符!System.out.println(A+B);/ABSystem.out.println(A+B);/131System.out.println(1+2+”java”+3+4);/3java34u 注意事項:比較字符串是否相等必須使用equals方法!不能使用=。1.equals(cmd) 比cmd.equa
30、ls(1) 要好。2.9方法三要素方法:method(函數(shù)function = 功能) y=f(x) 1)方法的主要三要素:方法名、參數(shù)列表、返回值。2)什么是方法:一個算法邏輯功能的封裝,是一般完成一個業(yè)務(wù)功能,如:登錄系統(tǒng),創(chuàng)建聯(lián)系人,簡單說:方法是動作,是動詞。3)方法名:一般按照方法實現(xiàn)的功能定名,一般使用動詞定義,一般使用小寫字母開頭,第二個單詞開始,單詞首字母大寫。如:createContact() 。4)參數(shù)列表:是方法的前提條件,是方法執(zhí)行依據(jù),是數(shù)據(jù)。如: login(String id, String pwd) ,參數(shù)的傳遞看定義的類型及順序,不看參數(shù)名。5)方法返回值:功
31、能執(zhí)行的結(jié)果,方法必須定義返回值,并且方法中必須使用return語句返回數(shù)據(jù);如果無返回值則定義為void,此時return語句可寫可不寫;返回結(jié)果只能有一個,若返回多個結(jié)果,要用數(shù)組返回(返回多個值)。u 注意事項:遞歸調(diào)用:方法中調(diào)用了方法本身,用遞歸解決問題比較簡練,只需考慮一層邏輯即可!但是需要有經(jīng)驗。一定要有結(jié)束條件!如:f(1)=1; 遞歸層次不能太深。總之:慎用遞歸!2.10插入排序?qū)?shù)組中每個元素與第一個元素比較,如果這個元素小于第一個元素,則交換這兩個元素循環(huán)第1條規(guī)則,找出最小元素,放于第1個位置經(jīng)過n-1輪比較完成排序。 for(inti = 1; i = 0 & k a
32、rrj; j-) arrj + 1 = arrj;/ 移動元素 arrj + 1 = k;/ 插入元素 System.out.println(Arrays.toString(arr); 2.11冒泡排序比較相鄰的元素,將小的放到前面。 for(inti = 0; i arr.length - 1; i+) boolean isSwap = false; for (int j = 0; j arrj + 1) int t = arrj; arrj = arrj + 1; arrj + 1 = t; isSwap = true; if (!isSwap) break; System.out.pri
33、ntln(Arrays.toString(arr); 2.12冒泡排序:輕氣泡上浮的方式冒泡排序法可以使用大氣泡沉底的方式,也可以使用輕氣泡上浮的方式實現(xiàn)。如下為使用輕氣泡上浮的方式實現(xiàn)冒泡排序算法。 for (int i = 0; i i; j-) if (arrj arrj - 1) int t = arrj; arrj = arrj - 1; arrj - 1 = t; sSwap = true; if (!isSwap) break; System.out.println(Arrays.toString(arr); 2.13二分法查找 intlow = 0;inthigh = arr.
34、length - 1;intmid = -1; while(low = high) mid = (low + high) / 2; if (arrmid value) high = mid - 1; else break; if (low k,在前半段中繼續(xù)進(jìn)行二分查找;若arrmid k,則在后半段中繼續(xù)進(jìn)行二分查找。假如有一組數(shù)為3、12、24、36、55、68、75、88要查給定的值k=24??稍O(shè)三個變量low、mid、high分別指向數(shù)據(jù)的上界,中間和下界,mid=(low+high)/2.1)開始令low=0(指向3),high=7(指向88),則mid=3(指向36)。因為kmid
35、,故確定應(yīng)在后半段中查找。3)令新的low=mid+1=2(指向24),而high=2(指向24)不變,則新的mid=2,此時k=arrmid,查找成功。如果要查找的數(shù)不是數(shù)列中的數(shù),例如k=25,當(dāng)?shù)谒拇闻袛鄷r,kmid2,在后邊半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出現(xiàn)lowhigh的情況,表示查找不成功。2.14 Java系統(tǒng)API方法調(diào)用Arrays類,是數(shù)組的工具類,包含很多數(shù)組有關(guān)的工具方法。如:1)toString() 連接數(shù)組元素為字符串,方便數(shù)組內(nèi)容輸出。2)equals 比較兩個數(shù)組序列是否相等。3)sort() 對數(shù)組進(jìn)行排序,
36、小到大排序。4)binarySearch(names, Tom) 二分查找,必須在有序序列上使用。2.15二進(jìn)制基礎(chǔ)1)計算機中一切數(shù)據(jù)都是2進(jìn)制的! 基本類型,對象,音頻,視頻。2)10進(jìn)制是人類習(xí)慣,計算按照人類習(xí)慣利用算法輸入輸出。 10 -算法轉(zhuǎn)化- 1010(2) 1010 -算法轉(zhuǎn)化- 10 3)16進(jìn)制是2進(jìn)制的簡寫,16進(jìn)制就是2進(jìn)制!4)計算機硬件不支持正負(fù)號,為了解決符號問題,使用補碼算法,補碼規(guī)定高位為1則為負(fù)數(shù),每位都為1則為-1,如1111 1111 = -1 = 0xff5)二進(jìn)制數(shù)右移:相當(dāng)于數(shù)學(xué) / 2(基數(shù)),且正數(shù)高位補0,負(fù)數(shù)高位補1;二進(jìn)制字左移:相當(dāng)于
37、數(shù)學(xué) / 2(基數(shù)),且不論正負(fù),高位都補0。6)注意掩碼運算:把擴展后前面為1的情況除去,與0xff做與運算。eg1:二進(jìn)制計算int max = 0x7fffffff; long l = max + max + 2; System.out.println( l );/ 0eg2:二進(jìn)制運算(拼接與拆分)int b1 = 192; int b2 = 168; int b3 = 1; int b4 = 10; int color = 0xD87455;int ip = (b124) + (b216) + (b38) + b4; / 或者ip = (b124) | (b216) | (b3 8)
38、&0xff; / 116 int r = (color 16)&0xff;/ 2162.16 Java基礎(chǔ)其他注意事項v Java程序嚴(yán)格區(qū)分大小寫。v 類名,每個單詞首字母必須大寫(公司規(guī)范!)。v 一個Java應(yīng)用程序,有且只有一個main方法,作為程序的入口點。v 每一條Java語句必須以分號結(jié)束。v 類定義關(guān)鍵字class前面可以有修飾符(如public),如果前面的修飾符是public,該類的類名必須要與這個類所在的源文件名稱相同。v 注意程序的縮進(jìn)。v double a = new double2; /語法可以,但企業(yè)中一定不要這么寫,Java中建議放前面。v Java中所有范圍參
39、數(shù)都是包含0,不包含結(jié)束,如int n = random.nextInt(26); /生成0到26范圍內(nèi)的隨機數(shù),不包括26。v 任何數(shù)據(jù)在內(nèi)存中都是2進(jìn)制的數(shù)據(jù),內(nèi)存中沒有10進(jìn)制16進(jìn)制。v int n = Integer.parseInt(str);/將字符串- int 整數(shù)。v System.out.println(Long.toBinaryString(maxL); Long類型用Long.XXXX 。v 程序:數(shù)據(jù)+算法 數(shù)據(jù)即為變量,算法為數(shù)據(jù)的操作步驟,如:順序、選擇、循環(huán)。v 字符串按編碼大小排序。3、 面向?qū)ο驩bject:對象,東西,一切皆對象 = = 啥都是東西面向?qū)ο?/p>
40、核心:封裝、繼承、多態(tài)。3.1類1) 是同類型東西的概念,是對現(xiàn)實生活中事物的描述,映射到Java中描述就是class定義的類。類是對象的模板、圖紙,是對象的數(shù)據(jù)結(jié)構(gòu)定義。簡單說就是“名詞”。2) 其實定義類,就是在描述事物,就是在定義屬性(變量)和方法(函數(shù))。3) 類中可以聲明:屬性,方法,構(gòu)造器;屬性(變量)分為:實例變量,局部變量;實例變量:用于聲明對象的結(jié)構(gòu)的,在創(chuàng)建對象時候分配內(nèi)存,每個對象有一份!實例變量(對象屬性)在堆中分配,并作用于整個類中,實例變量有默認(rèn)值,不初始化也能參與運算;局部變量在棧中分配,作用于方法或語句中,必須初始化,有值才能運算。4) 類與類之間的關(guān)系:關(guān)聯(lián):
41、一個類作為另一個類的成員變量:需要另一個類來共同完成。class A pulic B b class B 繼承:class B extends A class A 依賴:個別方法和另一個類相關(guān)。class A public void f(B b) /參數(shù)里有B public B g() /返回值里有B class B 5)null與空指針異常:引用類型變量用于存放對象的地址,可以給引用類型賦值為null,表示不指向任何對象。當(dāng)某個引用類型變量為null時無法對對象實施訪問(因為它沒有指向任何對象)。此時,如果通過引用訪問成員變量或調(diào)用方法,會產(chǎn)生NullPointerException空指針異
42、常。u 注意事項:除了8中基本類型,其他都是引用類型變量(也叫句柄)。3.2對象是這類事物實實在在存在的個體!利用類做為模板創(chuàng)建的個體實例,本質(zhì)是數(shù)據(jù)。匿名對象:使用方式一:當(dāng)對對象的方法只調(diào)用一次時,可用匿名對象來完成,這樣比較簡化。如果對一個對象進(jìn)行多個成員調(diào)用,則必須給這個對象起個名字。 使用方式二:可以將匿名對象作為實際參數(shù)進(jìn)行傳遞。3.3包1) 包名必須是小寫,多個單詞用“”隔開。在同一個包中,不能有同名的類!2) 只要在同一個包中,則可直接用extends(類型互知道在哪),若不在同一個包中,則用import導(dǎo)入。3.4方法及其調(diào)用是用于對當(dāng)前對象數(shù)據(jù)進(jìn)行算法計算,實現(xiàn)業(yè)務(wù)功能。方
43、法是對象的功能,對象的動作,對象的行為。總之是動詞!方法名沒有規(guī)定,建議首單詞為小寫動詞,其他單詞首字母大寫。必須定義返回值!可有無參數(shù)方法。方法調(diào)用只有兩種方式:對象引用調(diào)用類名調(diào)用(即靜態(tài)類時)。3.5引用是對個體的標(biāo)識名稱。1)是代詞,是對象的引用,就像拴著對象的繩子。2)引用本身不是對象!引用指代了對象!3)引用的值是對象的地址值(或叫句柄),通過地址值引用了對象。4)引用的值不是對象!u 注意事項:“”叫取成員運算,可以理解為“的”。3.6訪問控制(封裝)封裝:將數(shù)據(jù)封裝到類的內(nèi)部,將算法封裝到方法中。1)封裝原則:將不需要對外提供的內(nèi)容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問
44、,通常有兩種訪問方式:set 設(shè)置,get 獲取。2)封裝結(jié)果:存在但是不可見。3)public:任何位置可見,可以修飾:類、成員屬性、成員方法、內(nèi)部類、跨包訪問類(需要使用import語句導(dǎo)入),成員屬性 = = 成員變量。4)protected:當(dāng)前包中可見,子類中可見。可以修飾:成員屬性、成員方法、內(nèi)部類(只能在類體中使用,不能修飾類)。5)默認(rèn)的:當(dāng)前包內(nèi)部可見,就是沒有任何修飾詞,可以修飾:類、成員屬性、成員方法、內(nèi)部類,但在實際項目中很少使用。默認(rèn)類(包內(nèi)類)的訪問范圍:當(dāng)前包內(nèi)部可見,不能在其他包中訪問類,訪問受限!main方法若定在默認(rèn)類中JVM將找不到,無法執(zhí)行,因此必定在p
45、ublic類中。6)private:僅僅在類內(nèi)部可見??梢孕揎棧撼蓡T屬性、成員方法、內(nèi)部類(只能在類體中使用,不能修飾類)。私有的方法不能繼承,也不能重寫。u 注意事項:在企業(yè)項目中建議:所有類都是公用類。封裝的類使用內(nèi)部類!3.7構(gòu)造器用于創(chuàng)建對象并初始化對象屬性的方法,叫“構(gòu)造方法”,也叫“構(gòu)造器”;構(gòu)造器在類中定義。1) 構(gòu)造器的名稱必須與類名同名,包括大小寫。2) 構(gòu)造器沒有返回值,但也不能寫void,也不能寫return。3) 構(gòu)造器的參數(shù):一般是初始化對象的前提條件。4) 用new調(diào)用!且對象一建立,構(gòu)造器就運行且僅運行一次。一般方法可被調(diào)用多次。5) 類一定有構(gòu)造器!這是真的,不
46、需要質(zhì)疑!6) 如果類沒有聲明(定義)任何的構(gòu)造器,Java編譯器會自動插入默認(rèn)構(gòu)造器!7) 默認(rèn)構(gòu)造是無參數(shù),方法體是空的構(gòu)造器,且默認(rèn)構(gòu)造器的訪問權(quán)限隨著所屬類的訪問權(quán)限變化而變化。如,若類被public修飾,則默認(rèn)構(gòu)造器也帶public修飾符。8) 默認(rèn)構(gòu)造器是看不到的,一旦自己寫上構(gòu)造器則默認(rèn)構(gòu)造器就沒有了,自己寫的叫自定義構(gòu)造器,即便自己寫的是空參數(shù)的構(gòu)造器,也是自定義構(gòu)造器,而不是默認(rèn)構(gòu)造器。9) 如果類聲明了構(gòu)造器,Java編譯器將不再提供默認(rèn)構(gòu)造器。若沒手動寫出無參構(gòu)造器,但卻調(diào)用了無參構(gòu)造器,將會報錯!eg:默認(rèn)構(gòu)造器 public class Demo public sta
47、tic void main(String args) Foo foo = new Foo();/調(diào)用了javac自動添加的默認(rèn)構(gòu)造器! /Koo koo = new Koo();/編譯錯誤,沒有Koo()構(gòu)造器 Koo koo = new Koo(8); class Foo /Foo有構(gòu)造器,有無參數(shù)的默認(rèn)構(gòu)造器! class Koo public Koo(int a) /聲明了有參數(shù)構(gòu)造器 System.out.println(Call Koo(int); 10) 構(gòu)造器是可以重載的,重載的目的是為了使用方便,重載規(guī)則與方法重載規(guī)則相同。 11) 構(gòu)造器是不能繼承的!雖說是叫構(gòu)造方法,但實際
48、上它不是常說的一般方法。 12) 子類繼承父類,那么子類型構(gòu)造器默認(rèn)調(diào)用父類型的無參數(shù)構(gòu)造器。13) 子類構(gòu)造器一定要調(diào)用父類構(gòu)造器,如果父類沒有無參數(shù)構(gòu)造器,則必須使用super(有參數(shù)的),來調(diào)用父類有參的構(gòu)造器。 那么,為什么子類一定要訪問父類的構(gòu)造器?因為父類中的數(shù)據(jù)子類可以直接獲取。所以子類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進(jìn)行初始化的,所以子類在對象初始化時,要先訪問一下父類中的構(gòu)造器??傊?,子類中至少會有一個構(gòu)造器會訪問父類中的構(gòu)造器,且子類中每一個構(gòu)造函數(shù)內(nèi)的第一行都有一句隱式super()。3.8 super()、super和 this()、this1) this:
49、在運行期間,哪個對象在調(diào)用this所在的方法,this就代表哪個對象,隱含綁定到當(dāng)前“這個對象”。2) super():調(diào)用父類無參構(gòu)造器,一定在子類構(gòu)造器第一行使用!如果沒有則是默認(rèn)存在super()的!這是Java默認(rèn)添加的super()。3) super是訪問父類對象,父類對象的引用,與this用法一致4) this():調(diào)用本類的其他構(gòu)造器,按照參數(shù)調(diào)用構(gòu)造器,必須在構(gòu)造器中使用,必須在第一行使用,this() 與 super() 互斥,不能同時存在5) this是訪問當(dāng)前對象,本類對象的引用,在能區(qū)別實例變量和局部變量時,this可省略,否則一定不能省!6) 如果子父類中出現(xiàn)非私有的同名成員變量時,子類要訪問本類中的變量用this ;子類要訪問父
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 染色體病檢測指南及規(guī)范
- 企業(yè)年金管理效率提升研究
- 汽車露營地裝修施工合同范本格式
- 供應(yīng)鏈協(xié)同管理方案
- 科技清水池防水施工合同
- 電力公司總經(jīng)理勞動合同范例
- 旅游管理專業(yè)教師聘用合同
- 漁業(yè)公司電工招聘及維護協(xié)議
- 醫(yī)療捐贈物品使用準(zhǔn)則
- 健康管理中心健身房租賃協(xié)議
- 化工裝置年度設(shè)備檢修工程施工組織設(shè)計方案
- 管道壓力和壁厚對照表
- 提前退休特殊工種目錄是怎樣的
- 無人機組裝與調(diào)試實訓(xùn)教案
- 超激光冷焊機技術(shù)規(guī)格書
- 畢業(yè)論文混合動力汽車原理及發(fā)展前景研究
- 體檢科健康管理崗位職責(zé)(共18篇)
- 農(nóng)業(yè)種質(zhì)資源保護與利用中長期發(fā)展規(guī)劃
- 超實用年會方案流程進(jìn)度表
- 道路施工進(jìn)度計劃橫道圖
- 太陽能路燈安裝施工方案及工藝方法
評論
0/150
提交評論