Java隨堂筆記_第1頁
Java隨堂筆記_第2頁
Java隨堂筆記_第3頁
Java隨堂筆記_第4頁
Java隨堂筆記_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、一.Java的特性: 1.第一個純面向?qū)ο缶幊陶Z言2.是一個類C的語言,去掉C+里面多繼承、指針、析構(gòu)函數(shù)(Java實現(xiàn)代碼托管JVM)3.是一個跨平臺的編程語言(一次編譯,處處運行)4.Java是一個編譯解釋型語言5.Java是一個免費開源的編程語言編譯型語言:源代碼 ->編譯程序->可執(zhí)行程序解釋型語言:源代碼->解釋程序->邊解釋邊執(zhí)行編譯解釋型語言:Java 源代碼->(javac)編譯程序->(xxx.class)中間件(字節(jié)碼文件)->(java)解釋程序(JRE Java運行時環(huán)境)->邊解釋邊執(zhí)行JavaSE Standard E

2、dition Java標(biāo)準(zhǔn)版本 JavaEE Enterprise Edition Java企業(yè)版本JavaME Micro Edition Java微型版本Java開發(fā)步驟 1.獲取對應(yīng)OS的編譯程序和解釋程序(JDK)2.選擇執(zhí)行平臺對應(yīng)版本的JDK3.安裝JDKJDK目錄結(jié)構(gòu)bin -所有的JDK可執(zhí)行程序(javac.exe 編譯程序解釋程序)db -Java內(nèi)置的小型數(shù)據(jù)庫include -NDK(本地化開發(fā)包) JIT java in timejre -Java運行時環(huán)境lib -庫文件是Java全部系統(tǒng)函數(shù) src.zip -Java的源文件4.配置環(huán)境變量配置Path變量配置J

3、AVA_HOME變量重新開啟CMD命令鍵入javac命令測試是否配置成功5.開發(fā)第一個Java程序新建文本文件,將后綴名改為.java6.使用EditPlus編輯該文件前對EditPlus進行配置 編寫第一個Java程序public class Test public static void main(String args) System.out.println("hello,Java,我是牛牛");二.1.Java語言的注釋/ 單行注釋/* 多行注釋*/* 文檔注釋* */文檔注釋的使用:javadoc Test.java -d c:help -version -aut

4、hor2.Java中的變量2.1 計算機存儲形式:以字節(jié)為存儲單位 1byte = 8bit 計算機是二進制的世界 二進制->十進制轉(zhuǎn)換(1.對應(yīng)法eg 101 1*22 + 0*21 + 1*20 = 5 2.8421法)十進制->二進制(除2求余法, 余數(shù)倒序的數(shù)列)可以使用十六進制簡化十進制長度,是一組表示方法。范圍是0-9A-F2.2變量的類型 關(guān)鍵字:Java語言預(yù)置的標(biāo)識符,有特定功能。51個關(guān)鍵字其中g(shù)oto,const是關(guān)鍵字中的保留字標(biāo)識符:編程人員可以自定義的變量名,標(biāo)識符規(guī)則:只能包含四種字符0-9 a-zA-Z _ $, 同時不能由數(shù)字開頭,遵循的原則是:見

5、名知義。Java中的數(shù)據(jù)類型:1.數(shù)值型 -基本數(shù)據(jù)類型 byte(1) short(2) int(4) long(8) float(4) double(8)2.字符型 -基本數(shù)據(jù)類型 char(2) 3.布爾型 -基本數(shù)據(jù)類型 boolean(1位) true false4.字符串 -引用類型(特殊的引用類型) String2.3變量的使用1.聲明變量 int i;2.為變量賦值 i = 10;3.使用變量 int j = i;2.4Java運算符1.算術(shù)運算符 + - * / % += -= *= /= + -(注意:前后置不同)2.賦值運算符 = (注意:賦值運算符兩邊類型要匹配,如果不

6、匹配,Java會嘗試自動轉(zhuǎn)型 Java中自動轉(zhuǎn)型原則是:小容量自動變?yōu)榇笕萘?,整形自動提升成浮點型)(注意:Java中可以由編程人員完成手動轉(zhuǎn)型,在數(shù)據(jù)前面使用(目標(biāo)類型)強制轉(zhuǎn)型) 3.邏輯運算符 &&與 |或 !非 異或 (注意:在Java中邏輯運算符分為全操作和短路操作 &&表示短路 &表示全運算 開發(fā)時候盡量使用短路操作) 4.關(guān)系運算符 > < >= <= != = 5.邏輯位運算符 & | 6.位運算符 << >> >>> 7.字符串連接符 + (注意:在Java中會使

7、其他操作數(shù)類型自動轉(zhuǎn)為字符串)2.5表達(dá)式優(yōu)先級單目運算符 > 雙目運算符 三目運算符 布爾值?值1:值2 算術(shù)運算符 > 關(guān)系運算符 > 邏輯運算符 > 賦值運算符 (建議:開發(fā)使用()顯示優(yōu)先級關(guān)系)2.6執(zhí)行結(jié)構(gòu)1.順序 2.分支(選擇) 1.if 2.if else 3. if else if 4.switch (注意:Java中If的條件表達(dá)式必須是布爾值(true|false) 3.循環(huán)(迭代) 1.while 2.do while 3.for 4.增加for (jdk1.5) 4.循環(huán)內(nèi)控制語句 continue break return (System.

8、exit() 可以使用轉(zhuǎn)義字符完成一些特殊效果 r n t '一'(19968) '龥'(40869) (char)7為響鈴2.7 局部變量的作用范圍Java中的局部變量只在聲明的語句塊中有效,一旦脫離語句塊自動釋放。 注意:在對性能要求苛刻的編程環(huán)境,常常采用即用即釋放的方式,提高內(nèi)存的使用效率。2.8 數(shù)組的定義和使用Java中的數(shù)組特點:1.多個元素是同一種數(shù)據(jù)類型 2.元素的順序在內(nèi)存里是連續(xù)的 3.元素下標(biāo)是從0開始的4數(shù)組的長度是通過length屬性獲取 5.數(shù)組是一種引用類型 6.Java多維數(shù)組只是數(shù)組中的數(shù)組 7.數(shù)組的長度一旦聲明,是不可改變

9、(定長) Java中定義數(shù)組: 數(shù)組元素類型 數(shù)組變量名 = new 數(shù)組元素類型長度;Java中定義多維數(shù)組: 數(shù)組元素類型. 數(shù)組變量名 = new 數(shù)組元素類型長度長度;Java中內(nèi)存區(qū)域功能: 加載區(qū): 1.加載當(dāng)前運行的class文件 2.加載import的class文件 3.進行安全校驗 4.進入預(yù)執(zhí)行狀態(tài)(機器碼) 5.執(zhí)行 棧: 局部變量,基本數(shù)據(jù)類型的值直接保存在棧中,引用類型的址保存在棧中,空間小,速度快 堆: new出來的,空間大,速度有限 共享區(qū): 放置常量值和靜態(tài)變量、靜態(tài)常量new關(guān)鍵字:使用new在堆內(nèi)存中開辟的區(qū)域都會自動賦值整形自動賦0 浮點自動賦0.0 bo

10、olean自動賦false char自動賦值'u0000' 引用類型自動賦null數(shù)組中常見的運行時異常: java.lang.ArrayIndexOutOfBoundsException2.9 字符串Java的字符串在java.lang.String中Java中字符串是常量 (注意:常量:是一旦賦值后不可再改變的內(nèi)存區(qū)域。在Java中使用final 來定義常量)常量的定義 規(guī)則是注意final位置,規(guī)范是常量全大寫常量的賦值方式:1.聲明即賦值 2.后期賦值聲明字符串:1.String s1 = "abc" 2.String s1; s1 = "

11、abc" 3.String s2 = new String("abc");字符串的兩種比較方式 1.= 比較棧的內(nèi)容 2.equals() 比較字符串內(nèi)容為了解決字符串常量產(chǎn)生大量臨時垃圾的問題,Java提供了java.lang.StringBuffer(同步 安全 性能稍低)和java.lang.StringBuilder(不安全,性能高) .append()字符串中常見的運行時異常: java.lang.StringIndexOutOfBoundsException字符串 java.lang.String java.lang.StringBuffercharA

12、t()獲取字符串對應(yīng)數(shù)組位置的字符compareTo()返回正整數(shù)表示前面大,返回負(fù)數(shù)后面大,返回0一樣大。注:在Java中字符串的比較是以字符的Unicode編碼值Contains()判斷母串中是否有子串,返回true或falseEquals()比較兩個字符串內(nèi)容,相同返回trueequalsIgnoreCase()忽略大小寫比較,相同返回trueindexOf()在字符串中檢索指定內(nèi)容,找到就返回第一次出現(xiàn)的下標(biāo)位置,若無則返回-1lastIndexOf()從后向前檢索,返回第一次遇到的下標(biāo)Replace(舊,新)將字符串中指定內(nèi)容進行替換Split(分隔字符串)將字符串按照指定字符串分割

13、成字符串?dāng)?shù)組Substring()從母串提取子串第一個參數(shù)起始下標(biāo),第二參數(shù)結(jié)束下標(biāo)(不包含)startsWith()判斷字符串是否以指定字符開始toCharArray()將字符串轉(zhuǎn)換成字符數(shù)組toLowerCase()將字符串內(nèi)字母轉(zhuǎn)換成小寫toUpperCase()將字符串內(nèi)字母轉(zhuǎn)換成大寫trim()去前后的空格valueOf()將基本數(shù)據(jù)類型轉(zhuǎn)化成字符串類型length()獲取字符串的長度replaceAll()使用正則表達(dá)式進行替換Format()%參數(shù)位置$4S|d|t S(String) d(int double) t(Calendar) eg:%1$4ty|m|d|h|M|S數(shù)學(xué)

14、類 java.lang.MathMath.PI系統(tǒng)提供的double類此PIAbs()求絕對值Floor()取比他小的數(shù)里最大的整數(shù)Ceil()取比他大的數(shù)里最小的整數(shù)Max(值1, 值2)取兩個數(shù)里最大的Min(值1, 值2)取兩個數(shù)里最小的Pow(2, 3)取冪次方round()取四舍五入值random()獲取>=0.0 到 < 1.0的隨機數(shù) 可以配合ceil()獲取指定范圍的數(shù)值日期類 (常見的非運行時異常java.text.ParseException) Java.util.DateDate now = new Date(); now = new Date(長整形); 等

15、效setTime(長整型)Java.util.CalendarCalendar c = Calendar.getInstance(); c.set(year,month-1,day) c.get(常量)Java.text. SimpleDateFormat1.將日期轉(zhuǎn)換成自定義的字符串格式 轉(zhuǎn)換器.format("規(guī)則字符串") 返回String2.將自定義字符串轉(zhuǎn)換成日期 轉(zhuǎn)換器.parse("字符串") 返回Date注:先創(chuàng)建轉(zhuǎn)換規(guī)則,元字符 y M d H m s SJava.util.TimeZoneTimeZone tz = TimeZone.

16、getTimeZone("地區(qū)字符串");1.Calendar c = Calendar.getInstance(tz);2.c.setTimeZone(tz); 注:先設(shè)置時區(qū),再設(shè)置時間 c.setTime(date類型);正則表達(dá)式j(luò)ava.util.regex. Matcher 不能使用import java.util.* Java不會引入子文件夾里的類java.util.regex.Pattern正則表達(dá)式功能:1.匹配 2.查找(替換) 正則表達(dá)式有旗識位 全局 (g) 忽略大小寫 (i) 多行 (m) Java中正則的使用方式1.Pattern p = Ppi

17、le("正則表達(dá)式字符串"); Matcher m = p.matcher("用戶字符串"); boolean b = m.matches(); 2.使用String直接支持正則表達(dá)式方法(此方法無需引入正則文件夾) eg: boolean b = "用戶字符串". matches("正則表達(dá)式字符串")查找 /用戶字符串 String s = ""/查找Pattern p = Ppile("java", Pattern.CASE_INSENSITIVE); /正則規(guī)則Mat

18、cher m = p.matcher(s); /獲取匹配器/查找所有匹配出來組while(m.find() String str = m.group();System.out.println(str);替換 /用戶字符串 String s = ""String str = s.replaceAll("(j|J)ava", "JavaScript");System.out.println(str);u4E00-u9FA5:匹配任一中文字符w+w+(.(com|org|net|cn)+ 郵箱地址(0-9|1-90-9|10-90-9|20

19、-40-9|250-5)(.(0-9|1-90-9|10-90-9|20-40-9|250-5)3$ IP地址2.10方法的定義和使用方法:是一系列的語句,這些語句至少完成一個特定的功能。方法作用:使代碼復(fù)用。方法的定義: 修飾符 返回類型 方法名稱(參數(shù)類型 參數(shù)名,.) 方法在類里面聲明,而不是在方法中。方法的調(diào)用:在同一個類中,直接調(diào)用void:該返回類型要求無值返回接收方法返回結(jié)果: 返回類型 結(jié)果 = 方法(參數(shù)類型 參數(shù)名,.);方法名和變量名使用駝峰命名法: xxxYyyZzz方法參數(shù)如果是(基本數(shù)據(jù)類型或者是String)方法內(nèi)的改變不會影響外面的變量,但是如果是其他引用類型,

20、方法內(nèi)的改變會將影響外面的變量2.11 方法的重載(overload) 重載的作用:方便用戶調(diào)用如何形成重載:方法名相同,參數(shù)列表不同參數(shù)個數(shù)|參數(shù)類型不同|參數(shù)順序(重載條件) 注:返回類型不同,不作為重載的條件2.12遞歸方法2.13數(shù)組操作類 Java.util.Arrays1.升序排序 Arrays.sort(數(shù)組);2.二分查找 Arrays.binarySearch(數(shù)組, 查找值); 注:二分查找前,需對數(shù)組進行排序3.填充內(nèi)容 Arrays.fill(數(shù)組, 填充值);2.14 Eclipse工具的使用快速刪除行 ctrl + D快速復(fù)制行 ctrl + alt + 方向鍵快速

21、移動行 alt + 方向鍵快速單行注釋切換 ctrl + /快速多行注釋 ctrl + shift + /快速多行去注釋 ctrl + shift + */快速運行程序 ctrl + f11*/f5進入深層運行 f6跳過方法運行 f7跳過方法后續(xù),返回調(diào)用處 f8跳過后續(xù)正常運行三 面向?qū)ο?.1 封裝(把現(xiàn)實中的事物,用數(shù)據(jù)類型的方式進行描述,描述是兩種狀態(tài)(靜態(tài)(字段)和動態(tài)(方法)))類:類型 采集相同特性信息則可以分為一類,客觀不存在字段:field(屬性) 對象:一個類的特例(實例),客觀存在的,萬物皆對象。使用類就是創(chuàng)建對象的過程構(gòu)造方法:與類名稱相同的方法構(gòu)造方法特點:1.該方法

22、沒有返回 2.構(gòu)造方法是自動調(diào)用,不能手動調(diào)用3.構(gòu)造方法會為字段賦初值4.任何一個普通類都至少有一個構(gòu)造方法構(gòu)造方法的重載:一旦我們創(chuàng)建一個有參構(gòu)造,系統(tǒng)就不會提供無參構(gòu)造。通過反編譯命令javap 類名稱 觀察成員變量和局部變量成員變量:直接放在類中的字符,成員的變量在整個類都有效,使用m_作為前綴this變量:保存的是對象自身的地址,可以使用this.成員可以使用this(參數(shù))調(diào)用帶參數(shù)的構(gòu)造方法,但是必須是第一句。包:在Java中包就是組織類的方式,相同與文件目錄,目的是保證項目之間的類名不沖突。使用javac -d . Test.java 可以編譯時自動打包包名規(guī)范:package

23、 com.公司名稱.項目名稱.項目組名稱.項目成員名稱.模塊名稱;注:包名全小寫,只有字母數(shù)字執(zhí)行帶包的字節(jié)碼的命令: java ject1.team1.howie.studentmrg.Test訪問修飾符: public private default protected(什么都不寫)public 所有類(跨包)都可以訪問default 同包可以訪問private 同一類可以訪問protected 有繼承關(guān)系則可以訪問,跨包也可第三個運行時異常:java.lang.NullPointerException3.2 繼承產(chǎn)生的原因:解決過度封裝,抽取共性,統(tǒng)一管理。

24、3.2.1 static 靜態(tài)變量(類變量)特點:1.屬于類的共享數(shù)據(jù) 2.代碼加載時,在共享區(qū)創(chuàng)建 3.形成靜態(tài)代碼塊4.創(chuàng)建的順序快于創(chuàng)建對象,且只有一次 5.靜態(tài)的方法只能訪問靜態(tài)變量,成員方法即可以訪問成員變量也可以訪問靜態(tài)變量靜態(tài)方法(類方法)作用:無需堆空間,就可以進行方法的調(diào)用,而且由于只有一份更加節(jié)省內(nèi)存。靜態(tài)常量:節(jié)省內(nèi)存,方便調(diào)用,產(chǎn)生的時間靠前 3.2.2 extends Java繼承特點:1.Java只允許單繼承 2.Java類有且僅有一個父類(Object是根類) 3.Java里的父類也稱為(超類|基類) 4.為了方便繼承鏈完整,往往在父類明確編寫無參構(gòu)造。 3.2.

25、3 super1.Java中使用super明確引用父類(直接)的成員2.可以使用super()調(diào)用父類的構(gòu)造方法,該調(diào)用語句只能在子類構(gòu)造方法中使用,而且必須是第一句。 3.2.4里氏替換原則 子類自動向父類轉(zhuǎn)型,但是會丟失子類特性。 父類強制向子類轉(zhuǎn)型,重新獲取子類特性。 父類 = new A子類; B子類 = (B)父類; 由于無法還原:java.lang.ClassCastException 3.2.5 instanceof使用insanceof 判斷里氏替換是否能夠成功 3.2.6 重寫 重寫或覆蓋(override)是在繼承關(guān)系中,強化或著重寫父類功能,重寫方法要與父類中的方法聲明完

26、全相同(訪問修飾符可以不同,更加的公開,父類中不能是私有)3.3多態(tài)產(chǎn)生的原因:繼承父子類型轉(zhuǎn)換不方便,多態(tài)可以完成自動轉(zhuǎn)型多態(tài):按照實例的具體類型,做對應(yīng)的操作。(一定要有繼承,一定要有重寫 Java默認(rèn)實現(xiàn)的虛函數(shù))3.3.1抽象類 (1.強制要求多態(tài)的實現(xiàn) 2.避免用戶創(chuàng)建橋接類 3.節(jié)省內(nèi)存)where(設(shè)計父類)1.是使用abstract關(guān)鍵字修飾的類2.抽象類不能實例化(不能new)3.方法可以用abstract修飾,成為抽象方法,抽象方法沒有實現(xiàn)語句4.有抽象方法的類,一定是抽象類,但是抽象類中可以沒有抽象方法。5.抽象方法需要被子類實現(xiàn),此時子類無需成為抽象類,但是如果子類沒有

27、實現(xiàn)父類的抽象方法,子類一定是抽象類。6.抽象類一定不能是終結(jié)類。7.抽象類有構(gòu)造方法,而且可以對構(gòu)造方法重載。3.3.2接口(1.支持多實現(xiàn),靈活 2.不占父類的名額 3.模擬枚舉 4.制定標(biāo)準(zhǔn)(類標(biāo)識) where(設(shè)計父接口)1.使用interface關(guān)鍵字定義接口, 接口里面沒有任何實現(xiàn)方法,接口不能實例化(不能new)2.一個類可以實現(xiàn)多個接口3.類實現(xiàn)接口的關(guān)鍵字implements ,實現(xiàn)接口冊需要實現(xiàn)接口中的所有方法,否則實現(xiàn)類成為抽象類。4.接口中的方法必須是public5.接口中的成員變量必須是public static final修飾的常量6.接口可以繼承接口,接口可以多

28、繼承7.接口使用Pascal命名法,常常加able為后綴,表示類具備某種能力。四.面向?qū)ο蟾呒?.1.容器(集合):容納多個對象。4.1.1裝單個對象<<java.util.Collection>>(接口)<<java.util.List>>(接口)1.有序 2.可重復(fù) 3.內(nèi)存連續(xù) 特點:查詢快,修改慢 java.util.ArrayList 注:需要重寫Object中equals()定義比較規(guī)則,完成部分操作常用方法Add(Object)追加對象元素Add(int, Object)在指定位置添加元素addAll(Collection)追加集合

29、對象addAll(int, Collection)在指定位置添加集合對象Remove(int)刪除指定位置的對象Remove(Object)刪除對象(需要按自己的比較規(guī)則重寫equals()removeRange(int,int)刪除指定下標(biāo)范圍的對象,結(jié)束下標(biāo)不包含Clear()刪除所有元素對象Contains(object)查看是否包含該對象Size()獲取集合對象個數(shù)toArray()將集合轉(zhuǎn)換成對象數(shù)組toArray(泛型)Student objs = new Studentlist.size();list.toArray(objs);Get(int)按下標(biāo)位置獲取對象indexOf(

30、object)獲取對象下標(biāo)第一次出現(xiàn)位置Set(int, Object)替換指定位置對象java.util.LinkedList 棧(FILO) 隊列(FIFO)常用方法addFirst(Object)添加到頭部addLast(Object)添加到尾部getFirst()獲取頭部getLast()獲取尾部removeFirst()移除頭部removeLast()移除尾部Get(int)按下標(biāo)位置獲取對象 沙箱 在Java1.5后提供的基本數(shù)據(jù)類型與引用類型的轉(zhuǎn)換機制int i = 10; Object obj = i; /自動裝箱 基本數(shù)據(jù)->封裝類->Object

31、double j = (double)obj; /手動拆箱 Object->封裝類->基本數(shù)據(jù)類型 Vector類和Hashtable類Vector(同步 安全 性能較低 追加一倍)ArrayList(不同步 不安全 高效 追加一半)Hashtable(同步)<<java.util.Set>>(接口)1.無序 2.不可重復(fù)(一個null) 3.內(nèi)存不連續(xù) 特點:查詢慢, 修改快哈希算法:產(chǎn)生一個盡量做到散列分布的地址系數(shù)java.util.HashSet java.util.TreeSet(排序)由于使用了哈希算法,內(nèi)存存在哈希表,找尋對象先找

32、哈希表(hashcode(),再找對象4.1.2裝鍵值KeyValue對象 <<java.util.Map>>常用方法containsKey(Object key)判斷是否有指定鍵containsValue(Object value)判斷是否有指定值entrySet()獲取鍵值對象集合Set(Map.Entry)get(Object key)按鍵獲取值keySet()獲取所有鍵的集合put(K , V )在集合中添加鍵值對象putAll(Map)在集合中添加子集合values()獲取所有值的集合java.util.Has

33、hMap(異步,性能較好)java.util.Hashtable(同步,性能較差,使用較老API進行迭代)4.1.3泛型 在編譯期就對數(shù)據(jù)類型進行嚴(yán)格檢查,如果類型不匹配,編譯無法通過。自定義泛型:1.精確指定 2.模糊指定(? 匹配任意類型 ? extends T 匹配自己及子類類型 ? super T 匹配自己及父類類型)4.1.3 比較器 java.util. Comparable 其中只有一個需要實現(xiàn)的方法int compareTo(T o) 使用步驟:1.編寫元素對象類 2.元素類實現(xiàn)Comparable接口,在compareTo方法中實現(xiàn)比較規(guī)則 3.使用List的

34、實現(xiàn)集合添加多個元素對象 4.使用Collections.sort()方法對集合元素進行排序 實現(xiàn)Comparable接口局限性:對于一套集合只能配一套排序算法,多于多套排序規(guī)則無能為力。此時可以考慮使用java.util.Comparator接口實現(xiàn),在該接口中有一個核心方法int compare(T o1, T o2)需要實現(xiàn)。使用步驟:1.編寫比較器類,實現(xiàn)Comparator接口。 2.使用Collections(集合, 你自己的比較器對象);注:第二種方式,適合不修改元素類源碼,即可實現(xiàn)多種排序規(guī)則。 對于Set和Map使用TreeSet和TreeMap進

35、行排序,集合元素需要實現(xiàn)Comparable接口,如果實現(xiàn)多套排序規(guī)則,可以使用構(gòu)造方法綁定比較器對象完成。4.2.異常與單元測試4.2.1 異常異常:在代碼運行時發(fā)生的錯誤。4.2.2 異常分類java.lang. Throwable1. java.lang.Error 嚴(yán)重錯誤:1編譯 2.用戶不可干預(yù)的特殊異常2. java.lang.Exception 運行后發(fā)生不太嚴(yán)重的錯誤(程序員應(yīng)該盡量避免)2.1 非運行時異常:必須由程序員進行捕獲處理,否則需要向上拋出。2.2 運行時異常:1.無需拋出 2.JVM默認(rèn)處理方式(java.lang.RuntimeException)注:1.Ar

36、raysIndexOutOfBoundsExceptiion 2.StringIndexOutOfBoundsException3.NullPointerException4.ArithmeticException5.ClassCastException6. SystemException4.2.3 異常的處理在Java中異常處理:需要try catch finally throw throws 關(guān)鍵字異常處理語法:try catch(異常類型 參數(shù)) catch(異常類型 參數(shù)) | finally 異常處理機制:try塊中一旦出現(xiàn)異常,檢查catch部分異常類型,如果有對應(yīng)類型便交由對應(yīng)c

37、atch塊處理(異常順序應(yīng)由子向父排放),如有資源釋放可以放在finally語句塊中。(該語句塊無論如何都會執(zhí)行,甚至是return前)異常處理的原則:1.判斷可能出現(xiàn)錯誤的代碼 2.進行精確捕獲 3.如有必要分段捕獲為什么不使用異常父類接受所有異常:1.捕獲非運行異常,可能需要具體異常類對象的特殊方法2.對不同異常,進行合適的處理throw:手動拋出異常對象 throw new Exception(String);throws:聲明該方法有可能產(chǎn)生的異常,目的告訴調(diào)用者有這些異常需要處理。(運行時異??梢圆惶幚恚┳ⅲ簩τ谶\行時異常,如果強制調(diào)用者,提升運行時異常為非運行時異常。4.2.4 異

38、常的繼承關(guān)系如果出現(xiàn)繼承或者實現(xiàn)這樣的關(guān)系,要求子類(實現(xiàn)類)不能拋出更多的異常。要求子類不能拋出更多的異常,設(shè)計初衷是什么?如果只希望該方法完成字符串轉(zhuǎn)換,不希望有其他功能模塊,可以此種技術(shù),除非用戶自行處理其他模塊的異常。4.2.5 異常的逐級處理異常使用技巧:將當(dāng)前無法解決的問題交由調(diào)用者去解決,如果采用的非運行時異常進行通知,即變成強制要求用戶處理,或者繼續(xù)拋出。(錯誤日志,給前臺用戶轉(zhuǎn)遞提示信息)4.2.6 單元測試框架 使用規(guī)范:1.測試用列類在單獨的test包中 2.XxxTest 給測試類命名 3.test方法名 給測試方法命名JUnit(4.0支持注解 注解:給編譯器看的注釋

39、,為類或方法添加額外標(biāo)識。)BeforeClass 方法在類加載時執(zhí)行 AfterClass 方法在類釋放時執(zhí)行Before 方法在測試方法前執(zhí)行After 方法在測試方法后執(zhí)行Test 方法為測試方法Ignore 說明該測試方法暫時停止測試Assert(測試時使用的斷言類)4.3. GUI圖形用戶界面(Graphical User Interface)AWT抽象窗口工具集(Abstract Window Toolkit) java.awt.* => javax.swing.*(純Java代碼)組件(java.awt.Component) -> 容器(java.awt.Contai

40、ner) -> 窗口(java.awt.Window) -> 窗體(javax.swing.JFrame)1.創(chuàng)建組件對象2.將組件添加到容器中3.為組件添加事件處理內(nèi)部類4.3.1 JFrame4.3.2 JButton4.3.3 JTextField4.3.4 JPassword4.3.5 JCombBox4.3.6 JCheckBox4.3.7 JTable4.3.8 LayoutManager4.4. IO流 java.io包中4.4.1 IO流概念 (1.文件系統(tǒng) 2.數(shù)據(jù)流 3.序列化)IO(Input Output stream) 水流:1.連續(xù)性 2.方向性 3.源

41、頭盡頭以程序端參考數(shù)據(jù)的流向,程序獲取數(shù)據(jù)(Input),程序向外輸出數(shù)據(jù)(Output);作用:將內(nèi)存數(shù)據(jù)輸出到外部文件或網(wǎng)絡(luò),還可以獲取外部文件和網(wǎng)絡(luò)中的數(shù)據(jù)。重要作用做數(shù)據(jù)持久化。4.4.2 文件系統(tǒng)文件:File常用方法:File.separator獲取對應(yīng)系統(tǒng)的文件分隔符canRead()是否可讀canWrite()是否可寫createNewFile()創(chuàng)建指定文件名的空文件delete()刪除文件exists()判斷文件是否存在getAbsolutePath() getAbsoluteFile()獲取文件的完整物理路徑getName()獲取文件名稱 getParent() getP

42、arentFile()獲取父目錄的名稱isDirectory()判斷文件是否是目錄length()獲取文件的長度list() listFiles()獲取指定目錄下文件列表mkdirs()構(gòu)造完整目錄結(jié)構(gòu)(包括父目錄)4.4.3 數(shù)據(jù)流 字節(jié)流:數(shù)據(jù)類型是二進制100011100,傳遞非文本文件(視頻、音頻、壓縮文件)java.io.InputStream和java.io.OutputStream是字節(jié)流的父類字節(jié)流的功能AudioInputStream 獲取音頻流(*.mid *.wav)ByteArrayInputStream 內(nèi)存交互流ObjectInputStream 對象

43、序列化PipedInputStream 管道流(進程或者線程之間傳遞數(shù)據(jù))SequenceInputStream 順序流(將兩個數(shù)據(jù)流前后連接形成新的數(shù)據(jù)流).1 文件字節(jié)流 java.io.FileInputStream FileOutputStreamFileInputStream常見方法available()一次性能讀的文件長度close()關(guān)閉流,釋放系統(tǒng)資源read()一次只讀一個字節(jié),如果到文件結(jié)尾,返回-1read(byte b)一次讀取多個字節(jié),并裝入字節(jié)數(shù)組,同時返回讀取的真實個數(shù)read(byte,int int)一次讀取多個字節(jié),按指定范圍裝入sk

44、ip(long n)判斷文件是否存在.2 順序流作用:將多個流組合成一個完整的流SequenceInputStream sis = new SequenceInputStream(fis1, fis2);.3 音頻流/AudioInputStream 音頻流/AudioFormat 音頻格式 mid wav mp3/SourceDataLine 數(shù)據(jù)源行/AudioSystem 音頻提取File file = new File("C:UsersAdministratorDesktop黃子韜 - 十九歲.mp3");/音頻提取器提取音頻流

45、AudioInputStream ais = AudioSystem.getAudioInputStream(file);/獲取原始音頻的格式AudioFormat oldFormat = ais.getFormat();/對音頻編碼AudioFormat targetFormat = new AudioFormat(Encoding.PCM_SIGNED, oldFormat.getSampleRate(), 16, oldFormat.getChannels(), oldFormat.getChannels()*2, oldFormat.getSampleRate(), false);/產(chǎn)

46、生編碼后的輸入流AudioInputStream ais2 = AudioSystem.getAudioInputStream(targetFormat, ais);/對音頻行提取DataLine.Info info = new DataLine.Info(SourceDataLine.class, targetFormat);/創(chuàng)建音頻行的對象SourceDataLine sdl = (SourceDataLine)AudioSystem.getLine(info);/打開音頻行sdl.open(targetFormat);/開始音頻行讀取sdl.start();byte buf = new

47、 byte1024;int len = 0;while(len=ais2.read(buf) != -1) sdl.write(buf, 0, len);/聲卡調(diào)用結(jié)束sdl.stop();/音頻行關(guān)閉sdl.close();/音頻流關(guān)閉ais2.close();ais.close();4.4.4 字符流針對于非英語系的國家和地區(qū),提供了一套方便讀寫方式。java.io.Reader和java.io.Writer文件字符流java.io.FileReader和java.io.FileWriter4.4.5 轉(zhuǎn)換流作用:字符流的本質(zhì)就是字節(jié)流,所有字符流提供一種將自己轉(zhuǎn)化成字節(jié)流的

48、形式,或者字節(jié)流包裝成字符流。java.io.InputStreamReader和java.io.OutputStreamWriter (字節(jié)流=>字符流)4.4.6 節(jié)點流和包裝流(Java采用裝修(裝飾)模式)節(jié)點流:數(shù)據(jù)流的源頭(字節(jié)流 FileInputStream等 字符流:FileReader)包裝流:將節(jié)點流或其他的包裝流,按自己功能特點進行擴充,使數(shù)據(jù)流增加了對應(yīng)的功能。字節(jié)包裝流1. java.io.BufferedInputStream和java.io.BufferedOutputStream:使文件流帶緩沖功能,提高性能2. java.io.DataI

49、nputStream:對于基本數(shù)據(jù)類型進行了封裝,讀寫基本數(shù)據(jù)類型3. java.io.PrintStream:1.換行跨平臺2.打印任意類型3.與System.out是同一類型4.java.io.ObjectInputStream字符包裝流1. java.io.BufferedReader 和java.io.BufferedWriter 1.提高字符流讀寫性能 2.讀取整行4.4.7 對象序列化和反序列化對象序列化:對引用類型的數(shù)據(jù)進行持久化(讀寫)。java.io. ObjectInputStream和java.io. ObjectOutputStream完成對

50、象的序列化步驟:序列化的類要實現(xiàn)Serializable接口,同時該類中所有成員都需要實現(xiàn)該接口。擴展:序列化的內(nèi)容 1.對象的屬性 2.對象的類型 3.對象類的版本信息 (方法不序列化) 反序列化的條件1.比較類型是否一致 2.序列化的版本要與當(dāng)前的類的版本一致。結(jié)論:應(yīng)該對需要序列化的類,添加版本信息,方便后期代碼的擴展和維護。注意:保證序列化的對象的所有屬性都是可序列化的。父類序列化后,子類自動繼承了父類序列化的能力,但是依然建議添加序列化版本信息。 關(guān)鍵字transient作用:靈活的控制對象中哪些屬性的值不參與序列化。注意:就算使用transient修飾的成員也依然需要

51、實現(xiàn)Serializable接口。 Externalizable第二種實現(xiàn)序列化的方式:輕量級的實現(xiàn)。無需修改源碼,序列化容量小,速度快,但是沒有版本約束,安全性差。4.5.多線程(并發(fā))4.5.1 多線程概念 進程:程序運行時所征用的系統(tǒng)資源。 線程:是一種輕量級的進程,在進程的內(nèi)部進行并發(fā)執(zhí)行。注:Java的多線程依賴于操作系統(tǒng)是否支持。4.5.2 多線程的實現(xiàn)方式:本質(zhì)上只用一種1.繼承java.lang.Thread類實現(xiàn)步驟1.編寫Thread子類 2.重寫run()方法 3.實例化線程類 4.調(diào)用start()方法2.實現(xiàn)java.lang.Runnable3.實現(xiàn)java.util.Timer 配合 java.util.TimerTask,使用schedule4.實現(xiàn)線程池 jdk1.5后ExecutorService Executors FutureTask<Runnable|Callable>4.5.3 多線程常見方

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論