版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一.Java的特性: 1.第一個(gè)純面向?qū)ο缶幊陶Z(yǔ)言2.是一個(gè)類C的語(yǔ)言,去掉C+里面多繼承、指針、析構(gòu)函數(shù)(Java實(shí)現(xiàn)代碼托管JVM)3.是一個(gè)跨平臺(tái)的編程語(yǔ)言(一次編譯,處處運(yùn)行)4.Java是一個(gè)編譯解釋型語(yǔ)言5.Java是一個(gè)免費(fèi)開(kāi)源的編程語(yǔ)言編譯型語(yǔ)言:源代碼 ->編譯程序->可執(zhí)行程序解釋型語(yǔ)言:源代碼->解釋程序->邊解釋邊執(zhí)行編譯解釋型語(yǔ)言:Java 源代碼->(javac)編譯程序->(xxx.class)中間件(字節(jié)碼文件)->(java)解釋程序(JRE Java運(yùn)行時(shí)環(huán)境)->邊解釋邊執(zhí)行JavaSE Standard E
2、dition Java標(biāo)準(zhǔn)版本 JavaEE Enterprise Edition Java企業(yè)版本JavaME Micro Edition Java微型版本Java開(kāi)發(fā)步驟 1.獲取對(duì)應(yīng)OS的編譯程序和解釋程序(JDK)2.選擇執(zhí)行平臺(tái)對(duì)應(yīng)版本的JDK3.安裝JDKJDK目錄結(jié)構(gòu)bin -所有的JDK可執(zhí)行程序(javac.exe 編譯程序解釋程序)db -Java內(nèi)置的小型數(shù)據(jù)庫(kù)include -NDK(本地化開(kāi)發(fā)包) JIT java in timejre -Java運(yùn)行時(shí)環(huán)境lib -庫(kù)文件是Java全部系統(tǒng)函數(shù) src.zip -Java的源文件4.配置環(huán)境變量配置Path變量配置J
3、AVA_HOME變量重新開(kāi)啟CMD命令鍵入javac命令測(cè)試是否配置成功5.開(kāi)發(fā)第一個(gè)Java程序新建文本文件,將后綴名改為.java6.使用EditPlus編輯該文件前對(duì)EditPlus進(jìn)行配置 編寫第一個(gè)Java程序public class Test public static void main(String args) System.out.println("hello,Java,我是牛牛");二.1.Java語(yǔ)言的注釋/ 單行注釋/* 多行注釋*/* 文檔注釋* */文檔注釋的使用:javadoc Test.java -d c:help -version -aut
4、hor2.Java中的變量2.1 計(jì)算機(jī)存儲(chǔ)形式:以字節(jié)為存儲(chǔ)單位 1byte = 8bit 計(jì)算機(jī)是二進(jìn)制的世界 二進(jìn)制->十進(jìn)制轉(zhuǎn)換(1.對(duì)應(yīng)法eg 101 1*22 + 0*21 + 1*20 = 5 2.8421法)十進(jìn)制->二進(jìn)制(除2求余法, 余數(shù)倒序的數(shù)列)可以使用十六進(jìn)制簡(jiǎn)化十進(jìn)制長(zhǎng)度,是一組表示方法。范圍是0-9A-F2.2變量的類型 關(guān)鍵字:Java語(yǔ)言預(yù)置的標(biāo)識(shí)符,有特定功能。51個(gè)關(guān)鍵字其中g(shù)oto,const是關(guān)鍵字中的保留字標(biāo)識(shí)符:編程人員可以自定義的變量名,標(biāo)識(shí)符規(guī)則:只能包含四種字符0-9 a-zA-Z _ $, 同時(shí)不能由數(shù)字開(kāi)頭,遵循的原則是:見(jiàn)
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運(yùn)算符1.算術(shù)運(yùn)算符 + - * / % += -= *= /= + -(注意:前后置不同)2.賦值運(yùn)算符 = (注意:賦值運(yùn)算符兩邊類型要匹配,如果不
6、匹配,Java會(huì)嘗試自動(dòng)轉(zhuǎn)型 Java中自動(dòng)轉(zhuǎn)型原則是:小容量自動(dòng)變?yōu)榇笕萘?,整形自?dòng)提升成浮點(diǎn)型)(注意:Java中可以由編程人員完成手動(dòng)轉(zhuǎn)型,在數(shù)據(jù)前面使用(目標(biāo)類型)強(qiáng)制轉(zhuǎn)型) 3.邏輯運(yùn)算符 &&與 |或 !非 異或 (注意:在Java中邏輯運(yùn)算符分為全操作和短路操作 &&表示短路 &表示全運(yùn)算 開(kāi)發(fā)時(shí)候盡量使用短路操作) 4.關(guān)系運(yùn)算符 > < >= <= != = 5.邏輯位運(yùn)算符 & | 6.位運(yùn)算符 << >> >>> 7.字符串連接符 + (注意:在Java中會(huì)使
7、其他操作數(shù)類型自動(dòng)轉(zhuǎn)為字符串)2.5表達(dá)式優(yōu)先級(jí)單目運(yùn)算符 > 雙目運(yùn)算符 三目運(yùn)算符 布爾值?值1:值2 算術(shù)運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯運(yùn)算符 > 賦值運(yùn)算符 (建議:開(kāi)發(fā)使用()顯示優(yōu)先級(jí)關(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)控制語(yǔ)句 continue break return (System.
8、exit() 可以使用轉(zhuǎn)義字符完成一些特殊效果 r n t '一'(19968) '龥'(40869) (char)7為響鈴2.7 局部變量的作用范圍Java中的局部變量只在聲明的語(yǔ)句塊中有效,一旦脫離語(yǔ)句塊自動(dòng)釋放。 注意:在對(duì)性能要求苛刻的編程環(huán)境,常常采用即用即釋放的方式,提高內(nèi)存的使用效率。2.8 數(shù)組的定義和使用Java中的數(shù)組特點(diǎn):1.多個(gè)元素是同一種數(shù)據(jù)類型 2.元素的順序在內(nèi)存里是連續(xù)的 3.元素下標(biāo)是從0開(kāi)始的4數(shù)組的長(zhǎng)度是通過(guò)length屬性獲取 5.數(shù)組是一種引用類型 6.Java多維數(shù)組只是數(shù)組中的數(shù)組 7.數(shù)組的長(zhǎng)度一旦聲明,是不可改變
9、(定長(zhǎng)) Java中定義數(shù)組: 數(shù)組元素類型 數(shù)組變量名 = new 數(shù)組元素類型長(zhǎng)度;Java中定義多維數(shù)組: 數(shù)組元素類型. 數(shù)組變量名 = new 數(shù)組元素類型長(zhǎng)度長(zhǎng)度;Java中內(nèi)存區(qū)域功能: 加載區(qū): 1.加載當(dāng)前運(yùn)行的class文件 2.加載import的class文件 3.進(jìn)行安全校驗(yàn) 4.進(jìn)入預(yù)執(zhí)行狀態(tài)(機(jī)器碼) 5.執(zhí)行 棧: 局部變量,基本數(shù)據(jù)類型的值直接保存在棧中,引用類型的址保存在棧中,空間小,速度快 堆: new出來(lái)的,空間大,速度有限 共享區(qū): 放置常量值和靜態(tài)變量、靜態(tài)常量new關(guān)鍵字:使用new在堆內(nèi)存中開(kāi)辟的區(qū)域都會(huì)自動(dòng)賦值整形自動(dòng)賦0 浮點(diǎn)自動(dòng)賦0.0 bo
10、olean自動(dòng)賦false char自動(dòng)賦值'u0000' 引用類型自動(dòng)賦null數(shù)組中常見(jiàn)的運(yùn)行時(shí)異常: java.lang.ArrayIndexOutOfBoundsException2.9 字符串Java的字符串在java.lang.String中Java中字符串是常量 (注意:常量:是一旦賦值后不可再改變的內(nèi)存區(qū)域。在Java中使用final 來(lái)定義常量)常量的定義 規(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)生大量臨時(shí)垃圾的問(wèn)題,Java提供了java.lang.StringBuffer(同步 安全 性能稍低)和java.lang.StringBuilder(不安全,性能高) .append()字符串中常見(jiàn)的運(yùn)行時(shí)異常: java.lang.StringIndexOutOfBoundsException字符串 java.lang.String java.lang.StringBuffercharA
12、t()獲取字符串對(duì)應(yīng)數(shù)組位置的字符compareTo()返回正整數(shù)表示前面大,返回負(fù)數(shù)后面大,返回0一樣大。注:在Java中字符串的比較是以字符的Unicode編碼值Contains()判斷母串中是否有子串,返回true或falseEquals()比較兩個(gè)字符串內(nèi)容,相同返回trueequalsIgnoreCase()忽略大小寫比較,相同返回trueindexOf()在字符串中檢索指定內(nèi)容,找到就返回第一次出現(xiàn)的下標(biāo)位置,若無(wú)則返回-1lastIndexOf()從后向前檢索,返回第一次遇到的下標(biāo)Replace(舊,新)將字符串中指定內(nèi)容進(jìn)行替換Split(分隔字符串)將字符串按照指定字符串分割
13、成字符串?dāng)?shù)組Substring()從母串提取子串第一個(gè)參數(shù)起始下標(biāo),第二參數(shù)結(jié)束下標(biāo)(不包含)startsWith()判斷字符串是否以指定字符開(kāi)始toCharArray()將字符串轉(zhuǎn)換成字符數(shù)組toLowerCase()將字符串內(nèi)字母轉(zhuǎn)換成小寫toUpperCase()將字符串內(nèi)字母轉(zhuǎn)換成大寫trim()去前后的空格valueOf()將基本數(shù)據(jù)類型轉(zhuǎn)化成字符串類型length()獲取字符串的長(zhǎng)度replaceAll()使用正則表達(dá)式進(jìn)行替換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()求絕對(duì)值Floor()取比他小的數(shù)里最大的整數(shù)Ceil()取比他大的數(shù)里最小的整數(shù)Max(值1, 值2)取兩個(gè)數(shù)里最大的Min(值1, 值2)取兩個(gè)數(shù)里最小的Pow(2, 3)取冪次方round()取四舍五入值random()獲取>=0.0 到 < 1.0的隨機(jī)數(shù) 可以配合ceil()獲取指定范圍的數(shù)值日期類 (常見(jiàn)的非運(yùn)行時(shí)異常java.text.ParseException) Java.util.DateDate now = new Date(); now = new Date(長(zhǎng)整形); 等
15、效setTime(長(zhǎng)整型)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è)置時(shí)區(qū),再設(shè)置時(shí)間 c.setTime(date類型);正則表達(dá)式j(luò)ava.util.regex. Matcher 不能使用import java.util.* Java不會(huì)引入子文件夾里的類java.util.regex.Pattern正則表達(dá)式功能:1.匹配 2.查找(替換) 正則表達(dá)式有旗識(shí)位 全局 (g) 忽略大小寫 (i) 多行 (m) Java中正則的使用方式1.Pattern p = Ppi
17、le("正則表達(dá)式字符串"); Matcher m = p.matcher("用戶字符串"); boolean b = m.matches(); 2.使用String直接支持正則表達(dá)式方法(此方法無(wú)需引入正則文件夾) eg: boolean b = "用戶字符串". matches("正則表達(dá)式字符串")查找 /用戶字符串 String s = ""/查找Pattern p = Ppile("java", Pattern.CASE_INSENSITIVE); /正則規(guī)則Mat
18、cher m = p.matcher(s); /獲取匹配器/查找所有匹配出來(lái)組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方法的定義和使用方法:是一系列的語(yǔ)句,這些語(yǔ)句至少完成一個(gè)特定的功能。方法作用:使代碼復(fù)用。方法的定義: 修飾符 返回類型 方法名稱(參數(shù)類型 參數(shù)名,.) 方法在類里面聲明,而不是在方法中。方法的調(diào)用:在同一個(gè)類中,直接調(diào)用void:該返回類型要求無(wú)值返回接收方法返回結(jié)果: 返回類型 結(jié)果 = 方法(參數(shù)類型 參數(shù)名,.);方法名和變量名使用駝峰命名法: xxxYyyZzz方法參數(shù)如果是(基本數(shù)據(jù)類型或者是String)方法內(nèi)的改變不會(huì)影響外面的變量,但是如果是其他引用類型,
20、方法內(nèi)的改變會(huì)將影響外面的變量2.11 方法的重載(overload) 重載的作用:方便用戶調(diào)用如何形成重載:方法名相同,參數(shù)列表不同參數(shù)個(gè)數(shù)|參數(shù)類型不同|參數(shù)順序(重載條件) 注:返回類型不同,不作為重載的條件2.12遞歸方法2.13數(shù)組操作類 Java.util.Arrays1.升序排序 Arrays.sort(數(shù)組);2.二分查找 Arrays.binarySearch(數(shù)組, 查找值); 注:二分查找前,需對(duì)數(shù)組進(jìn)行排序3.填充內(nèi)容 Arrays.fill(數(shù)組, 填充值);2.14 Eclipse工具的使用快速刪除行 ctrl + D快速?gòu)?fù)制行 ctrl + alt + 方向鍵快速
21、移動(dòng)行 alt + 方向鍵快速單行注釋切換 ctrl + /快速多行注釋 ctrl + shift + /快速多行去注釋 ctrl + shift + */快速運(yùn)行程序 ctrl + f11*/f5進(jìn)入深層運(yùn)行 f6跳過(guò)方法運(yùn)行 f7跳過(guò)方法后續(xù),返回調(diào)用處 f8跳過(guò)后續(xù)正常運(yùn)行三 面向?qū)ο?.1 封裝(把現(xiàn)實(shí)中的事物,用數(shù)據(jù)類型的方式進(jìn)行描述,描述是兩種狀態(tài)(靜態(tài)(字段)和動(dòng)態(tài)(方法)))類:類型 采集相同特性信息則可以分為一類,客觀不存在字段:field(屬性) 對(duì)象:一個(gè)類的特例(實(shí)例),客觀存在的,萬(wàn)物皆對(duì)象。使用類就是創(chuàng)建對(duì)象的過(guò)程構(gòu)造方法:與類名稱相同的方法構(gòu)造方法特點(diǎn):1.該方法
22、沒(méi)有返回 2.構(gòu)造方法是自動(dòng)調(diào)用,不能手動(dòng)調(diào)用3.構(gòu)造方法會(huì)為字段賦初值4.任何一個(gè)普通類都至少有一個(gè)構(gòu)造方法構(gòu)造方法的重載:一旦我們創(chuàng)建一個(gè)有參構(gòu)造,系統(tǒng)就不會(huì)提供無(wú)參構(gòu)造。通過(guò)反編譯命令javap 類名稱 觀察成員變量和局部變量成員變量:直接放在類中的字符,成員的變量在整個(gè)類都有效,使用m_作為前綴this變量:保存的是對(duì)象自身的地址,可以使用this.成員可以使用this(參數(shù))調(diào)用帶參數(shù)的構(gòu)造方法,但是必須是第一句。包:在Java中包就是組織類的方式,相同與文件目錄,目的是保證項(xiàng)目之間的類名不沖突。使用javac -d . Test.java 可以編譯時(shí)自動(dòng)打包包名規(guī)范:package
23、 com.公司名稱.項(xiàng)目名稱.項(xiàng)目組名稱.項(xiàng)目成員名稱.模塊名稱;注:包名全小寫,只有字母數(shù)字執(zhí)行帶包的字節(jié)碼的命令: java ject1.team1.howie.studentmrg.Test訪問(wèn)修飾符: public private default protected(什么都不寫)public 所有類(跨包)都可以訪問(wèn)default 同包可以訪問(wèn)private 同一類可以訪問(wèn)protected 有繼承關(guān)系則可以訪問(wèn),跨包也可第三個(gè)運(yùn)行時(shí)異常:java.lang.NullPointerException3.2 繼承產(chǎn)生的原因:解決過(guò)度封裝,抽取共性,統(tǒng)一管理。
24、3.2.1 static 靜態(tài)變量(類變量)特點(diǎn):1.屬于類的共享數(shù)據(jù) 2.代碼加載時(shí),在共享區(qū)創(chuàng)建 3.形成靜態(tài)代碼塊4.創(chuàng)建的順序快于創(chuàng)建對(duì)象,且只有一次 5.靜態(tài)的方法只能訪問(wèn)靜態(tài)變量,成員方法即可以訪問(wèn)成員變量也可以訪問(wèn)靜態(tài)變量靜態(tài)方法(類方法)作用:無(wú)需堆空間,就可以進(jìn)行方法的調(diào)用,而且由于只有一份更加節(jié)省內(nèi)存。靜態(tài)常量:節(jié)省內(nèi)存,方便調(diào)用,產(chǎn)生的時(shí)間靠前 3.2.2 extends Java繼承特點(diǎn):1.Java只允許單繼承 2.Java類有且僅有一個(gè)父類(Object是根類) 3.Java里的父類也稱為(超類|基類) 4.為了方便繼承鏈完整,往往在父類明確編寫無(wú)參構(gòu)造。 3.2.
25、3 super1.Java中使用super明確引用父類(直接)的成員2.可以使用super()調(diào)用父類的構(gòu)造方法,該調(diào)用語(yǔ)句只能在子類構(gòu)造方法中使用,而且必須是第一句。 3.2.4里氏替換原則 子類自動(dòng)向父類轉(zhuǎn)型,但是會(huì)丟失子類特性。 父類強(qiáng)制向子類轉(zhuǎn)型,重新獲取子類特性。 父類 = new A子類; B子類 = (B)父類; 由于無(wú)法還原:java.lang.ClassCastException 3.2.5 instanceof使用insanceof 判斷里氏替換是否能夠成功 3.2.6 重寫 重寫或覆蓋(override)是在繼承關(guān)系中,強(qiáng)化或著重寫父類功能,重寫方法要與父類中的方法聲明完
26、全相同(訪問(wèn)修飾符可以不同,更加的公開(kāi),父類中不能是私有)3.3多態(tài)產(chǎn)生的原因:繼承父子類型轉(zhuǎn)換不方便,多態(tài)可以完成自動(dòng)轉(zhuǎn)型多態(tài):按照實(shí)例的具體類型,做對(duì)應(yīng)的操作。(一定要有繼承,一定要有重寫 Java默認(rèn)實(shí)現(xiàn)的虛函數(shù))3.3.1抽象類 (1.強(qiáng)制要求多態(tài)的實(shí)現(xiàn) 2.避免用戶創(chuàng)建橋接類 3.節(jié)省內(nèi)存)where(設(shè)計(jì)父類)1.是使用abstract關(guān)鍵字修飾的類2.抽象類不能實(shí)例化(不能new)3.方法可以用abstract修飾,成為抽象方法,抽象方法沒(méi)有實(shí)現(xiàn)語(yǔ)句4.有抽象方法的類,一定是抽象類,但是抽象類中可以沒(méi)有抽象方法。5.抽象方法需要被子類實(shí)現(xiàn),此時(shí)子類無(wú)需成為抽象類,但是如果子類沒(méi)有
27、實(shí)現(xiàn)父類的抽象方法,子類一定是抽象類。6.抽象類一定不能是終結(jié)類。7.抽象類有構(gòu)造方法,而且可以對(duì)構(gòu)造方法重載。3.3.2接口(1.支持多實(shí)現(xiàn),靈活 2.不占父類的名額 3.模擬枚舉 4.制定標(biāo)準(zhǔn)(類標(biāo)識(shí)) where(設(shè)計(jì)父接口)1.使用interface關(guān)鍵字定義接口, 接口里面沒(méi)有任何實(shí)現(xiàn)方法,接口不能實(shí)例化(不能new)2.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口3.類實(shí)現(xiàn)接口的關(guān)鍵字implements ,實(shí)現(xiàn)接口冊(cè)需要實(shí)現(xiàn)接口中的所有方法,否則實(shí)現(xiàn)類成為抽象類。4.接口中的方法必須是public5.接口中的成員變量必須是public static final修飾的常量6.接口可以繼承接口,接口可以多
28、繼承7.接口使用Pascal命名法,常常加able為后綴,表示類具備某種能力。四.面向?qū)ο蟾呒?jí)4.1.容器(集合):容納多個(gè)對(duì)象。4.1.1裝單個(gè)對(duì)象<<java.util.Collection>>(接口)<<java.util.List>>(接口)1.有序 2.可重復(fù) 3.內(nèi)存連續(xù) 特點(diǎn):查詢快,修改慢 java.util.ArrayList 注:需要重寫Object中equals()定義比較規(guī)則,完成部分操作常用方法Add(Object)追加對(duì)象元素Add(int, Object)在指定位置添加元素addAll(Collection)追加集合
29、對(duì)象addAll(int, Collection)在指定位置添加集合對(duì)象Remove(int)刪除指定位置的對(duì)象Remove(Object)刪除對(duì)象(需要按自己的比較規(guī)則重寫equals()removeRange(int,int)刪除指定下標(biāo)范圍的對(duì)象,結(jié)束下標(biāo)不包含Clear()刪除所有元素對(duì)象Contains(object)查看是否包含該對(duì)象Size()獲取集合對(duì)象個(gè)數(shù)toArray()將集合轉(zhuǎn)換成對(duì)象數(shù)組toArray(泛型)Student objs = new Studentlist.size();list.toArray(objs);Get(int)按下標(biāo)位置獲取對(duì)象indexOf(
30、object)獲取對(duì)象下標(biāo)第一次出現(xiàn)位置Set(int, Object)替換指定位置對(duì)象java.util.LinkedList 棧(FILO) 隊(duì)列(FIFO)常用方法addFirst(Object)添加到頭部addLast(Object)添加到尾部getFirst()獲取頭部getLast()獲取尾部removeFirst()移除頭部removeLast()移除尾部Get(int)按下標(biāo)位置獲取對(duì)象 沙箱 在Java1.5后提供的基本數(shù)據(jù)類型與引用類型的轉(zhuǎn)換機(jī)制int i = 10; Object obj = i; /自動(dòng)裝箱 基本數(shù)據(jù)->封裝類->Object
31、double j = (double)obj; /手動(dòng)拆箱 Object->封裝類->基本數(shù)據(jù)類型 Vector類和Hashtable類Vector(同步 安全 性能較低 追加一倍)ArrayList(不同步 不安全 高效 追加一半)Hashtable(同步)<<java.util.Set>>(接口)1.無(wú)序 2.不可重復(fù)(一個(gè)null) 3.內(nèi)存不連續(xù) 特點(diǎn):查詢慢, 修改快哈希算法:產(chǎn)生一個(gè)盡量做到散列分布的地址系數(shù)java.util.HashSet java.util.TreeSet(排序)由于使用了哈希算法,內(nèi)存存在哈希表,找尋對(duì)象先找
32、哈希表(hashcode(),再找對(duì)象4.1.2裝鍵值KeyValue對(duì)象 <<java.util.Map>>常用方法containsKey(Object key)判斷是否有指定鍵containsValue(Object value)判斷是否有指定值entrySet()獲取鍵值對(duì)象集合Set(Map.Entry)get(Object key)按鍵獲取值keySet()獲取所有鍵的集合put(K , V )在集合中添加鍵值對(duì)象putAll(Map)在集合中添加子集合values()獲取所有值的集合java.util.Has
33、hMap(異步,性能較好)java.util.Hashtable(同步,性能較差,使用較老API進(jìn)行迭代)4.1.3泛型 在編譯期就對(duì)數(shù)據(jù)類型進(jìn)行嚴(yán)格檢查,如果類型不匹配,編譯無(wú)法通過(guò)。自定義泛型:1.精確指定 2.模糊指定(? 匹配任意類型 ? extends T 匹配自己及子類類型 ? super T 匹配自己及父類類型)4.1.3 比較器 java.util. Comparable 其中只有一個(gè)需要實(shí)現(xiàn)的方法int compareTo(T o) 使用步驟:1.編寫元素對(duì)象類 2.元素類實(shí)現(xiàn)Comparable接口,在compareTo方法中實(shí)現(xiàn)比較規(guī)則 3.使用List的
34、實(shí)現(xiàn)集合添加多個(gè)元素對(duì)象 4.使用Collections.sort()方法對(duì)集合元素進(jìn)行排序 實(shí)現(xiàn)Comparable接口局限性:對(duì)于一套集合只能配一套排序算法,多于多套排序規(guī)則無(wú)能為力。此時(shí)可以考慮使用java.util.Comparator接口實(shí)現(xiàn),在該接口中有一個(gè)核心方法int compare(T o1, T o2)需要實(shí)現(xiàn)。使用步驟:1.編寫比較器類,實(shí)現(xiàn)Comparator接口。 2.使用Collections(集合, 你自己的比較器對(duì)象);注:第二種方式,適合不修改元素類源碼,即可實(shí)現(xiàn)多種排序規(guī)則。 對(duì)于Set和Map使用TreeSet和TreeMap進(jìn)
35、行排序,集合元素需要實(shí)現(xiàn)Comparable接口,如果實(shí)現(xiàn)多套排序規(guī)則,可以使用構(gòu)造方法綁定比較器對(duì)象完成。4.2.異常與單元測(cè)試4.2.1 異常異常:在代碼運(yùn)行時(shí)發(fā)生的錯(cuò)誤。4.2.2 異常分類java.lang. Throwable1. java.lang.Error 嚴(yán)重錯(cuò)誤:1編譯 2.用戶不可干預(yù)的特殊異常2. java.lang.Exception 運(yùn)行后發(fā)生不太嚴(yán)重的錯(cuò)誤(程序員應(yīng)該盡量避免)2.1 非運(yùn)行時(shí)異常:必須由程序員進(jìn)行捕獲處理,否則需要向上拋出。2.2 運(yùn)行時(shí)異常:1.無(wú)需拋出 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)鍵字異常處理語(yǔ)法:try catch(異常類型 參數(shù)) catch(異常類型 參數(shù)) | finally 異常處理機(jī)制:try塊中一旦出現(xiàn)異常,檢查catch部分異常類型,如果有對(duì)應(yīng)類型便交由對(duì)應(yīng)c
37、atch塊處理(異常順序應(yīng)由子向父排放),如有資源釋放可以放在finally語(yǔ)句塊中。(該語(yǔ)句塊無(wú)論如何都會(huì)執(zhí)行,甚至是return前)異常處理的原則:1.判斷可能出現(xiàn)錯(cuò)誤的代碼 2.進(jìn)行精確捕獲 3.如有必要分段捕獲為什么不使用異常父類接受所有異常:1.捕獲非運(yùn)行異常,可能需要具體異常類對(duì)象的特殊方法2.對(duì)不同異常,進(jìn)行合適的處理throw:手動(dòng)拋出異常對(duì)象 throw new Exception(String);throws:聲明該方法有可能產(chǎn)生的異常,目的告訴調(diào)用者有這些異常需要處理。(運(yùn)行時(shí)異??梢圆惶幚恚┳ⅲ簩?duì)于運(yùn)行時(shí)異常,如果強(qiáng)制調(diào)用者,提升運(yùn)行時(shí)異常為非運(yùn)行時(shí)異常。4.2.4 異
38、常的繼承關(guān)系如果出現(xiàn)繼承或者實(shí)現(xiàn)這樣的關(guān)系,要求子類(實(shí)現(xiàn)類)不能拋出更多的異常。要求子類不能拋出更多的異常,設(shè)計(jì)初衷是什么?如果只希望該方法完成字符串轉(zhuǎn)換,不希望有其他功能模塊,可以此種技術(shù),除非用戶自行處理其他模塊的異常。4.2.5 異常的逐級(jí)處理異常使用技巧:將當(dāng)前無(wú)法解決的問(wèn)題交由調(diào)用者去解決,如果采用的非運(yùn)行時(shí)異常進(jìn)行通知,即變成強(qiáng)制要求用戶處理,或者繼續(xù)拋出。(錯(cuò)誤日志,給前臺(tái)用戶轉(zhuǎn)遞提示信息)4.2.6 單元測(cè)試框架 使用規(guī)范:1.測(cè)試用列類在單獨(dú)的test包中 2.XxxTest 給測(cè)試類命名 3.test方法名 給測(cè)試方法命名JUnit(4.0支持注解 注解:給編譯器看的注釋
39、,為類或方法添加額外標(biāo)識(shí)。)BeforeClass 方法在類加載時(shí)執(zhí)行 AfterClass 方法在類釋放時(shí)執(zhí)行Before 方法在測(cè)試方法前執(zhí)行After 方法在測(cè)試方法后執(zhí)行Test 方法為測(cè)試方法Ignore 說(shuō)明該測(cè)試方法暫時(shí)停止測(cè)試Assert(測(cè)試時(shí)使用的斷言類)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)建組件對(duì)象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獲取對(duì)應(yīng)系統(tǒng)的文件分隔符canRead()是否可讀canWrite()是否可寫createNewFile()創(chuàng)建指定文件名的空文件delete()刪除文件exists()判斷文件是否存在getAbsolutePath() getAbsoluteFile()獲取文件的完整物理路徑getName()獲取文件名稱 getParent() getP
42、arentFile()獲取父目錄的名稱isDirectory()判斷文件是否是目錄length()獲取文件的長(zhǎng)度list() listFiles()獲取指定目錄下文件列表mkdirs()構(gòu)造完整目錄結(jié)構(gòu)(包括父目錄)4.4.3 數(shù)據(jù)流 字節(jié)流:數(shù)據(jù)類型是二進(jìn)制100011100,傳遞非文本文件(視頻、音頻、壓縮文件)java.io.InputStream和java.io.OutputStream是字節(jié)流的父類字節(jié)流的功能AudioInputStream 獲取音頻流(*.mid *.wav)ByteArrayInputStream 內(nèi)存交互流ObjectInputStream 對(duì)象
43、序列化PipedInputStream 管道流(進(jìn)程或者線程之間傳遞數(shù)據(jù))SequenceInputStream 順序流(將兩個(gè)數(shù)據(jù)流前后連接形成新的數(shù)據(jù)流).1 文件字節(jié)流 java.io.FileInputStream FileOutputStreamFileInputStream常見(jiàn)方法available()一次性能讀的文件長(zhǎng)度close()關(guān)閉流,釋放系統(tǒng)資源read()一次只讀一個(gè)字節(jié),如果到文件結(jié)尾,返回-1read(byte b)一次讀取多個(gè)字節(jié),并裝入字節(jié)數(shù)組,同時(shí)返回讀取的真實(shí)個(gè)數(shù)read(byte,int int)一次讀取多個(gè)字節(jié),按指定范圍裝入sk
44、ip(long n)判斷文件是否存在.2 順序流作用:將多個(gè)流組合成一個(gè)完整的流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();/對(duì)音頻編碼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);/對(duì)音頻行提取DataLine.Info info = new DataLine.Info(SourceDataLine.class, targetFormat);/創(chuàng)建音頻行的對(duì)象SourceDataLine sdl = (SourceDataLine)AudioSystem.getLine(info);/打開(kāi)音頻行sdl.open(targetFormat);/開(kāi)始音頻行讀取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 字符流針對(duì)于非英語(yǔ)系的國(guó)家和地區(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é)點(diǎn)流和包裝流(Java采用裝修(裝飾)模式)節(jié)點(diǎn)流:數(shù)據(jù)流的源頭(字節(jié)流 FileInputStream等 字符流:FileReader)包裝流:將節(jié)點(diǎn)流或其他的包裝流,按自己功能特點(diǎn)進(jìn)行擴(kuò)充,使數(shù)據(jù)流增加了對(duì)應(yīng)的功能。字節(jié)包裝流1. java.io.BufferedInputStream和java.io.BufferedOutputStream:使文件流帶緩沖功能,提高性能2. java.io.DataI
49、nputStream:對(duì)于基本數(shù)據(jù)類型進(jìn)行了封裝,讀寫基本數(shù)據(jù)類型3. java.io.PrintStream:1.換行跨平臺(tái)2.打印任意類型3.與System.out是同一類型4.java.io.ObjectInputStream字符包裝流1. java.io.BufferedReader 和java.io.BufferedWriter 1.提高字符流讀寫性能 2.讀取整行4.4.7 對(duì)象序列化和反序列化對(duì)象序列化:對(duì)引用類型的數(shù)據(jù)進(jìn)行持久化(讀寫)。java.io. ObjectInputStream和java.io. ObjectOutputStream完成對(duì)
50、象的序列化步驟:序列化的類要實(shí)現(xiàn)Serializable接口,同時(shí)該類中所有成員都需要實(shí)現(xiàn)該接口。擴(kuò)展:序列化的內(nèi)容 1.對(duì)象的屬性 2.對(duì)象的類型 3.對(duì)象類的版本信息 (方法不序列化) 反序列化的條件1.比較類型是否一致 2.序列化的版本要與當(dāng)前的類的版本一致。結(jié)論:應(yīng)該對(duì)需要序列化的類,添加版本信息,方便后期代碼的擴(kuò)展和維護(hù)。注意:保證序列化的對(duì)象的所有屬性都是可序列化的。父類序列化后,子類自動(dòng)繼承了父類序列化的能力,但是依然建議添加序列化版本信息。 關(guān)鍵字transient作用:靈活的控制對(duì)象中哪些屬性的值不參與序列化。注意:就算使用transient修飾的成員也依然需要
51、實(shí)現(xiàn)Serializable接口。 Externalizable第二種實(shí)現(xiàn)序列化的方式:輕量級(jí)的實(shí)現(xiàn)。無(wú)需修改源碼,序列化容量小,速度快,但是沒(méi)有版本約束,安全性差。4.5.多線程(并發(fā))4.5.1 多線程概念 進(jìn)程:程序運(yùn)行時(shí)所征用的系統(tǒng)資源。 線程:是一種輕量級(jí)的進(jìn)程,在進(jìn)程的內(nèi)部進(jìn)行并發(fā)執(zhí)行。注:Java的多線程依賴于操作系統(tǒng)是否支持。4.5.2 多線程的實(shí)現(xiàn)方式:本質(zhì)上只用一種1.繼承java.lang.Thread類實(shí)現(xiàn)步驟1.編寫Thread子類 2.重寫run()方法 3.實(shí)例化線程類 4.調(diào)用start()方法2.實(shí)現(xiàn)java.lang.Runnable3.實(shí)現(xiàn)java.util.Timer 配合 java.util.TimerTask,使用schedule4.實(shí)現(xiàn)線程池 jdk1.5后ExecutorService Executors FutureTask<Runnable|Callable>4.5.3 多線程常見(jiàn)方
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班音樂(lè)教育的實(shí)踐與探索計(jì)劃
- 爐邊產(chǎn)品銷售合同三篇
- 讓每個(gè)孩子在班級(jí)中閃耀光芒計(jì)劃
- 太陽(yáng)能電池組件相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 健康保健服務(wù)相關(guān)行業(yè)投資方案
- 農(nóng)業(yè)運(yùn)輸機(jī)械行業(yè)相關(guān)投資計(jì)劃提議范本
- 《信陽(yáng)技工學(xué)?!氛n件
- xx鄉(xiāng)村級(jí)網(wǎng)格化管理方案
- 《保健品科普收單》課件
- 【培訓(xùn)課件】貨品分析-店長(zhǎng)培訓(xùn)
- 《中國(guó)心力衰竭診斷和治療指南2024》解讀(總)
- 知道智慧網(wǎng)課《會(huì)計(jì)學(xué)原理》章節(jié)測(cè)試答案
- 《道德經(jīng)》的智慧啟示智慧樹(shù)知到期末考試答案2024年
- 2024年大學(xué)生心理健康教育考試題庫(kù)及答案(含各題型)
- 支撐架施工驗(yàn)收記錄表
- 2021知到答案【音樂(lè)的美及其鑒賞】智慧樹(shù)網(wǎng)課章節(jié)測(cè)試答案
- 小學(xué)足球課時(shí)教案:足球隊(duì)訓(xùn)練計(jì)劃
- 腮裂囊腫ppt課件(PPT 17頁(yè))
- 螺旋千斤頂課程設(shè)計(jì)說(shuō)明書(shū)
- 新產(chǎn)品研發(fā)流程(課堂PPT)
- 2《只有一個(gè)地球》閱讀及答案
評(píng)論
0/150
提交評(píng)論