Java學習筆記 - 基礎篇 一、面向?qū)ο蟮木幊谈拍钣^察現(xiàn)實對象兩個性質(zhì):狀態(tài)、行為。面向?qū)ο蟮暮锰帲耗K化、隱藏信息。繼承:子類從父類(超類)繼承狀態(tài)和行為;子類可以改變父類的狀態(tài)和行為。接口:是無關(guān)對象用來進行彼此交互的設備;一個對象可以實現(xiàn)多個接口。二、語言基礎變量對象將它的狀態(tài)存儲在變量中;變量是一個由標識符命名的數(shù)據(jù)項。聲明變量的形式:<類型> <名稱>JAVA語言兩大數(shù)據(jù)類型原始類型數(shù)據(jù)(基本數(shù)據(jù)類型)、引用類型。原始類型數(shù)據(jù)是不能再分解的數(shù)據(jù)類型(8種:byte、short、int、long、float、double、char、boolean),數(shù)據(jù)在作為函數(shù)參數(shù)是以“傳值”方式工作的;整數(shù) byte:1字節(jié)長的整數(shù);8位有符號的二進制補碼整數(shù) short:短整數(shù);16位有符號的二進制補碼整數(shù) int:整數(shù);32位有符號的二進制補碼整數(shù) long:長整數(shù);64位有符號的二進制補碼整數(shù)實數(shù) flat:單精度浮點數(shù);32位IEEE 754浮點數(shù) double:雙精度浮點數(shù);64位IEEE 754浮點數(shù)其他類型 char:單一Unicode字符;16位Unicode字符 boolean:布爾值(true或false);8位/1位(8位空間,1位數(shù)據(jù)) 引用類型包括類(class)、接口(interface)、數(shù)組(array)。引用類型有時也稱復合類型,它是可以分解為基本類型的數(shù)據(jù)類型,其數(shù)據(jù)在作為函數(shù)參數(shù)時是以“傳址”的方式工作的。與原始類型相對,引用類型變量的值是對由此變量代表的一個值或一組值的引用(也就是地址)。如:原始類型 int a = 3; //“a”表示變量名稱,“3”表示變量值;如果寫成“final int a = 3;”,“final”表示不可改變值,所以這里的3(變量值)不可變引用類型 Staing b = "Hello Java"; //“b”表示引用名稱,“Hello Java”表示字浮串數(shù)組流程控制語句循環(huán) while、do - while、for判斷 if - else、switch - case異常處理 try – catch – finally、throw分支 break、continue、label :、return循環(huán):while和do – while語句:While語句用于在條件保持為true時反復執(zhí)行一個代碼塊;do – while語句的代碼塊中的語句至少被執(zhí)行一次。for語句:for語句提供一種迭代某個范圍內(nèi)的值的緊湊方式。判斷:if – else 語句:if語句使程序能夠根據(jù)某些條件有選擇地執(zhí)行其他語句;switch語句用于根據(jù)一個整數(shù)表達式有條件的執(zhí)行語句;注意:必須要有明確的break語句,否則,流程控制將一個接一個的經(jīng)過后面的case語句比較if語句和switch語句(if語句可以用于根據(jù)某范圍的值或條件進行判斷;switch語句只用于根據(jù)單個整數(shù)值進行判斷)。異常處理語句:當程序發(fā)生錯誤時,程序會拋出一個異常,程序的正常流程被中斷;分支語句:break、continue語句可以和標簽語句一起使用,也可以沒有標簽;標簽是放在一個語句前的標識符,標識符后跟一個冒號;continue 語句:continue語句用于跳過for、while、do – while循環(huán)的當前迭代;return 語句:返回一個值;不返回值。三、對象基礎和簡單數(shù)據(jù)結(jié)構(gòu)創(chuàng)建對象:聲明一個變量來引用變量;對對象進行實例化(構(gòu)造器);用new操作符和構(gòu)造器從類創(chuàng)建對象。兩種方式使用一個對象:引用一個對象的變量;調(diào)用對象的方法。字符和字符串JAVA平臺包含三個用于處理字符數(shù)據(jù)的類:Character:包含單個字符值;定義了一些可用于操作和檢查單字符數(shù)據(jù)的方法(Character類的對象實例包含單個字符值,可用Character對象替代基本類型char)。String:這個類用于處理由多個字符組成的不可改變的數(shù)據(jù)。StringBuffer:存儲和操作由多個字符組成的可改變的數(shù)據(jù)。字符串和字符串緩沖區(qū)String:不能改變自身的值。StringBuffer:用于將被修改的字符串。得到字符串或字符串緩沖區(qū)的長度length方法:返回字符串或字符串緩沖區(qū)中包含的字符數(shù)。capacity方法:StringBuffer特有;返回分配給字符串緩沖區(qū)的空間量,而不是被使用的空間量。String類沒有capacity方法,因為字符串不能改變。通過索引從字符串或字符串緩沖區(qū)得到字符charAt(int)方法:得到字符串或字符串緩沖區(qū)某索引位置上的字符。注意:第一個字符串的索引為0;最后一個字符的索引為length – 1;subString(int), subString(int,int):從字符串或字符串緩沖區(qū)中得到多個字符。在字符串中搜索字符或子字符串String類提供了兩個訪問器方法:indexOf 方法從字符串的開頭向前搜索;lastIndexOf 方法從字符串的末尾向后搜索;StringBuffer類不支持indexOf和lastIndexOf方法。操作字符串String類有幾個方法看起來可以修改字符串。當然,字符串是不能被修改的,所以,這些方法實際上是創(chuàng)建并返回包含結(jié)果的另一個字符串。修改字符串緩沖字符串緩沖是可以修改的,StingBuffer提供了幾個用于修改字符串緩沖區(qū)的數(shù)據(jù)的方法;如果修改字符串緩沖區(qū)的操作造成字符串緩沖區(qū)的大小超出它的當前容量,那么字符串緩沖區(qū)會自動分配更多的內(nèi)存。字符串和編譯器編譯器在很多地方自動的使用String和StringBuffer類來處理字符串直接值和字符串連接;編譯器為它遇到的每個字符串直接值自動創(chuàng)建一個新的String對象;可以使用+操作符連接字符串。四、類和繼承實現(xiàn)繼承:extends關(guān)鍵字為類提供構(gòu)造器構(gòu)造器用于初始化類的新對象:構(gòu)造器不是方法,沒有返回類型;構(gòu)造器的聲明中可以使用以下訪問說明符:– private– protected– public– 無說明符將信息傳遞給方法或構(gòu)造器參數(shù)類型;參數(shù)名稱;按值傳遞:參數(shù)是原始類型,方法不能改變其值;參數(shù)是引用類型,方法不能改變其引用,但可以改變引用對象的值。從方法返回值在方法聲明中聲明方法的返回類型;eturn語句返回值的數(shù)據(jù)類型必須匹配方法聲明的返回類型;方法可以返回原始類型,也可以返回引用類型。使用this關(guān)鍵字在實例方法或構(gòu)造器中,this引用當前對象,也就是被調(diào)用的方法或構(gòu)造器所屬的對象;在構(gòu)造器中,還可以使用this關(guān)鍵字調(diào)用相同類中的另一個構(gòu)造器。控制對類成員的訪問訪問說明符決定其他類是否可以使用某個成員或調(diào)用某個方法。Java編程語言支持四種用于成員變量和方法的訪問級別:private、protected、public和(如果沒有指定)package。訪問級別Private:類無說明符:類、包Protected:類、包、子類Public:類、包、子類、所有類實例和類成員的初始化可以在聲明的同時進行初始化,但是有一些限制:– 必須以一個賦值語句表達初始化方式– 初始化表達式不能調(diào)用任何被聲明為拋出非運行時異常的方法– 如果初始化表達式調(diào)用一個拋出運行時異常的方法,那么它不能進行錯誤恢復使用靜態(tài)初始化塊初始化類成員;實例成員的初始化。覆蓋和隱藏方法覆蓋(override)(實例方法):– 子類中的 個實例方法與超類中的實例方法具有相同的標記和返回類型– 方法的標記:名稱,參數(shù)數(shù)量、參數(shù)類型– 覆蓋方法可以具有不同的throws子句– 覆蓋方法的訪問說明符允許訪問限制只能比被覆蓋方法的多– 子類不能覆蓋超類中聲明為final的方法– 子類必須覆蓋超類中聲明為abstract的方法,否則子類本身必須是抽象的覆蓋和重載(overload);覆蓋和隱藏(類方法)。隱藏成員變量在類中,如果一個成員變量與超類中的成員變量同名(即使它們的類型不同),那么它隱藏超類成員變量;在子類中,不能通過簡單名稱引用超類中的成員變量,而是必須通過super訪問它;代碼可讀性差,不建議隱藏成員變量。使用super使用super調(diào)用被覆蓋的方法;使用super調(diào)用被隱藏的成員變量;使用super在構(gòu)造器中調(diào)用超類的構(gòu)造器。使用Object的后代每個類都是Object類的直接后代或間接后代;Object類定義了所有類都必須有的基本狀態(tài)和行為:– clone– equals和hashCode– finalize– toString– getClass– notify、notifyAll和wait編寫final類和方法將類聲明為final,即類不能被子類化:– 通過防止系統(tǒng)被改版來提高系統(tǒng)的安全性– 出于設計上的原因,某些類不需要子類final方法:– 在方法聲明中使用final關(guān)鍵字表示這個方法不能被子類覆蓋編寫抽象類和方法抽象類:– 表示一個抽象的概念,不應該被實例化– abstract關(guān)鍵字抽象方法:– 沒有實現(xiàn)的方法,允許子類提供這些方法的實現(xiàn)細節(jié)– 如果抽象類只包含抽象方法,那么它應該被定義成接口創(chuàng)建類的小結(jié) 類的定義有兩個部分:– 類聲明– 類體:成員變量、方法、構(gòu)造器訪問說明符——控制對成員變量和方法的訪問方式;類變量、類方法,static方法關(guān)鍵字實例成員、實例方法五、接口和包實現(xiàn)接口:implements關(guān)鍵字類可以實現(xiàn)多個接口,implements關(guān)鍵字后面跟以逗號分隔的接口列表;如果有extends關(guān)鍵字,implements子句應該在extends子句的后面;類要么必需實現(xiàn)接口及其超接口中的所有方法,要么類必須被聲明為抽象的;類中的方法標記(名稱和參數(shù)列表)必須匹配接口中的方法標記。將接口作為類型使用在定義了一個新接口是,就是在定義一個新的引用數(shù)據(jù)類型;定義可一用接口,實例化是必須用類。接口不能改變從語法的角度看,接口可以被改變;從設計的角度看,一個已經(jīng)在系統(tǒng)中被廣泛使用的接口,不能輕易被改變;如果改變了接口,實現(xiàn)原接口的類都將無法工作;應該盡可能的考慮接口所提供的方法;如果要改變接口,用繼承的方式定義新的接口。接口小結(jié)接口定義了一種功能描述,定義了對象之間進行通訊的協(xié)議;接口定義由接口聲明和接口體組成;接口包含一組方法的聲明,但沒有方法的實現(xiàn);實現(xiàn)接口的類必須實現(xiàn)接口中聲明的所有方法;接口名稱可以作為數(shù)據(jù)類型使用。創(chuàng)建和使用包創(chuàng)建包:– 將package語句作為類或接口源代碼文件中的第一條語句– 類或接口的源代碼和類文件的路徑名與包的名稱相對應使用另一個包中的接口或類:– 類或接口的限定名– 導入類或接口– 導入類或接口所在的整個包六、使用異常處理錯誤什么是異常:異常(exception)是在程序執(zhí)行期間中斷指令的正常流程的事件。try塊try { statements}statements是包含一個或多個可能拋出異常的語句。catch塊每個catch塊是一個異常處理器,它處理由其參數(shù)指定的異常類型try{ ......} catch(ExceptionType name) { ……} catch (ExceptionType name) { ……}finally塊finally塊是可選的,它提供一種機制,其目的是無論try塊中是否發(fā)生異常都確保進行清理工作;無論是否發(fā)生異常,都會執(zhí)行finally塊中的代碼。throw語句throw語句需要一個參數(shù):一個可拋出的(Throwable)對象;可拋出對象是Throwable類的子類。Throwable類及其子類Throwable類有兩個直接子類:– Error– ExceptionError:– JAVA虛擬機的動態(tài)鏈接故障或其它“硬”故障,一般的程序不應該捕獲Error,也不能拋出ErrorException:大多數(shù)程序拋出并捕獲從Exception類派生的對象。Exception表示發(fā)生了一個問題,但并不是嚴重的系統(tǒng)問題。你寫的多數(shù)程序?qū)伋霾⒉东@Exception(而不是Error)。– Exception表示發(fā)生了一個問題,但并不是嚴重的系統(tǒng)問題– Exception的不同子類表示可能發(fā)生的各種異常異常的優(yōu)點:將錯誤代碼與“常規(guī)”代碼分離;將錯誤沿調(diào)用堆棧向上傳遞;對錯誤類型進行分組和區(qū)分。異常的小結(jié)程序可以使用異常表明發(fā)生了錯誤;程序可以使用throw語句拋出異常;異常是一個對象(Throwable的子類);程序可以使用try、catch語句finally來捕獲異常:– try語句標識出可能發(fā)生的異常– catch語句標識出異常處理器– finally代碼塊不論拋出異常與否都會被執(zhí)行,適用于清理工作七、線程:同時執(zhí)行多個任務只要用到線程就必須繼承或接口:Thread。只要用到線程就必須要用run方法。什么是線程:– 線程是程序內(nèi)的一個單一的順序控制流程– 線程本身不是程序,不能單獨運行,它在一個程序內(nèi)運行– 多個線程可以同時運行,在一個程序內(nèi)執(zhí)行不同的任務定制線程的run方法run方法執(zhí)行線程的工作;run方法實現(xiàn)了線程的運行行為;run方法可以做任何可以用語句實現(xiàn)的事。為線程提供run方法:– 繼承Thread類,并覆蓋run方法– 實現(xiàn)Runnable接口對Thread類進行子類化和覆蓋runpublic class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { system.out.println(i + " " + getname()); try { sleep((long)(math.random() * 1000)); } catch (interruptedexception e) {} } system.out.println("done! " + getname()); }}實現(xiàn)runnable接口:如果一個類已經(jīng)繼承了另一個類,那么要想實現(xiàn)線程就必須實現(xiàn)runnable接口。在線程中結(jié)果是隨機產(chǎn)生的,如果想鎖定對象就要使用synchronized關(guān)鍵字意思為鎖定方法所有在的對象。在對象被解鎖前,其他線程不能調(diào)用相同對象上的被同步的方法。意思為執(zhí)行一個對象后激活另一個對象,自身暫時睡眠,等待另一個對象執(zhí)行完畢,在執(zhí)行下一步,反復如此。八、io:讀和寫如何使用管道流:管道用于將一個線程的輸出連接到另一個線程的輸入如何封裝流:流經(jīng)常被以下的這種形式封裝起來,以便組合許多流的各種功能對象的串行化:java.io包中的兩個流——objectinputstream和objectoutputstream是字節(jié)流,他們的工作與其他輸入和輸出流類似。但他們的特殊之處在于它們可以讀寫對象。對對象進行串行化:如果將一個不能串行化的對象傳遞給writeobject方法,那么它拋出一個notserializable exception。對象只能在它的類實現(xiàn)了serializable接口的情況下被串行化。為類提供對象串行化:只有在對象的類實現(xiàn)了serializable接口情況下,對象才是可串行化的。所有,如果想要對你的類的實例進串行化,這個類必須實現(xiàn)serializable接口。serializable接口是一個空接口,也就是說,他不包含任何方法聲明;它的作用只是表明這個類的對象可以被串行化。i/o復制小程序(copy.java),如下:import java.io.file;import java.io.filereader;import java.io.filewriter;import java.io.ioexception;//以上是此程序用到的io類的包,也可以用“import java.io.*”public class copy { public static void main(string[] args) throws ioexception {file inputfile = new file("d:\\temp\\helloworld.java"); //目標文件路徑,java中路徑地址只能用“\\”或“/”不能使用“\”file outputfile = new file("d:\\temp\\outagain.java"); //復制后新文件保存路徑 filereader in = new filereader(inputfile); filewriter out = new filewriter(outputfile); int c; while ((c = in.read()) != -1) //一直循環(huán)到0表示已經(jīng)復制完畢,所以這里使用不等于負1 out.write(c); in.close(); //關(guān)閉讀文件對象 out.close(); //關(guān)閉寫文件對象 }凡是有該標志的文章,都是該blog博主caoer(草兒)原創(chuàng),凡是索引、收藏、轉(zhuǎn)載請注明來處和原文作者。非常感謝。 10;="" i++)="" {="" system.out.println(i="" +="" "="" "="" +="" getname());="" try="" {="" sleep((long)(math.random()="" *="" 1000));="" }="" catch="" (interruptedexception="" e)="" {}="" }="" system.out.println("done!="" "="" +="" getname());="" }}實現(xiàn)runnable接口:如果一個類已經(jīng)繼承了另一個類,那么要想實現(xiàn)線程就必須實現(xiàn)runnable接口。在線程中結(jié)果是隨機產(chǎn)生的,如果想鎖定對象就要使用synchronized關(guān)鍵字意思為鎖定方法所有在的對象。在對象被解鎖前,其他線程不能調(diào)用相同對象上的被同步的方法。意思為執(zhí)行一個對象后激活另一個對象,自身暫時睡眠,等待另一個對象執(zhí)行完畢,在執(zhí)行下一步,反復如此。八、io:讀和寫如何使用管道流:管道用于將一個線程的輸出連接到另一個線程的輸入如何封裝流:流經(jīng)常被以下的這種形式封裝起來,以便組合許多流的各種功能對象的串行化:java.io包中的兩個流——objectinputstream和objectoutputstream是字節(jié)流,他們的工作與其他輸入和輸出流類似。但他們的特殊之處在于它們可以讀寫對象。對對象進行串行化:如果將一個不能串行化的對象傳遞給writeobject方法,那么它拋出一個notserializable="" exception。對象只能在它的類實現(xiàn)了serializable接口的情況下被串行化。為類提供對象串行化:只有在對象的類實現(xiàn)了serializable接口情況下,對象才是可串行化的。所有,如果想要對你的類的實例進串行化,這個類必須實現(xiàn)serializable接口。serializable接口是一個空接口,也就是說,他不包含任何方法聲明;它的作用只是表明這個類的對象可以被串行化。i/o復制小程序(copy.java),如下:import="" java.io.file;import="" java.io.filereader;import="" java.io.filewriter;import="" java.io.ioexception;//以上是此程序用到的io類的包,也可以用“import="" java.io.*”public="" class="" copy="" {="" public="" static="" void="" main(string[]="" args)="" throws="" ioexception="" {file="" inputfile="new" file("d:\\temp\\helloworld.java");="" 目標文件路徑,java中路徑地址只能用“\\”或“/”不能使用“\”file="" outputfile="new" file("d:\\temp\\outagain.java");="" 復制后新文件保存路徑="" filereader="" in="new" filereader(inputfile);="" filewriter="" out="new" filewriter(outputfile);="" int="" c;="" while="" ((c="in.read())" !="-1)" 一直循環(huán)到0表示已經(jīng)復制完畢,所以這里使用不等于負1="" out.write(c);="" in.close();="" 關(guān)閉讀文件對象="" out.close();="" 關(guān)閉寫文件對象=""> 10; i++) { system.out.println(i + " " + getname()); try { sleep((long)(math.random() * 1000)); } catch (interruptedexception e) {} } system.out.println("done! " + getname()); }}實現(xiàn)runnable接口:如果一個類已經(jīng)繼承了另一個類,那么要想實現(xiàn)線程就必須實現(xiàn)runnable接口。在線程中結(jié)果是隨機產(chǎn)生的,如果想鎖定對象就要使用synchronized關(guān)鍵字意思為鎖定方法所有在的對象。在對象被解鎖前,其他線程不能調(diào)用相同對象上的被同步的方法。意思為執(zhí)行一個對象后激活另一個對象,自身暫時睡眠,等待另一個對象執(zhí)行完畢,在執(zhí)行下一步,反復如此。八、io:讀和寫如何使用管道流:管道用于將一個線程的輸出連接到另一個線程的輸入如何封裝流:流經(jīng)常被以下的這種形式封裝起來,以便組合許多流的各種功能對象的串行化:java.io包中的兩個流——objectinputstream和objectoutputstream是字節(jié)流,他們的工作與其他輸入和輸出流類似。但他們的特殊之處在于它們可以讀寫對象。對對象進行串行化:如果將一個不能串行化的對象傳遞給writeobject方法,那么它拋出一個notserializable exception。對象只能在它的類實現(xiàn)了serializable接口的情況下被串行化。為類提供對象串行化:只有在對象的類實現(xiàn)了serializable接口情況下,對象才是可串行化的。所有,如果想要對你的類的實例進串行化,這個類必須實現(xiàn)serializable接口。serializable接口是一個空接口,也就是說,他不包含任何方法聲明;它的作用只是表明這個類的對象可以被串行化。i/o復制小程序(copy.java),如下:import java.io.file;import java.io.filereader;import java.io.filewriter;import java.io.ioexception;//以上是此程序用到的io類的包,也可以用“import java.io.*”public class copy { public static void main(string[] args) throws ioexception {file inputfile=new file("d:\\temp\\helloworld.java"); //目標文件路徑,java中路徑地址只能用“\\”或“/”不能使用“\”file outputfile=new file("d:\\temp\\outagain.java"); //復制后新文件保存路徑 filereader in=new filereader(inputfile); filewriter out=new filewriter(outputfile); int c; while ((c=in.read()) !=-1) //一直循環(huán)到0表示已經(jīng)復制完畢,所以這里使用不等于負1 out.write(c); in.close(); //關(guān)閉讀文件對象 out.close(); //關(guān)閉寫文件對象 }凡是有該標志的文章,都是該blog博主caoer(草兒)原創(chuàng),凡是索引、收藏、轉(zhuǎn)載請注明來處和原文作者。非常感謝。>名稱>類型>
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。