學(xué)習(xí)-java各知識點詳細(xì)總結(jié)_第1頁
學(xué)習(xí)-java各知識點詳細(xì)總結(jié)_第2頁
學(xué)習(xí)-java各知識點詳細(xì)總結(jié)_第3頁
學(xué)習(xí)-java各知識點詳細(xì)總結(jié)_第4頁
學(xué)習(xí)-java各知識點詳細(xì)總結(jié)_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java基礎(chǔ)知識總寫代碼1,2,分析思路。我要怎么做?1,2,33,4,java學(xué)習(xí)新技術(shù)的四1,2,3,該技術(shù)怎么使用。4,該技術(shù)什么時候用?test一:java概述1991SunJamesGoslingOak線電視交換盒、PDA1994OakJava的三種技術(shù)JAVAEE:JavaPlatformEnterpriseEditionwebJAVASE:JavaPlatformStandardEditionJAVAME:JavaPlatformMicroEdition,開發(fā)電子消費產(chǎn)品和設(shè)備,如中的程序1,JDK:JavaDevelopmentKit,java,javajre。2,JRE:JavaRuntimeEnvironment,java,java+JVM(java3,配置環(huán)境變量:讓javajdk\bin 環(huán)境變量的配置:配置方式:JAVA_HOME=%安裝路徑:臨時配置方式:setpath=%path%;C:\Programpathclasspath的配置:配置方式:classpath=.;c:\;e:\2:注意:在定義classpath環(huán)境變量時,需要注意的情如果沒有定義環(huán)境變量classpath,java啟動jvm后,會在當(dāng)前 如果指定了classpath,那么會在指定的 還會在當(dāng) 找嗎?兩種情況:classpath一般不指定分號,如果沒有在指定4,javac命令和java命令做什么事情呢javajavac:javacjava的.java文件進(jìn)行編譯。生成了jvm可以識別的字節(jié)碼文件。也就是class文件java的java:負(fù)責(zé)運行的部分.會啟動jvm.加載運行時所需的類庫,并對class文件進(jìn)行執(zhí)行.main5,虛擬Undo(復(fù)虛擬機(jī)到安裝之前的狀態(tài)。二:java語法基1,關(guān)鍵字:其實就是某種語言賦予了特殊含義的單詞2,標(biāo)示符:0-9、a-z、$_,數(shù)字不可以開頭,不可以使用關(guān)鍵字3,常量:是在程序中的不會變化的數(shù)據(jù)4,變量:其實就是內(nèi)存中的一個空間,用于常量數(shù)據(jù)作用:方便于運算。因為有些數(shù)據(jù)不確定。所以確定該數(shù)據(jù)的名詞和空間。什么時候定義變量?只要是數(shù)據(jù)不確定的時候,就定義變量變量空間的開辟需要什么要素呢1,這個空間要什么數(shù)據(jù)?數(shù)據(jù)類型2,3,變量到達(dá)它所在的作用域的時候就在內(nèi)存中了;boolean2:數(shù)據(jù)類型:數(shù)組、類、接口。強制類型轉(zhuǎn)換:什么情況下使用?把一個高級別的數(shù)賦給一個別該數(shù)的級別低的變量運算符號+-* %:任何整數(shù)模2不是0就是1,所以只要改變被模數(shù)就可以實現(xiàn)開關(guān)運算++,- +=-=*=/=true,false。4 邏輯運算符除了 外都是用于連接兩個boolean類型表達(dá)式&:truetruefalse|:falsefalse,^:&&&區(qū)別:&&&:短路與,如果左邊為false,那么右邊不參數(shù)與運算||||||:短路或true,那么右邊不參與運算。5 練習(xí):對兩個變量的數(shù)據(jù)進(jìn)行互換。不需要第變量int =3,b=5;-->b=3,a=a=a+b;a=b=a-b;b=3;a=a-b;a=a=a^b=a^b;//b=a^b^b=aa=a^b;//a=a^b^a=2*82<<3; switchdo whileif,switchswitch,效率相對較高。switch(case值:要執(zhí)行的語句…default:}工作原理:用小括號中的變量的值依次和case后面的值進(jìn)行對比,和哪個case后面的值相同了casedefault:1:break:switchbyte,char,short,int:default可以寫在switch結(jié)構(gòu)中的任意位置;如果將default語句放在了第一行,則不管expression與case中的value是否匹配,程序會從default開始執(zhí)行直到第一個breakbooleanif。whilefor中。break:switchbreakbreak只跳出當(dāng)前所在循環(huán)。要跳出嵌套中的外部循環(huán),只要給循環(huán)起名字即可,這個名字稱之為標(biāo)號continue:只作用于循環(huán)結(jié)構(gòu),繼續(xù)循環(huán)用6,函javajava中的方法的定義格式回值法名(參數(shù)類型式參數(shù)1,參數(shù)類型參數(shù)執(zhí)行語句return回值}voidvoid,returnreturn的作用:結(jié)束方法。結(jié)束功能如何定義一個方表(參數(shù)類型&參數(shù)個數(shù))。方法的作用、因為它是程序的jvm方法定義名稱是為什么呢:12如何區(qū)分重載:當(dāng)方法同名時,只看參數(shù)列表。和返回值類型沒關(guān)系7,數(shù)組:用于同一類型數(shù)據(jù)的一個容器。好處:可以對該容器中的數(shù)據(jù)進(jìn)行,從0開java、元素類型[]變量名=new1,元素類型[]變量名=new1,publicstaticinthalfSeach_2(int[]arr,intkey){intmin,max,mid;min=0;max=arr.length-mid=(max+min)>>1;//(max+min)/2;min=mid+}elseif(key<arr[mid])max=mid-1;return-mid=}return}java分了5片內(nèi)存1:寄存器。2:本地方法區(qū)。3:方法區(qū)。4:棧。5:堆棧:的都是局部變量(方法中定義的變量,方法上的參數(shù),語句中的變量);只要數(shù)據(jù)運算完成所在的區(qū)域結(jié)束,該數(shù)據(jù)就會被。堆:用于數(shù)組和對象,也就是實體。啥是實體啊?就是用于封裝多個數(shù)據(jù)的1:每一個實體都有內(nèi)存首地址值2:堆內(nèi)存中的變量都有默認(rèn)初始化值。因為數(shù)據(jù)類型不同,值也不一樣 三:面象特點:1:將復(fù)雜的事情簡單化2:面象將以前的過程中的執(zhí)行者,變成了指揮者3:面象這種思想是符合現(xiàn)在人們思考的一種思想過程和對象在的程序中是如何體現(xiàn)的呢?過程其實就是方法對象是將方法等一些內(nèi)容進(jìn)行了對象使用場景:1:當(dāng)對方法只進(jìn)行一次調(diào)用的時候,可以使 對象2:當(dāng)對象對成員進(jìn)行多次調(diào)用時,不能使 對象。必須給對象起名字1:成員變量:其實對應(yīng)的就是事物的屬性2:成員方法:其實對應(yīng)的就是事物的行為privateintage;//私有的權(quán)限最低,只有在本類中的有效。私有的成員:其他類不能直接創(chuàng)建對象,所以只有通過本類對外提供具體的方式來完成對私有的,可以通過對外提供方法的形式對其進(jìn)行。好處:可以在方法中加入邏輯判斷等操作,對數(shù)據(jù)進(jìn)行判斷等操作總結(jié):開發(fā)時,記住,屬性是用于數(shù)據(jù)的,直接被,容易出現(xiàn)安全隱患,所以,類中的這個方法一般有兩個,規(guī)范寫法:對于屬 ,可以使用set(),get()對其進(jìn)行操作主方法的解釋:保證所在類的獨立運行,是序的,被jvm調(diào)用。成員變量和局部變量的區(qū)別1:成員變量直接定義在類局部變量定義在方法中,參數(shù)上,語句中2:成員變量在這個類中有局部變量只在自己所屬的大括號內(nèi)有效,大括號結(jié)束,局部變量失去作用3:成員變量存在于堆內(nèi)存中,隨著對象的產(chǎn)生而存在, 局部變量存在于棧內(nèi)存中,隨著所屬區(qū)域的運行而存在,結(jié)束 特點1:該方法的名稱和所在類的名稱相同2:不需要定義返回值類型3:該方法沒有具體的返回值記?。核袑ο髣?chuàng)建時,都需要初始化才可以使構(gòu)造方法和一般方法有什么區(qū)別呢1:兩個方法定義格式不同什么時候使用構(gòu)造方法呢構(gòu)造代碼塊和構(gòu)造方法有什么區(qū)別對象立。就會調(diào)用這個代碼塊。p=創(chuàng)建一個對象都在內(nèi)存中做了什么事情1:先將硬盤上指定位置的.class文件加載進(jìn)內(nèi)存棧區(qū)分配了一個變量p。3:在堆內(nèi)存中開辟一個實體空間,分配了一個內(nèi)存首地址值。4:在該實體空間中進(jìn)行屬性的空間分配,并進(jìn)行了默認(rèn)初始化5:對空間中的屬性進(jìn)行顯示初始化6:進(jìn)行實體的構(gòu)造代碼塊初始化7:調(diào)用該實體對應(yīng)的構(gòu)造方法,進(jìn)行構(gòu)造方法初始化8:將首地址賦值給p,p變量就了該實體。(指向了該對象封裝(面 象特征之一:是指隱藏對象的屬性細(xì)節(jié),僅對外提供公共方式。 封裝原則:將不需要對外提供的內(nèi)容都隱,把屬性都隱藏,提供公共方法對其this:代表對象。就是所在方法所屬對象的this到底代表什么呢?哪個對象調(diào)用了this所在的方法,this就代表哪個對象,就是哪個對象的。this在定義功能時,如果該功 到了調(diào)用該功能的對象,這時就用this來表示這個對象thisthis.this注意:用this調(diào)用構(gòu)造方法,必須定義在構(gòu)造方法的第一行。因為構(gòu)造方法是用于初始化的,所static字,是一個修飾符,用于修飾成員(成員變量和成員方法)。1,想要實現(xiàn)對象中的共性數(shù)據(jù)的對象共享??梢詫⑦@個數(shù)據(jù)進(jìn)行靜態(tài)修3,靜態(tài)隨著類的加載而加載。而且優(yōu)先于對象存在2,靜態(tài)方法只能靜態(tài)成員,不可以非靜態(tài)成員A,那么可以同類名下其他靜態(tài)成員,你如果非靜態(tài)成員就不行)因為靜態(tài)方法加載時,優(yōu)先于對象存在,所以沒有辦法對象中的成員3,靜態(tài)方法中不能使用this,super關(guān)鍵字因為this代表對象,而靜態(tài)在時,有可能沒有對象,所以this無法使用4,1,成員變量(數(shù)據(jù)共享時靜態(tài)化該成員變量的數(shù)據(jù)是否是所有對象都一如果不是,那么就說這是對象的特有數(shù)據(jù),要到對象中。只要參考,該方法內(nèi)是否了對象中的特有數(shù)據(jù):如果有特有數(shù)據(jù),那方法不能被靜態(tài)修飾。如果沒有過特有數(shù)據(jù),那么這個方法需要被靜態(tài)修飾成員變量和靜態(tài)變量的區(qū)別3,成員變量隨著對象創(chuàng)建而存在。隨著對象被回收而。靜態(tài)變量隨著類的加載而存在。隨著類的而。4,所以,成員變量可以稱為對象的特有數(shù)據(jù),靜態(tài)變量稱為對象的共享數(shù)據(jù)靜態(tài)的注意:靜態(tài)的生命周期很長靜態(tài)代碼塊:就是一個有靜態(tài)關(guān)鍵字標(biāo)示的一個代碼塊區(qū)域。定義在類中作用:可以完成類的初始化。靜態(tài)代碼塊隨著類的加載而執(zhí)行,而且只執(zhí)行一次(new多個對象Public:權(quán)限最大Main:主方法特定的名稱(String[]args):主方法的參數(shù),是一個字符串?dāng)?shù)組類型的參數(shù),jvm調(diào)用main方法時,傳遞的實際參數(shù)是newString[0]。jvm默認(rèn)傳遞的是長度為0的字符串?dāng)?shù)組,在運行該類時,也可以指定具體的參數(shù)進(jìn)行傳遞。參數(shù)作為args數(shù)組中的元素,進(jìn)行。靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法同時存在時的執(zhí)行順序:靜態(tài)代碼塊→構(gòu)造代碼塊→構(gòu)生成Java助文檔:命令格式:javadoc–d–auther–version **@author*@version**@param*@returnjava有23設(shè)計模式:單例設(shè)計模式解決的問題:保證一個類在內(nèi)存中的對象唯一性Runtime()方法就是單例設(shè)計模式進(jìn)行設(shè)計的1,2,3,1,因為創(chuàng)建對象都需要構(gòu)造方法初始化,只要將本類中的構(gòu)造方法,其他程序就無法創(chuàng)建該類對象;2,就在類中創(chuàng)建一個本類的對象3,定義一個方法,返回該對象,讓其他程序可以通過方法就得到本類對(作用:可控代碼體現(xiàn)1,構(gòu)造方法2,創(chuàng)建私有并靜態(tài)的本類對象3,定義公有并靜態(tài)的方法,返回該對classSingle{privateSingle(){}//構(gòu)造方法privatestaticSingles=newSingle();//創(chuàng)建私有并靜態(tài)的本類對象。publicstaticSinglegetInstance(){定義公有并靜態(tài)的方法,返回該對象。return}}classSingle2{privateprivatestaticSingle2s=null;publicstaticSingle2getInstance(){s=newSingle2();returns;}}繼承(面象特征之一)1:提高了代碼的復(fù)用性2:讓類與類之間產(chǎn)生了關(guān)系,提供了另一個特征多態(tài)的前提為什么不支持多重繼承呢但是java支持多層繼承。A繼承 B繼承CC繼承D子父類出現(xiàn)后,類中的成員都有了哪些特點:1:成員變量This:代表是本類類型的對象Super:代表是子類所屬的父類中的內(nèi)存空間2:成員方法什么時候使用覆蓋呢?當(dāng)一個類的功能內(nèi)容需要修改時,可以通過覆蓋來實現(xiàn)3:構(gòu)造方法原因:子類的所有構(gòu)造方法中的第一行,其實都有一條隱身的語句super()?)造內(nèi)第一行都有默認(rèn)的語句super();如果父類中沒有空參數(shù)的構(gòu)造方法,那么子類的構(gòu)造方法內(nèi),必須通過super句指定要訪如果子類構(gòu)造方法中用this來指定調(diào)用子類自己的構(gòu)造方法,那么被調(diào)用的構(gòu)造方法也一會父類中的構(gòu)造方法問題:super()和this()是否可以同時出現(xiàn)的構(gòu)造方法中super()或者this():為什么一定要定義在第一行繼承的細(xì)節(jié)什么時候使用繼承呢當(dāng)類與類之間存在著所屬關(guān)系時,才具備了繼承的前提。abab。狼是犬英文書中,所屬關(guān)系:"isa所以判斷所屬關(guān)系,可以簡單看,如果繼承后,被繼承的類中的功能,都可以被該子類所具備,那么繼承成立。如果不是,不可以繼承。在方法覆蓋時,注意兩點2:繼承的一個弊端:打破了封裝性。對于一些類,或者類能,是需要被繼承,或者復(fù)寫的。final特點1:這個關(guān)鍵字是一個修飾符,可以修飾類,方法,變量2:被final修飾的類是一個最終類,不可以被繼承3:被final修飾的方法是一個最終方法,不可以被覆蓋4:被final修飾的變量是一個常量,只能賦值一次finalfinal,程 所標(biāo)示,為抽象方法。抽象方法所在類一定要標(biāo)示為抽象類,也就是說該類需要 關(guān)鍵字所修飾抽象類的特點1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須 關(guān)鍵字修飾(可以述類和方法,不可以描述變量2:抽象方法只定義方法,并不定義方法實現(xiàn)3:抽象類不可以被創(chuàng)建對象(實例化4抽象方法則,該子類還是一個抽象類。抽象類的細(xì)節(jié)1:抽象類中是否有構(gòu)造方法?有,用于給子類對象進(jìn)行初始2:抽象類中是否可以定義非抽象方法3:抽象關(guān)鍵 和哪些不可以共存?final,private,4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創(chuàng)建對象模板方法設(shè)計模classpublicfinalvoidgetTime(){//此功能如果不需要復(fù)寫,可加finallongstart=code();不確定的功能部分,提取出來,通過抽象方法實現(xiàn)longend=System.currentTimeMillis();} voidcode();抽象不確定的功能,讓子類復(fù)寫實}classSubDemoextendspublicvoidcode()//子類復(fù)寫功能方法for(inty=0;y<1000;y++){}}}1:是用關(guān)鍵字interface定義的成員變量:publicstaticinterfacepublicstaticfinalintx=3; voidshow();}3接口不可以實例化該子類才可以實例化。否則,該子類還是一個抽象類。繼承用extends;實現(xiàn)用implements;7:其實java中是有多繼承的。接口與接口之間存在著繼承關(guān)系,接口可以多繼承接口接口都用于設(shè)計上,設(shè)計上的特點(可以理解主板上提供的接口1:接口是對外提供的規(guī)則2:接口是功能的擴(kuò)展3:接口的出現(xiàn)降低了耦合抽象類與接口1:抽象類只能被繼承,而且只能單繼接口需要被實現(xiàn),而且可以多實現(xiàn)3:抽象類使用的是isa系。接口使用的likea關(guān)系。4:抽象類的成員修飾符可以自定義接口中的成員修飾符是固定的。全都是public的在開發(fā)之前,先定義規(guī)則,A和B分別開發(fā),A負(fù)責(zé)實現(xiàn)這個規(guī)則,B負(fù)責(zé)使用這個規(guī)則。至于A是如何對規(guī)則具體實現(xiàn)的,B是不需要知道的。這樣這個接口的出現(xiàn)就降低了A和B直接耦合多態(tài)★★★★★(面象特征之一:方法本身就具備多態(tài)性,某一種事物有不同的具體的體體現(xiàn):父類或者接口的指向了自己的子類對象。//Animala=newCat();父類可以調(diào)用(法的具體實現(xiàn)方式)只有通過子類去覆寫要改變的某一個方法,這樣在通過將父類的應(yīng)用指向子類的實例去調(diào)用覆寫過的方法就行了多態(tài)的弊端:當(dāng)父類指向子類對象時,雖然提高了擴(kuò)展性,但是只能父類中具備的方法,不可以子類中特有的方法。(前期不能使用后期產(chǎn)生的功能,即的局限性)多態(tài)的前提1:必須要有關(guān)系,比如繼承、或者實2:通常會有覆蓋操作多態(tài)的出現(xiàn)思想上也做著變化:以前是創(chuàng)建對象并指揮對象做事情。有了多態(tài)以后,可以找class畢姥爺{voidSystem.out.println("}void(){}}classextendsvoid講課(){}void看(){ }}classpublicstaticvoidmain(String[]args)xnew//畢老師對象被提升為了畢姥爺類型 x. x.看();//錯誤畢老師y=(畢老師)x;//將畢姥爺類型強制轉(zhuǎn)換成畢老師類型。y.看();//在多態(tài)中,自始自終都是子類對象在做著類型的變化。}}如果想用子類對象的特有方法,如何判斷對象是哪個具體的子類類型呢可以可以通過一個關(guān)鍵字instanceof;//判斷對象是否實現(xiàn)了指定的接口或繼承了指定的格式:<對象instanceofStudentinstanceof=true;//student繼承 在編譯時期:參考的 型變量所屬的類中是否有調(diào)用的成員(編譯時不產(chǎn)生對象,只查語法錯誤運行時期:也是參考型變量所屬的類中是否有調(diào)用的成員簡單一句話:無論編譯和運行,成員變量參考的都是變量所屬的類中的成員變量。再說的更容易一些:成員變量---編譯運行都看=左邊。2,成員方法編譯時期:參考型變量所屬的類中是否有調(diào)用的方法。為這樣的呢?因為在子父類中,對于一模一樣的成員方法,有一個特性:覆蓋。簡單一句:成員方法,編譯看型變量所屬的類,運行看對象所屬的類。更簡單:成員方法編譯看邊,運行看邊3,靜態(tài)方法編譯時期:參考的是型變量所屬的類中是否有調(diào)用的成員。運行時期:也是參考型變量所屬的類中是否有調(diào)用的成員為這樣的呢?因為靜態(tài)方法,其實不所屬于對象,而是所屬于該方法所在的類。調(diào)用靜態(tài)的方法是哪個類的調(diào)用的就是哪個類中的靜態(tài)方法。簡單說:靜態(tài)方法編譯運行都看邊 Object:所有類的直接或者間接父類,Java具體方法1,booleanequals(Objectobj):用于比較兩個對象是否相等,其實比較的就是兩個對象地址。如果根據(jù)equals(Object)方法,兩個對象是相等的,那么對這兩個對象中的每個對象調(diào)用hashCode方法都必須生成相同的整數(shù)結(jié)果;equalspublicbooleanequals(Objectobj){if(!(objinstanceof))returnfalse;p=()obj;returnthis.age==}StringtoString()將對象變成字符串;默認(rèn)返回的格式:類名@=getClass().getName()+'@'+Integer.toHexString(hashCode())publicStringtoString(){return" :"+age;}3,ClassgetClass():4,inthashCode():返回該對象的哈希碼值。支持此方法是為了提高哈希表的性能。將該對象 通常equals,toString,hashCode,在應(yīng)用中都會被復(fù)寫,建立具體對象的特有的內(nèi)類:如果A類需要直接B類中的成員,而B類又需要建立A類的對象。這時,為了方便設(shè)計和,直接將ABA類就稱為類。類可以直接外部類中的成員。而外部類想要類,必須要建立類的對象。classOuter{intnum=4; Inner{voidshow(){System.out.println("innershowrun}}publicvoidInnerin=newInner();//創(chuàng)建類的對象in.show();//調(diào)用類的方法。//類直 外部類成員,用自己的實例對象 //外部 類要定義類的對象}當(dāng)類定義在外部類中的成員位置上,可以使用一些成員修飾符修飾private、static。直接類格式:外部類名.類名變量名=外部類對象.類對象Outer.InnerinnewOuter.newInner();//這種形式很少用但是這種應(yīng)用不多見,因為類之所以定義在就是為了封裝。想要獲取類對象通常都通過外部類的方法來獲取。這樣可以對類對象進(jìn)行控制。2:通常類被封裝,都會被,因為封裝性不讓其他程序直接3:如果類被靜態(tài)修飾,相當(dāng)于外部類,會出現(xiàn) 局限性,只能外部類中的靜態(tài)成員。注意;如果類中定義了靜態(tài)成員,那么該 類編譯后的文件名為“外部類名$類名.java為什么類可以直接外部類中的成員呢?那是因為中都持有一個外部類的。這個是是外部類名 類被定義在局部位置上,只能局部中被final修飾的局部變量。類(對象:沒有名字的類。就是類的簡化形式。一般只用一次就可以用這種形式。類其實就是一個子類對象。想要定義類:需要前提,類必須繼承類的格式:new& 時如果接口中的方法不超過3個可以通過 其實就是在創(chuàng) 類時,該類中的封裝的方法不要過多,最好兩個或者兩個以內(nèi)

newObject(){voidshow(){System.out.println("show} //寫法和編譯都沒問Objectobj=newObject(){voidshow(){System.out.println("show} //寫法正確,編譯會報12寫法是正確,1和2都是在通過類建立一個Object類的子類對象。第一個編譯通過,并運行ObjectObjectshowclassInnerClassDemo6+(static)classInner{voidshow(){}}publicvoidthis.newInner().show();//}publicstaticvoidmain(String[]args){//static允許thisThis.newInner().show();//錯誤,Inner}}interfaceInter{voidshow();}classOuter{//通過類補足Outer類中的代碼publicstaticInter //返回Inter類型的變量returnnewInter(){publicvoidshow(){}}}}classInnerClassDemo7publicstaticvoidmain(String[]args){Outer.method().show():Outermethodshow:method()Interfunction(newInter(){publicvoidshow(){}});//類作為方法的參數(shù)進(jìn)行傳遞}publicstaticvoidfunction(Interin){}}就是java按照面象的思想將問題進(jìn)行對象封裝。這樣就方便于操作問題以及處理問題。 Throwable:可拋出的|--Exception:異常,可以有針對性的處理這系中的所有類和對象都具備一個獨有的特點;就是可拋性可拋性的體現(xiàn):就是這系中的類和對象都可以被throws和throw兩個關(guān)鍵字所操作 publicstaticvoidmain(String[]args) byte[]buf=newbyte[1024*1024*700];//java.lang.OutOfMemoryError}throws格式:throws常類名,異常類名...處理方式有兩種:1、捕捉;2、拋出對于捕捉:javatry需要被檢測的代}catch(異常類量名){}一定會執(zhí)行的代}catch(Exceptione){//etry}異常處理原則:功能拋出幾個異常,功能調(diào)用如果進(jìn)行try處理,需要與之對應(yīng)的catch處理代特殊情況:try對應(yīng)多個catch時,如果有父類的catch語句塊,一定要放在下throwthrows關(guān)鍵字的區(qū)別throw用于拋出異常對象,后面跟的是異常對象;throw用在方法內(nèi)throws用于拋出異常類,后面跟的異常類名,可以跟多個,用逗號隔開。throws用在方法上異常分兩種1:Exception編譯時被檢查的異常和運行時異常的區(qū)編譯被檢查的異常在方法內(nèi)被拋出,方法必須要,否編譯失敗。運行時異常如果在方法內(nèi)被拋出,在方法上不需 定義異常處理時,什么時候定義try,什么時候定義throws呢? 可以處理,就用try; 出來,讓調(diào)用者處理。使用throws拋出,交給調(diào)用者處理。自定義異常:當(dāng)開發(fā)時,項目中出現(xiàn)了java中沒有定義過的問題時,這時就需要按照對于除法運算,0作為除數(shù)是不可以的java中對這種問題用ArithmeticException類進(jìn)行描述。對于這個功能,在項目中,除數(shù)除了不可以為0外,還不可以為負(fù)數(shù)。負(fù)數(shù)的部分java并沒有針對描述。所以就需要自定義這個異常。自定義異常的步1:ExceptionRuntimeException,throws2:throwthrowstrycatchfinally幾種結(jié)合方式

記?。篺inallySystem.exit(0);jvm,finally當(dāng)異常出現(xiàn)后,在子父類進(jìn)行覆蓋時,有了一些新的特點2:如果父類或者接口中的方法沒有拋出過異常,那么子類是不可以拋出異常的,如果子類的覆蓋的方法中出現(xiàn)了異常,只能try不能throws。如果這個異常子類無法處理,已經(jīng)影響了子類方法的具體運算,這時可以在子類方法中,通過throw拋出RuntimeException異?;蛘咂渥宇愡@樣子類的方法上是不需要throws的。常見異常2、類型轉(zhuǎn)換異常包:定義包用package關(guān)鍵字1:2:如果生成的包不在當(dāng) 下,需要最好執(zhí)行classpath,將包所在 定義到性呢?可以使用url來進(jìn)行包名稱的定義。packagepack;//定義了一個包,名稱為pack。注意:包名的寫范:所有字母都小寫//packagecn.包名.類編譯命令:javac–d(.當(dāng)前路徑)java(就可以自動生成包包是一種封裝形式,用于封裝類,想要被包以外的程序,該類必須public;類中的成員,如果被包以外,也必須public;包與包之間可以使用的權(quán)限有兩種總結(jié)java的四種權(quán)范不同包Import類名稱變長,寫起來很麻煩。為了簡化,使用了一個關(guān)鍵字:import,可以使用importpacka.*;//這個僅僅是導(dǎo)入了packa當(dāng) 下的所有的類。不包含子包importpacka.abc.*;//packaabc常見的包:java.lang:languagejava 包,ObjectSystemStringThrowablejdk1.2版本后,包中的類自動被導(dǎo)入java.awt的都是用于java形界面開發(fā)的對象javax.swing:提供所有的windows桌面應(yīng)用程序包括的控件,比如FrameDialog,Table,等等,就是java的圖形界面庫于java絡(luò)編程方面的對象都在該包中java.io:inputoutput用于操作設(shè)備上數(shù)據(jù)的對象都在該包中。比如:硬盤數(shù)據(jù),往硬java.utiljava工具包,時間對象,集合框java.appletapplication+let戶端java序。server+let-->servlet務(wù)端小程序jar:java的壓縮包,主要用于類文件,或者配置文件等。命令格式:jar–cf包名.jar包解壓縮:jar–xvf包名將jar 列表重定向到一個文件中:jar–tf包名.jar多線程進(jìn)程:正在進(jìn)行中的程序。其實進(jìn)程就是一個應(yīng)用程序運行時的內(nèi)存分配空間main停止,會去運行回收器代碼,效率較低,所以由單獨一個線程來負(fù)責(zé)回收。隨機(jī)性的原理cpucpu線程的名稱是由:Thread-定義的。從0開始線程要運行的代碼都存放在了run方法中線程要運行必須要通過類中指定的方法開啟。start方法(啟動后,就多了一條執(zhí)行路徑start方法:1、啟動了線程;2、讓jvm調(diào)用了run方法創(chuàng)建線程的第式:繼承Thread,由子類復(fù)寫run方法。1,Thread2,目的是復(fù)寫run方法,將要讓線程運行的代碼都到run方法中3,Thread4,startrun運行:具備執(zhí)行資格,同時具備執(zhí)行權(quán)凍結(jié):sleep(time),wait()—notify()喚醒;線程了執(zhí)行權(quán),同時執(zhí)行資格;臨時阻塞狀態(tài):cpucpu1,Runnable2,run(用于封裝線程要運行的代碼3,Thread4,將實現(xiàn)了Runnable接口的子類對象作為實際參數(shù)傳遞給Thread類中的構(gòu)造方法。run5,ThreadstartRunnablerunTickett=newTicketnewThread類,或者newThreadThreadThreadThreadt1newThread(t);只要將tThreadt為什么要有Runnable接口的出Threadjava繼承的局限性。只有對該類進(jìn)行額外的功能擴(kuò)展,javaRunnable方法,其實run方法的定義就是為了多線程要運行的代碼。因為實現(xiàn)Runnable接口可以避免單繼承的局限所以Thread類在描述線程時,定義的run方法,也來自于Runnable接口實現(xiàn)Runnable接口可以避免單繼承的局限性。而且,繼承Thread,是可以對Thread類中的RunnableRunnable口將線程要執(zhí)行的任務(wù)封裝成了對象。//面newThread(newRunnable(){//publicvoidrun(){System.out.println("runnable}{publicvoidrun(){System.out.println("subthreadrun");}}.start();//結(jié)果:subthreadTry}catch(InterruptedExceptione){}//當(dāng)刻意讓線程稍微停一下,模擬 切換情況多線程安全問題的原因涉及到兩個因素1,多個線程在操作共享數(shù)2,有多條語句對共享數(shù)據(jù)進(jìn)行運算解決安全問題的原理synchronized(對象對象都可以。這個對象就是需要被同步的代} //就是在操作共享數(shù)據(jù)代碼時時只能讓一個線程進(jìn)去訪問,此線程執(zhí)行完退出后,別的線程才能再對此共享數(shù)據(jù)代碼進(jìn)行好處:解決了線程安全問題。弊端:相對降低性能,因為判斷鎖需要消耗資源,產(chǎn)生了死鎖定義同步是有前提的1,2,同步的第二種表現(xiàn)形式 //對共享資源的方法定義同同步方法:其實就是將同步關(guān)鍵字定義在方法上,讓方法具備了同步性 通過驗證,方法都有自己所屬的對象this,所以同步方法所使用的鎖就是this鎖。This.方法當(dāng)同步方法被static修飾時,這時的同步用的是哪個鎖呢這個對象就是類名.class同步代碼塊和同步方法的區(qū)同步方法使用的鎖是this,靜態(tài)同步方法的鎖是該類的字節(jié)碼文件對象在一個類中只有一個同步的話,可以使用同步方法。如果有多同步,必須使用同步代碼塊,來確定不同的鎖。所以同步代碼塊相對靈活一些?!锟键c問題請寫一個延遲加載的單例模式?寫懶漢式當(dāng)出現(xiàn)多線程時怎么解決?加同步,解決安全問題;效率高嗎?不高;怎樣解決?通過雙重判斷的形式解決。當(dāng)多線程懶漢式時因為懶漢式的方法內(nèi)對共性數(shù)據(jù)進(jìn)行多條語句的操作所以容易出現(xiàn)為了效率問題,通過雙重判斷的形式解classprivatestaticSingles=null;privateSingle(){}publicstaticSinglegetInstance(){鎖是誰?字節(jié)碼文件對象;if(s==null){if(s==null)s=new}}return}}線程間通信:思路:多個線程在操作同一個資源,但是操作的動作卻不一樣1:2:run等待喚醒機(jī)制:涉及的方法wait:將同步中的線程處于凍結(jié)狀態(tài)。了執(zhí)行權(quán),了資格。同時將線程對象到線1:這些方法都需要定義在同步中2:AwaitAAnotify3:ObjectObjectObjectwaitsleep別wait:notifySleep:線程會執(zhí)行權(quán),但不是不鎖線程的停止:通過stop方法就可以停止線程。但是這個方式過時了run怎么結(jié)束run方法?一般run方法里肯定定義循環(huán)。所以只要結(jié)束循環(huán)即可。第式:定義循環(huán)的結(jié)束標(biāo)記。Threadinterrupt記,并結(jié)束。java.lang.ThreadsetPriority(intnewPriority):更改線程的優(yōu)先級。當(dāng)正在運行的線程都是守護(hù)線程時,Java虛擬機(jī)退出。該方法必須在啟動線程前調(diào)用。join:臨時加入一個線程的時候可以使用join方法當(dāng)A線程執(zhí)行到了B線程的join方式。A線程處于凍結(jié)狀態(tài),了執(zhí)行權(quán),B開始執(zhí)行。A什么時候執(zhí)行呢?只有當(dāng)BALOCK的出現(xiàn)替代Lock接口:多線程在JDK1.5版本升級時,推出一個接口Lock接口所以同步是隱示的鎖操作,而Lock對象是顯示的鎖操作,它的出現(xiàn)就替代了同步Object而現(xiàn)在鎖是指定對象Lock。所以查找等待喚醒機(jī)制方式需要通過Lock接口來完成。而Lock接口Condition,將Object中的三個方法進(jìn)行單獨的封裝。并提供了功能一致的方法await()、java.util.concurrent.locksConditionawait()、signal()、classBoundedBufferfinalLocklock=newfinalConditionnotFull=lock.newCondition();finalConditionnotEmpty=lock.newCondition();finalObject[]items=newObject[100];intputptr,takeptr,publicvoidput(Objectx)throwsInterruptedException{trywhile(count==items.length)items[putptr]=if(++putptr==items.length)putptr=}finally}}publicObjecttake()throwsInterruptedException{trywhile(count==0)Objectx=if(++takeptr==items.length)takeptr=returnx;}finally{}}}API(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是一些預(yù)先定義的方法,目的是提供應(yīng)用程序與開發(fā)基于某或硬件的以一組例程的能力而又無需源碼或理解java.langString符串java中用String類進(jìn)行描述。對字符串進(jìn)行了對象的封裝。這樣的好處是可以對字符串這種常見數(shù)據(jù)進(jìn)行方便的操作。對象封裝后,可以定義N如何定義字符串對象呢?Strings"abc";只要是雙引號引起的數(shù)據(jù)都是字符串對象。Strings1abc";s1向的內(nèi)存中只有一個對象abcStrings2=newString("abc");//s2指向的內(nèi)容中有兩個對 、ewSystem.out.println(s1.equals(s2));//true串中equals比較的是字符串內(nèi)容是否相字符串的方法1:構(gòu)造方法:將字節(jié)數(shù)組或者字符數(shù)組轉(zhuǎn)成字符串Strings1=newString();//創(chuàng)建了一個空內(nèi)容的字符串。Strings2null;//s2nullStrings3="";//s3Strings4=newString("abc");Strings5="abc";newString(char[]);//將字符數(shù)組轉(zhuǎn)成字符串newString(char[],offset,count);//將字符數(shù)組中的一部分轉(zhuǎn)成字符串2:一般方法按照面象的思想獲取2.1.2:指定位置的字符。charcharAt(intindex);2.1.3:獲取指定字符的位置。如果不存在返回-1,所以可以通過返回值-1intindexOf(intch);//intindexOf(intch,intfromIndex);intindexOf(Stringstr);//返回第一次找到的字符串角標(biāo)intindexOf(Stringstr,intintlastIndexOf(intintlastIndexOf(intch,intfromIndex);intlastIndexOf(Stringstr);intlastIndexOf(Stringstr,intfromIndex);Stringsubstring(intstart);//startlength()-1Stringsubstring(intstart,intend);/startendendsubstring(0,str.length());/判斷booleancontains(Stringsubstring);booleanstartsWith(string);booleanendsWith(string);booleanequals(string);//ObjectbooleanequalsIgnoreCase(string);轉(zhuǎn)換staticStringcopyValueOf(char[]);staticStringcopyValueOf(char[],intoffset,intcount);staticStringvalueOf(char[]);staticStringvalueOf(char[],intoffset,intcount);staticStringvalueOf(char);staticStringvalueOf(boolean);staticStringvalueOf(double);staticStringvalueOf(float);staticStringvalueOf(int);staticStringvalueOf(long);staticStringvalueOf(Object);StringtoLowerCase();Stringchar[]toCharArraybyte[]getBytes();//可以加入編碼表。轉(zhuǎn)成字節(jié)數(shù)組。String[]splitStringreplace(oldChar,newChar);StringStringconcat(string);Stringtrim();//去除字符串兩端的空格intcompareTo();//如果參數(shù)字符串等于此字符串,則返回值0;如果此字符串按字典順序小于字符串參數(shù),則返回一個小于0數(shù),則返回一個大于0java.langStringBuffer符串緩沖區(qū)16個字符。1:可以對字符串內(nèi)容進(jìn)行修改2:是一個容3:是可變長度的4:緩沖區(qū)中可以任意類型的數(shù)據(jù)5:最終需要變成字符串1,添加StringBufferappend(data):在緩沖區(qū)中追加數(shù)據(jù)。追加到尾部。StringBufferinsert(index,data):在指定位置數(shù)據(jù)。2,刪除StringBufferdelete(start,end);startend-1StringBufferdeleteCharAt(index)//sb.delete(0,sb.length());/3,修改StringBufferreplace(start,end,string)startend-1stringvoidsetCharAt(index,char);替換指定位置的字符voidsetLength(len);將原字符串置為指定長度的字符串intindexOf(string);intindexOf(string,intfromIndex)intlastIndexOf(string);intlastIndexOf(string,intfromIndex);5,獲取子串stringsubstring(start);返回start到結(jié)尾的子stringsubstring(start,end);startend-16,反轉(zhuǎn)StringBufferreversejava.langStringBuilder符串緩沖JDK1.5出現(xiàn)StringBuiler;構(gòu)造一個其中不帶字符的字符串初始容量為16個字符。該類被設(shè)計用作StringBuffer的一個簡易替換,用在字符串緩沖區(qū)被單個線程使用的時候(這種方法和StringBuffer一樣StringBufferStringBuilder區(qū)別:StringBuffer程安全。StringBuilder不安全。單線程操作,使用StringBuilder率高。多線程操作,使用StringBuffer安全。StringBuildersb=newStringBuilder("abcdefg");sb.append("ak");//abcdefgakStringBuffersb=newStringBuffer();Strings="abc"+4+'q';s=new publicstaticvoidmain(String[]args)Strings1="java";Strings2="o";System.out.println(s1+"...."+s2);//java....StringBuilders11=newStringBuilder("java");StringBuilders22=newStringBuilder("o");System.out.println(s11+"-----"+s22);//javao-----}publicstaticvoidmethod_1(Strings1,Strings2){s1=}publicstaticvoidmethod_2(StringBuilders1,StringBuilders2){s1=}}基本數(shù)據(jù)類型對象包裝類:是按照面象思想將基本數(shù)據(jù)類型封裝成了對象。1:2:關(guān)鍵 對應(yīng)的類 short floatFloat 基本數(shù)據(jù)類型對象包裝類:都有parse方法parse方法:Character;Integer象數(shù)字格式的字符串轉(zhuǎn)成基本數(shù)據(jù)類型的方法1:Integer2:使用Integer.parseInt(numstring)—>類.方法名:不用建立對象,直接類名調(diào)用將基本類型轉(zhuǎn)成字符串1:IntegerStringtoString(int);toString(intnum,intradix);parseInt(string,radix);在jdk1.5版本后,對基本數(shù)據(jù)類型對象包裝類進(jìn)行升級。在升級中,使用基本數(shù)據(jù)類型對象包裝IntegerinewInteger(4);//1.5本之前的寫法Integeri4;//自動裝箱,1.5本后的寫法i=i+//i對象是不能直接和5相加的,其實底層i轉(zhuǎn)成int類型,在和5相加。而轉(zhuǎn)成int型的操作是隱式的。自動拆箱:拆箱的原理就是Value();i+5運算完是一個int整數(shù)。如何賦值給類型i呢?其實有對結(jié)果進(jìn)行裝箱。Integerc=127;Integerd=127;System.out.println(c==d);//在裝箱時,如果數(shù)值在byte范圍之內(nèi),那么數(shù)值相同,不會產(chǎn)生新的對象,也就是說多個數(shù)值相同的指向的是同一個對象。集合框架:★★★★★,用于數(shù)據(jù)的容器。1:對象封裝數(shù)據(jù),對象多了也需要。集合用于對象2:對象的個數(shù)確定可以使用數(shù)組,但是不確定怎么辦?可以用集合。因為集合是可變長度的集合和數(shù)組的區(qū)1:2:數(shù)組可以基本數(shù)據(jù)類型,也可以數(shù)據(jù)類型;集合只能數(shù)據(jù)類型3:數(shù)組的元素必須是同一個數(shù)據(jù)類型;集合的對象可以是不同數(shù)據(jù)類型。數(shù)據(jù)結(jié)構(gòu):就是容器中數(shù)據(jù)的方式。在使用 系時,原則:參閱頂層內(nèi)容。建立底層對象java.utilCollection口|--List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重復(fù)|--Set:無序(存入和取出順序有可能不一致),不可以重復(fù)元素。必須保證元素唯一性addAll(Collection)2,刪除clear():將集合中的元素全刪除,清空集合remove(obj):刪除集合中指定的對象。注意:刪除成功,集合的長度會改變removeAll(collection)Collection3,判斷booleancontains(obj)booleancontainsAll(Collection)booleanisEmpty():集合中是否有元素。intsize():集合中有幾個元素。booleanretainAll(Collection):對當(dāng)前集合中保留和指定集合中的相同的元素。如果兩flase;retainAlltrue。Iteratoriterator():迭代器java.utilIterator口迭代器:是一個接口。作用:用于取集合中的元hasNexttrueEnext()返回迭代的下一個元素。remove()從迭代器指向的collection(可選操作每一個集合都有自己的數(shù)據(jù)結(jié)構(gòu)(就是容器中數(shù)據(jù)的方式)都有特定的取出自己元素的方式。為了便于操作所有的容器,取出元素。將容器的取出方式按照一個的規(guī)則向外提Iterator。Collection耦合性。Iteratorit=coll.iterator();//獲取容器中的迭代器對象,至于這個對象是是什么不重Iteratorpublicstaticvoidmain(String[]args){Collectioncoll=newArrayList(); Iteratorit=coll.iterator();} 2for(Iteratorit=coll.iterator();it.hasNext();){}}java.utilList口ListList:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重|--ArrayList:底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組,線程不同步,ArrayList替代了Vector,查詢元素的|--LinkedList:底層的數(shù)據(jù)結(jié)構(gòu)是鏈表,線程不同步,增刪元素的速度非常快|--Vector:底層的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,線程同步的,Vector無論查詢和增刪都巨1,添加add(index,element):在指定的索引位元素addAll(index,collection):在指定的索引位一堆元素2,刪除remove(index)3,獲取Objectget(index)intindexOf(obj)1;intlastIndexOf(Objecto)ListsubList(start,end)4,修改Objectset(index,element)5,獲取所有元素ListIteratorlistIterator():listList集合支持對元素的增、刪、改、查List集合因為角標(biāo)有了自己的獲取元素的方式:遍歷for(intx=0;x<list.size();x++){}list如滿足條件添加新元素。會發(fā)生.ConcurrentModificationException并發(fā)修改異常。合的元素添加,迭代器并不知道,所以會出現(xiàn)異常情況。如何解決呢既然是在迭代中對元素進(jìn)行操作,找迭代器的方法最為合適.Iterator中只有hasNext,next,removeListIterator,發(fā)現(xiàn)該列表迭代器接口具備了ListIterator是List集合特有的迭代器ListIteratorit=list.listIterator;/Iteratorit=方 e)將指定的元素列表(可選操作如果next返回一個元素而不是拋出異常,則返回truehasPrevioustrueEnextnextIndexnextEpreviouspreviousIndexpreviousremovenextprevious(可選操作 e)用指定元素替換next或previous返回的最后一個元素(可選操作可變長度數(shù)組的原理 ArrayList:50%延長。構(gòu)造一個初始容量為10Vector:100%注意:對于list集合,底層判斷元素是否相同,其實用的是元素自身的equals方法完成的。所以建議元素都要復(fù)寫equals法,建立元素對象自己的比較相同的條件依據(jù)。jdk1.6以后。get():獲取鏈表中的第一個元素。如果鏈表為空,拋出NoSuchElementException;getLast();jdk1.6peek();獲取鏈表中的第一個元素。如果鏈表為空,返回null。NoSuchElementExceptionjdk1.6<閱讀到此java.utilSet:數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)的方式;Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一種,迭代器|--HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表,線程是不同步的。無序,高效HashSet合保證元素唯一性hashCodeequalshashCodeequalstrue。如果為true,那么視為相同元素,不存。如果為false,那么hashCodeequals|--LinkedHashSet:有序,hashset的子哈希表的原理值,這個值稱為哈希值。2, ,在原來對象的哈希值基礎(chǔ)+1順延。4,哈希值的結(jié)構(gòu),稱為哈希表5,既然哈希表是根據(jù)哈希值的,為了提高效率,最好保證對象的關(guān)鍵字是唯一的。對于ArrayList集合,判斷元素是否存在,或者刪元素底層依據(jù)都是equals對于HashSet集合,判斷元素是否存在,或者刪除元素,底層依據(jù)的是hashCode方法和Set如果元素不具備比較性,在運行時會發(fā)生ClassCastException常。compareToTreeSetTreeSet法保證元素唯一性的方式:0,return0,視注意:在進(jìn)行比較時,如果判斷元素不唯一,比如,同,同,才視為同一個人排序。TreeSet集合排序有兩種方式,Comparable和Comparator區(qū)別1:讓元素自身具備比較性,需要元素對象實現(xiàn)Comparable接口,覆蓋compareTo2:讓集合自身具備比較性,需要定義一個實現(xiàn)了Comparator接口的比較器,并覆蓋方法,并將該類對象作為實際參數(shù)傳遞給TreeSet集合的構(gòu)造方法。Map|--Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程同步的。不可以null鍵,null值|--HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程不同步的。可以null鍵,null值。替代|--TreeMap:底層是二叉樹結(jié)構(gòu),可以對map集合中的鍵進(jìn)行指定順序的排序Map集合和Collection有著很大不同:Collection;MapCollection;MapMap中的的一對元素:一個是鍵,一個是值,鍵與值之間有對應(yīng)()關(guān)系。特點:要保證map合中鍵的唯一性。1,添加null。voidputAll(Map);voidclearvalueremove(key)3,判斷booleanbooleancontainsKey(key):keybooleancontainsValue(value)value4,取出intsizevalueget(key)null,可以判斷該鍵不存在。當(dāng)然有特殊情況,就是在hashmap集合中,是可以null鍵null值的。Collectionvalues():獲取map集合中的所有的值5,想要獲取map中的所有元素原理:mapcollectionmapSetsetmapmap合轉(zhuǎn)成set方法SetSetentrySet();//取的是鍵和值的關(guān)系Entry就是Map接口中的接口為什么要定義在map呢?entry是鍵值關(guān)系的,是map的,的是map中取出map集合中所有元素的方式一:keySetgetSetkeySet=map.keySet();Iteratorit=keySet.iterator();while(it.hasNext()){Objectkey=it.next();Objectvalue=map.get(key);}取出map集合中所有元素的方式二:entrySet()方法SetentrySet=m Iteratorit=entrySet.iterator();while(it.hasNext()){Mntryme=(Mntry)it.next();}使用集合的技巧Array看到link就是鏈表結(jié)構(gòu)增刪速度快而且有特有方法add;addLast;remove();removeLast();get();getLast();hashhashCode,equalstree比較的兩種方式一個是Comparable:覆蓋compareTo方法;一個是Comparator:覆蓋compare集合什么時候用當(dāng)?shù)氖且粋€元素時,就用Collection。當(dāng)對象之間存在著關(guān)系時,就使用Map集保證唯一,就用Set。不保證唯一,就用ListCollections它的出現(xiàn)給集合操作提供了的功能這個類不需要創(chuàng)建對象提供的都是靜態(tài)方法。靜態(tài)方法Collections.sort(list);//list集合進(jìn)行元素的自然順序排序Collections.sort(list,newComparatorByLen());//按指定的比較器方法排序。classComparatorByLenimplementsComparator<String>{publicintcompare(Strings1,Strings2){inttemp=s1.length()-s2.length(); }}Collections.max(listlistintindexCollections.binarySearch(list,"zz");//二分查找,返回角標(biāo)。Collections.shuffle(list);//list將非同步集合轉(zhuǎn)成同步集合的方法:Collections中的synchronized();ListsynchronizedList(list);Map原理:定義一個類,將集合所有的方法加同一把鎖后返回CollectionCollections別Collectionsjava.utilCollectionjava.util和List,提供了關(guān)于集合的一些操作,如、刪除、判斷一個元素是否其成員、遍歷等asList方法:將數(shù)組轉(zhuǎn)換成list集合。String[]arr={"abc","kk"," List<String>listArrays.asList(arr);/arrlist將數(shù)組轉(zhuǎn)換成集合,有什么好處呢?用aslist法,將數(shù)組變成集合;listisEmpty()、contains、indexOf、:UnsupportedOperationException 的數(shù)據(jù)類型,直接作為集合的元素可以直接用集合方法操作。 的是基本數(shù)據(jù)類型,asList會將數(shù)組實體作為集合元素存在。集合變數(shù)組:用的是Collection接口中的方法如果給toArray傳遞的指定類型的數(shù)據(jù)長度小于了集合的size,那么toArray方自定size。sizetoArraysizeJdk5.0新特性增強for循環(huán):foreach語句,foreach簡化了迭代器格式://增強for循環(huán)括號里寫兩個參數(shù),第一個是一個變量,第二個就是需要迭代的容for(素量名Collection&組…}高級for和傳統(tǒng)for循環(huán)的區(qū)別forCollectionCollection代器。forfor高級for可以遍歷map集合嗎?不可以。但是可以將map轉(zhuǎn)成set后再使用foreach句、作用:對對象的容器進(jìn)行迭代:數(shù)組 、增強for循環(huán)迭代數(shù)組Stringarr{"a","b","c"};//數(shù)組的靜態(tài)定義方式,只試用于數(shù)組首次定義的時候for(Strings:arr){}、單列集合Collection:ListlistnewArrayList();forforfor(Objectobj:list){Strings=(String)obj;}、雙列集合Mapmap=newHashMap();map.put("a","aaa");統(tǒng)方式:必須掌握這種方Setentrys=m ntrySet();1.Entryiter=entrys.iterator();//2.entrywhile(iter.hasNext()){Mntryentry=(Entry)Stringkey(String)entry.getKey();keyvalueStringvalue=(String)entry.getValue();System.out.println(key+"="+value);},//增強for循環(huán)迭代:原則上map集合是無法使用增強for循環(huán)來迭代的,因為增強for只能針對實現(xiàn)了Iterable接口的集合進(jìn)行迭代;Iterable是jdk5中新定義的接口,就一個方法iterator方法,只有實現(xiàn)了Iterable接口的類,才能保證一定有iterator方法,java有這樣的限定是因為增強for循環(huán)還是用迭代器實現(xiàn)的,而實際上可以通過某種方式來使for,for(Objectobj:mntrySet())Mntryentry=(Entry)obj;//obj依次表示EntrySystem.out.println(entry.getKey()}5、集合迭代注意問題:在迭代集合的過程中,不能對集合進(jìn)行增刪操作(會報并發(fā)異常;可以用迭代器的方法進(jìn)行操作(子類listIterator:有增刪的方法。、增強for循環(huán)注意問題:在使用增強for循環(huán)時,不能對元素進(jìn)行賦int[]arr={1,2,3};for(intnum:arr)num=0;}System.out.println(arr[1]);可變參數(shù)(...:用到方法的參數(shù)上,當(dāng)要操作的同一個類型元素個數(shù)不確定的時候,用這和以前接收數(shù)組不一樣的是intint靜態(tài)導(dǎo)入:導(dǎo)入了類中的所有靜態(tài)成員,簡化靜態(tài)成員的書寫importstatic //導(dǎo)入了Collections枚舉:關(guān)鍵字解決辦法:setGradeGrade類5個靜態(tài)的常量表示類的實例;、jdk5中新定義了枚舉類型,專門用于解決此類問題、枚舉就是一個特殊的java類,可以定義屬性、方法、構(gòu)造方法、實現(xiàn)接口、繼承類自動拆裝箱:java中數(shù)據(jù)類型分為兩種:基本數(shù)據(jù)類 數(shù)據(jù)類型(對象在java8int-->Integerbyte-->Byteshort-->Shortlong-->Longchar-->Characterdouble-->Doublefloat-->Floatboolean-->jdk5以前基本數(shù)據(jù)類型和包裝類之間需要互轉(zhuǎn):基本---Integerx=newInteger(x);---基 intnum=、Integerx=1;x=x+ 經(jīng)歷了什么過程?裝箱→拆箱→裝箱、為了優(yōu)化,虛擬機(jī)為包裝類提供了緩沖池,Integer池的大小-128~127一個字節(jié)的大小、String池:Java泛型:jdk1.51:將運行時期的問題ClassCastException問題轉(zhuǎn)換成了編譯失敗,體現(xiàn)在編譯時期,程序員就2:避免了強制轉(zhuǎn)換的麻煩<>中傳遞一個具體的數(shù)據(jù)類型為什么?因為泛型的擦除:也就是說,編輯器檢查了泛型的類型正確后,在生成的類文件中是沒在運行時,如何知道獲取的元素類型而不用強轉(zhuǎn)泛型的補償:因為的時候,類型已經(jīng)確定了是同一個類型的元素,所以在運行時,只要獲取到該元素的類型,在進(jìn)行一次轉(zhuǎn)換即可,所以使用者不用再做轉(zhuǎn)換動作了。什么時候用泛型類呢當(dāng)類中的操作的數(shù)據(jù)類型不確定的時候,以前用的Object來進(jìn)行擴(kuò)展的,現(xiàn)在可以用泛泛型在程序定義上的體現(xiàn)classTool<Q>{privateQ voidsetObject(Qobj){this.obj=obj;}publicQgetObject(){returnobj;}}//當(dāng)方法操作的數(shù)據(jù)類型不確定的時候,可以將泛型定義在方法上public<W>voidmethod(Ww){}//靜態(tài)方法上的泛型:靜態(tài)方法無法類上定義的泛型。如果靜態(tài)方法操作的數(shù)據(jù)類型不publicstatic<Q>voidfunction(Qt){}interfaceInter<T>voidshow(T}classInterImpl<R>implementsInter<R>{publicvoidshow(Rr){}}泛型中的通配符:可以解決當(dāng)具體類型不確定的時候,這個通配符就是?;當(dāng)操作類型時,不Object泛型限定上限:?extendsE:表示這個對象的實例,可以接收EE下限:?superE:可以接收EE為什么?因為取的時候,E類型既可以接收E類對象,又可以接收E泛型的細(xì)節(jié)、泛型到底代表什么類型取決于調(diào)用者傳入的類型,如果沒傳,默認(rèn)是Object類型、等式兩邊可以在任意一邊使用泛型,在另一邊不使用(考慮向后兼容ArrayList<String>al=newArrayList<Object>();ArrayList<?extendsObject>al=newArrayList<String>();al.add("aa");//錯,不能加String?extendsObjectObjectpublicstaticvoidmethod(ArrayList<?extendsObject>al)al.add("abc");//錯//只能對al集合中的元素調(diào)用Object類中的方法,具體子類型的方法都不能用,因為子類型}API---java.lang.System:屬性和行為都是靜態(tài)的。longcurrentTimeMillis();//返回當(dāng)前時間毫秒值 //退出虛擬機(jī)PropertiesgetProperties //獲取當(dāng)前系統(tǒng)的屬性信Propertiesprop=System.getProperties();//獲取系統(tǒng)的屬性信息,并將這些信息到Properties集System.setProperty("myname","畢老師");//給系統(tǒng)屬性信息集添加具體的屬性信//臨時設(shè)置方式:運行jvm時,可以通過jvm的參數(shù)進(jìn)行系統(tǒng)屬性的臨時設(shè)置,可以在java命令的后面加入–D<name>=<value> 用法:java–Dmyname=類名。Stringname=System.getProperty("");//獲取指定屬性的信Set<String>hs=newHashSet<String>();hs.add("WindowsXP");hs.add("Windows7");System.out.println("可以支持System.out.println("不支持APIjava.lang.Runtime:這個對象來調(diào)用非靜態(tài)方法。這個方法就是staticRuntimegetRuntime();這個Runtime其實使用單例設(shè)計模式進(jìn)行設(shè)計 RuntimeDemopublicstaticvoidmain(String[]args)throw

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論