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

下載本文檔

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

文檔簡(jiǎn)介

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

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

記?。篺inallySystem.exit(0);jvm,finally當(dāng)異常出現(xiàn)后,在子父類進(jìn)行覆蓋時(shí),有了一些新的特點(diǎn)2:如果父類或者接口中的方法沒有拋出過異常,那么子類是不可以拋出異常的,如果子類的覆蓋的方法中出現(xiàn)了異常,只能try不能throws。如果這個(gè)異常子類無法處理,已經(jīng)影響了子類方法的具體運(yùn)算,這時(shí)可以在子類方法中,通過throw拋出RuntimeException異?;蛘咂渥宇愡@樣子類的方法上是不需要throws的。常見異常2、類型轉(zhuǎn)換異常包:定義包用package關(guān)鍵字1:2:如果生成的包不在當(dāng) 下,需要最好執(zhí)行classpath,將包所在 定義到性呢?可以使用url來進(jìn)行包名稱的定義。packagepack;//定義了一個(gè)包,名稱為pack。注意:包名的寫范:所有字母都小寫//packagecn.包名.類編譯命令:javac–d(.當(dāng)前路徑)java(就可以自動(dòng)生成包包是一種封裝形式,用于封裝類,想要被包以外的程序,該類必須public;類中的成員,如果被包以外,也必須public;包與包之間可以使用的權(quán)限有兩種總結(jié)java的四種權(quán)范不同包Import類名稱變長(zhǎng),寫起來很麻煩。為了簡(jiǎn)化,使用了一個(gè)關(guān)鍵字:import,可以使用importpacka.*;//這個(gè)僅僅是導(dǎo)入了packa當(dāng) 下的所有的類。不包含子包importpacka.abc.*;//packaabc常見的包:java.lang:languagejava 包,ObjectSystemStringThrowablejdk1.2版本后,包中的類自動(dòng)被導(dǎo)入java.awt的都是用于java形界面開發(fā)的對(duì)象javax.swing:提供所有的windows桌面應(yīng)用程序包括的控件,比如FrameDialog,Table,等等,就是java的圖形界面庫于java絡(luò)編程方面的對(duì)象都在該包中java.io:inputoutput用于操作設(shè)備上數(shù)據(jù)的對(duì)象都在該包中。比如:硬盤數(shù)據(jù),往硬java.utiljava工具包,時(shí)間對(duì)象,集合框java.appletapplication+let戶端java序。server+let-->servlet務(wù)端小程序jar:java的壓縮包,主要用于類文件,或者配置文件等。命令格式:jar–cf包名.jar包解壓縮:jar–xvf包名將jar 列表重定向到一個(gè)文件中:jar–tf包名.jar多線程進(jìn)程:正在進(jìn)行中的程序。其實(shí)進(jìn)程就是一個(gè)應(yīng)用程序運(yùn)行時(shí)的內(nèi)存分配空間main停止,會(huì)去運(yùn)行回收器代碼,效率較低,所以由單獨(dú)一個(gè)線程來負(fù)責(zé)回收。隨機(jī)性的原理cpucpu線程的名稱是由:Thread-定義的。從0開始線程要運(yùn)行的代碼都存放在了run方法中線程要運(yùn)行必須要通過類中指定的方法開啟。start方法(啟動(dòng)后,就多了一條執(zhí)行路徑start方法:1、啟動(dòng)了線程;2、讓jvm調(diào)用了run方法創(chuàng)建線程的第式:繼承Thread,由子類復(fù)寫run方法。1,Thread2,目的是復(fù)寫run方法,將要讓線程運(yùn)行的代碼都到run方法中3,Thread4,startrun運(yùn)行:具備執(zhí)行資格,同時(shí)具備執(zhí)行權(quán)凍結(jié):sleep(time),wait()—notify()喚醒;線程了執(zhí)行權(quán),同時(shí)執(zhí)行資格;臨時(shí)阻塞狀態(tài):cpucpu1,Runnable2,run(用于封裝線程要運(yùn)行的代碼3,Thread4,將實(shí)現(xiàn)了Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳遞給Thread類中的構(gòu)造方法。run5,ThreadstartRunnablerunTickett=newTicketnewThread類,或者newThreadThreadThreadThreadt1newThread(t);只要將tThreadt為什么要有Runnable接口的出Threadjava繼承的局限性。只有對(duì)該類進(jìn)行額外的功能擴(kuò)展,javaRunnable方法,其實(shí)run方法的定義就是為了多線程要運(yùn)行的代碼。因?yàn)閷?shí)現(xiàn)Runnable接口可以避免單繼承的局限所以Thread類在描述線程時(shí),定義的run方法,也來自于Runnable接口實(shí)現(xiàn)Runnable接口可以避免單繼承的局限性。而且,繼承Thread,是可以對(duì)Thread類中的RunnableRunnable口將線程要執(zhí)行的任務(wù)封裝成了對(duì)象。//面newThread(newRunnable(){//publicvoidrun(){System.out.println("runnable}{publicvoidrun(){System.out.println("subthreadrun");}}.start();//結(jié)果:subthreadTry}catch(InterruptedExceptione){}//當(dāng)刻意讓線程稍微停一下,模擬 切換情況多線程安全問題的原因涉及到兩個(gè)因素1,多個(gè)線程在操作共享數(shù)2,有多條語句對(duì)共享數(shù)據(jù)進(jìn)行運(yùn)算解決安全問題的原理synchronized(對(duì)象對(duì)象都可以。這個(gè)對(duì)象就是需要被同步的代} //就是在操作共享數(shù)據(jù)代碼時(shí)時(shí)只能讓一個(gè)線程進(jìn)去訪問,此線程執(zhí)行完退出后,別的線程才能再對(duì)此共享數(shù)據(jù)代碼進(jìn)行好處:解決了線程安全問題。弊端:相對(duì)降低性能,因?yàn)榕袛噫i需要消耗資源,產(chǎn)生了死鎖定義同步是有前提的1,2,同步的第二種表現(xiàn)形式 //對(duì)共享資源的方法定義同同步方法:其實(shí)就是將同步關(guān)鍵字定義在方法上,讓方法具備了同步性 通過驗(yàn)證,方法都有自己所屬的對(duì)象this,所以同步方法所使用的鎖就是this鎖。This.方法當(dāng)同步方法被static修飾時(shí),這時(shí)的同步用的是哪個(gè)鎖呢這個(gè)對(duì)象就是類名.class同步代碼塊和同步方法的區(qū)同步方法使用的鎖是this,靜態(tài)同步方法的鎖是該類的字節(jié)碼文件對(duì)象在一個(gè)類中只有一個(gè)同步的話,可以使用同步方法。如果有多同步,必須使用同步代碼塊,來確定不同的鎖。所以同步代碼塊相對(duì)靈活一些?!锟键c(diǎn)問題請(qǐng)寫一個(gè)延遲加載的單例模式?寫懶漢式當(dāng)出現(xiàn)多線程時(shí)怎么解決?加同步,解決安全問題;效率高嗎?不高;怎樣解決?通過雙重判斷的形式解決。當(dāng)多線程懶漢式時(shí)因?yàn)閼袧h式的方法內(nèi)對(duì)共性數(shù)據(jù)進(jìn)行多條語句的操作所以容易出現(xiàn)為了效率問題,通過雙重判斷的形式解classprivatestaticSingles=null;privateSingle(){}publicstaticSinglegetInstance(){鎖是誰?字節(jié)碼文件對(duì)象;if(s==null){if(s==null)s=new}}return}}線程間通信:思路:多個(gè)線程在操作同一個(gè)資源,但是操作的動(dòng)作卻不一樣1:2:run等待喚醒機(jī)制:涉及的方法wait:將同步中的線程處于凍結(jié)狀態(tài)。了執(zhí)行權(quán),了資格。同時(shí)將線程對(duì)象到線1:這些方法都需要定義在同步中2:AwaitAAnotify3:ObjectObjectObjectwaitsleep別wait:notifySleep:線程會(huì)執(zhí)行權(quán),但不是不鎖線程的停止:通過stop方法就可以停止線程。但是這個(gè)方式過時(shí)了run怎么結(jié)束run方法?一般run方法里肯定定義循環(huán)。所以只要結(jié)束循環(huán)即可。第式:定義循環(huán)的結(jié)束標(biāo)記。Threadinterrupt記,并結(jié)束。java.lang.ThreadsetPriority(intnewPriority):更改線程的優(yōu)先級(jí)。當(dāng)正在運(yùn)行的線程都是守護(hù)線程時(shí),Java虛擬機(jī)退出。該方法必須在啟動(dòng)線程前調(diào)用。join:臨時(shí)加入一個(gè)線程的時(shí)候可以使用join方法當(dāng)A線程執(zhí)行到了B線程的join方式。A線程處于凍結(jié)狀態(tài),了執(zhí)行權(quán),B開始執(zhí)行。A什么時(shí)候執(zhí)行呢?只有當(dāng)BALOCK的出現(xiàn)替代Lock接口:多線程在JDK1.5版本升級(jí)時(shí),推出一個(gè)接口Lock接口所以同步是隱示的鎖操作,而Lock對(duì)象是顯示的鎖操作,它的出現(xiàn)就替代了同步Object而現(xiàn)在鎖是指定對(duì)象Lock。所以查找等待喚醒機(jī)制方式需要通過Lock接口來完成。而Lock接口Condition,將Object中的三個(gè)方法進(jìn)行單獨(dú)的封裝。并提供了功能一致的方法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)行描述。對(duì)字符串進(jìn)行了對(duì)象的封裝。這樣的好處是可以對(duì)字符串這種常見數(shù)據(jù)進(jìn)行方便的操作。對(duì)象封裝后,可以定義N如何定義字符串對(duì)象呢?Strings"abc";只要是雙引號(hào)引起的數(shù)據(jù)都是字符串對(duì)象。Strings1abc";s1向的內(nèi)存中只有一個(gè)對(duì)象abcStrings2=newString("abc");//s2指向的內(nèi)容中有兩個(gè)對(duì) 、ewSystem.out.println(s1.equals(s2));//true串中equals比較的是字符串內(nèi)容是否相字符串的方法1:構(gòu)造方法:將字節(jié)數(shù)組或者字符數(shù)組轉(zhuǎn)成字符串Strings1=newString();//創(chuàng)建了一個(gè)空內(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ù),則返回一個(gè)小于0數(shù),則返回一個(gè)大于0java.langStringBuffer符串緩沖區(qū)16個(gè)字符。1:可以對(duì)字符串內(nèi)容進(jìn)行修改2:是一個(gè)容3:是可變長(zhǎng)度的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);將原字符串置為指定長(zhǎng)度的字符串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)造一個(gè)其中不帶字符的字符串初始容量為16個(gè)字符。該類被設(shè)計(jì)用作StringBuffer的一個(gè)簡(jiǎn)易替換,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候(這種方法和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ù)類型對(duì)象包裝類:是按照面象思想將基本數(shù)據(jù)類型封裝成了對(duì)象。1:2:關(guān)鍵 對(duì)應(yīng)的類 short floatFloat 基本數(shù)據(jù)類型對(duì)象包裝類:都有parse方法parse方法:Character;Integer象數(shù)字格式的字符串轉(zhuǎn)成基本數(shù)據(jù)類型的方法1:Integer2:使用Integer.parseInt(numstring)—>類.方法名:不用建立對(duì)象,直接類名調(diào)用將基本類型轉(zhuǎn)成字符串1:IntegerStringtoString(int);toString(intnum,intradix);parseInt(string,radix);在jdk1.5版本后,對(duì)基本數(shù)據(jù)類型對(duì)象包裝類進(jìn)行升級(jí)。在升級(jí)中,使用基本數(shù)據(jù)類型對(duì)象包裝IntegerinewInteger(4);//1.5本之前的寫法Integeri4;//自動(dòng)裝箱,1.5本后的寫法i=i+//i對(duì)象是不能直接和5相加的,其實(shí)底層i轉(zhuǎn)成int類型,在和5相加。而轉(zhuǎn)成int型的操作是隱式的。自動(dòng)拆箱:拆箱的原理就是Value();i+5運(yùn)算完是一個(gè)int整數(shù)。如何賦值給類型i呢?其實(shí)有對(duì)結(jié)果進(jìn)行裝箱。Integerc=127;Integerd=127;System.out.println(c==d);//在裝箱時(shí),如果數(shù)值在byte范圍之內(nèi),那么數(shù)值相同,不會(huì)產(chǎn)生新的對(duì)象,也就是說多個(gè)數(shù)值相同的指向的是同一個(gè)對(duì)象。集合框架:★★★★★,用于數(shù)據(jù)的容器。1:對(duì)象封裝數(shù)據(jù),對(duì)象多了也需要。集合用于對(duì)象2:對(duì)象的個(gè)數(shù)確定可以使用數(shù)組,但是不確定怎么辦?可以用集合。因?yàn)榧鲜强勺冮L(zhǎng)度的集合和數(shù)組的區(qū)1:2:數(shù)組可以基本數(shù)據(jù)類型,也可以數(shù)據(jù)類型;集合只能數(shù)據(jù)類型3:數(shù)組的元素必須是同一個(gè)數(shù)據(jù)類型;集合的對(duì)象可以是不同數(shù)據(jù)類型。數(shù)據(jù)結(jié)構(gòu):就是容器中數(shù)據(jù)的方式。在使用 系時(shí),原則:參閱頂層內(nèi)容。建立底層對(duì)象java.utilCollection口|--List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重復(fù)|--Set:無序(存入和取出順序有可能不一致),不可以重復(fù)元素。必須保證元素唯一性addAll(Collection)2,刪除clear():將集合中的元素全刪除,清空集合remove(obj):刪除集合中指定的對(duì)象。注意:刪除成功,集合的長(zhǎng)度會(huì)改變r(jià)emoveAll(collection)Collection3,判斷booleancontains(obj)booleancontainsAll(Collection)booleanisEmpty():集合中是否有元素。intsize():集合中有幾個(gè)元素。booleanretainAll(Collection):對(duì)當(dāng)前集合中保留和指定集合中的相同的元素。如果兩flase;retainAlltrue。Iteratoriterator():迭代器java.utilIterator口迭代器:是一個(gè)接口。作用:用于取集合中的元hasNexttrueEnext()返回迭代的下一個(gè)元素。remove()從迭代器指向的collection(可選操作每一個(gè)集合都有自己的數(shù)據(jù)結(jié)構(gòu)(就是容器中數(shù)據(jù)的方式)都有特定的取出自己元素的方式。為了便于操作所有的容器,取出元素。將容器的取出方式按照一個(gè)的規(guī)則向外提Iterator。Collection耦合性。Iteratorit=coll.iterator();//獲取容器中的迭代器對(duì)象,至于這個(gè)對(duì)象是是什么不重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,查詢?cè)氐膢--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集合支持對(duì)元素的增、刪、改、查L(zhǎng)ist集合因?yàn)榻菢?biāo)有了自己的獲取元素的方式:遍歷for(intx=0;x<list.size();x++){}list如滿足條件添加新元素。會(huì)發(fā)生.ConcurrentModificationException并發(fā)修改異常。合的元素添加,迭代器并不知道,所以會(huì)出現(xiàn)異常情況。如何解決呢既然是在迭代中對(duì)元素進(jìn)行操作,找迭代器的方法最為合適.Iterator中只有hasNext,next,removeListIterator,發(fā)現(xiàn)該列表迭代器接口具備了ListIterator是List集合特有的迭代器ListIteratorit=list.listIterator;/Iteratorit=方 e)將指定的元素列表(可選操作如果next返回一個(gè)元素而不是拋出異常,則返回truehasPrevioustrueEnextnextIndexnextEpreviouspreviousIndexpreviousremovenextprevious(可選操作 e)用指定元素替換next或previous返回的最后一個(gè)元素(可選操作可變長(zhǎng)度數(shù)組的原理 ArrayList:50%延長(zhǎng)。構(gòu)造一個(gè)初始容量為10Vector:100%注意:對(duì)于list集合,底層判斷元素是否相同,其實(shí)用的是元素自身的equals方法完成的。所以建議元素都要復(fù)寫equals法,建立元素對(duì)象自己的比較相同的條件依據(jù)。jdk1.6以后。get():獲取鏈表中的第一個(gè)元素。如果鏈表為空,拋出NoSuchElementException;getLast();jdk1.6peek();獲取鏈表中的第一個(gè)元素。如果鏈表為空,返回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的子哈希表的原理值,這個(gè)值稱為哈希值。2, ,在原來對(duì)象的哈希值基礎(chǔ)+1順延。4,哈希值的結(jié)構(gòu),稱為哈希表5,既然哈希表是根據(jù)哈希值的,為了提高效率,最好保證對(duì)象的關(guān)鍵字是唯一的。對(duì)于ArrayList集合,判斷元素是否存在,或者刪元素底層依據(jù)都是equals對(duì)于HashSet集合,判斷元素是否存在,或者刪除元素,底層依據(jù)的是hashCode方法和Set如果元素不具備比較性,在運(yùn)行時(shí)會(huì)發(fā)生ClassCastException常。compareToTreeSetTreeSet法保證元素唯一性的方式:0,return0,視注意:在進(jìn)行比較時(shí),如果判斷元素不唯一,比如,同,同,才視為同一個(gè)人排序。TreeSet集合排序有兩種方式,Comparable和Comparator區(qū)別1:讓元素自身具備比較性,需要元素對(duì)象實(shí)現(xiàn)Comparable接口,覆蓋compareTo2:讓集合自身具備比較性,需要定義一個(gè)實(shí)現(xiàn)了Comparator接口的比較器,并覆蓋方法,并將該類對(duì)象作為實(shí)際參數(shù)傳遞給TreeSet集合的構(gòu)造方法。Map|--Hashtable:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程同步的。不可以null鍵,null值|--HashMap:底層是哈希表數(shù)據(jù)結(jié)構(gòu),是線程不同步的??梢詎ull鍵,null值。替代|--TreeMap:底層是二叉樹結(jié)構(gòu),可以對(duì)map集合中的鍵進(jìn)行指定順序的排序Map集合和Collection有著很大不同:Collection;MapCollection;MapMap中的的一對(duì)元素:一個(gè)是鍵,一個(gè)是值,鍵與值之間有對(duì)應(yīng)()關(guān)系。特點(diǎ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比較的兩種方式一個(gè)是Comparable:覆蓋compareTo方法;一個(gè)是Comparator:覆蓋compare集合什么時(shí)候用當(dāng)?shù)氖且粋€(gè)元素時(shí),就用Collection。當(dāng)對(duì)象之間存在著關(guān)系時(shí),就使用Map集保證唯一,就用Set。不保證唯一,就用ListCollections它的出現(xiàn)給集合操作提供了的功能這個(gè)類不需要?jiǎng)?chuàng)建對(duì)象提供的都是靜態(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原理:定義一個(gè)類,將集合所有的方法加同一把鎖后返回CollectionCollections別Collectionsjava.utilCollectionjava.util和List,提供了關(guān)于集合的一些操作,如、刪除、判斷一個(gè)元素是否其成員、遍歷等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會(huì)將數(shù)組實(shí)體作為集合元素存在。集合變數(shù)組:用的是Collection接口中的方法如果給toArray傳遞的指定類型的數(shù)據(jù)長(zhǎng)度小于了集合的size,那么toArray方自定size。sizetoArraysizeJdk5.0新特性增強(qiáng)for循環(huán):foreach語句,foreach簡(jiǎn)化了迭代器格式://增強(qiáng)for循環(huán)括號(hào)里寫兩個(gè)參數(shù),第一個(gè)是一個(gè)變量,第二個(gè)就是需要迭代的容for(素量名Collection&組…}高級(jí)for和傳統(tǒng)for循環(huán)的區(qū)別forCollectionCollection代器。forfor高級(jí)for可以遍歷map集合嗎?不可以。但是可以將map轉(zhuǎn)成set后再使用foreach句、作用:對(duì)對(duì)象的容器進(jìn)行迭代:數(shù)組 、增強(qiáng)for循環(huán)迭代數(shù)組Stringarr{"a","b","c"};//數(shù)組的靜態(tài)定義方式,只試用于數(shù)組首次定義的時(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);},//增強(qiáng)for循環(huán)迭代:原則上map集合是無法使用增強(qiáng)for循環(huán)來迭代的,因?yàn)樵鰪?qiáng)for只能針對(duì)實(shí)現(xiàn)了Iterable接口的集合進(jìn)行迭代;Iterable是jdk5中新定義的接口,就一個(gè)方法iterator方法,只有實(shí)現(xiàn)了Iterable接口的類,才能保證一定有iterator方法,java有這樣的限定是因?yàn)樵鰪?qiáng)for循環(huán)還是用迭代器實(shí)現(xiàn)的,而實(shí)際上可以通過某種方式來使for,for(Objectobj:mntrySet())Mntryentry=(Entry)obj;//obj依次表示EntrySystem.out.println(entry.getKey()}5、集合迭代注意問題:在迭代集合的過程中,不能對(duì)集合進(jìn)行增刪操作(會(huì)報(bào)并發(fā)異常;可以用迭代器的方法進(jìn)行操作(子類listIterator:有增刪的方法。、增強(qiáng)for循環(huán)注意問題:在使用增強(qiáng)for循環(huán)時(shí),不能對(duì)元素進(jìn)行賦int[]arr={1,2,3};for(intnum:arr)num=0;}System.out.println(arr[1]);可變參數(shù)(...:用到方法的參數(shù)上,當(dāng)要操作的同一個(gè)類型元素個(gè)數(shù)不確定的時(shí)候,用這和以前接收數(shù)組不一樣的是intint靜態(tài)導(dǎo)入:導(dǎo)入了類中的所有靜態(tài)成員,簡(jiǎn)化靜態(tài)成員的書寫importstatic //導(dǎo)入了Collections枚舉:關(guān)鍵字解決辦法:setGradeGrade類5個(gè)靜態(tài)的常量表示類的實(shí)例;、jdk5中新定義了枚舉類型,專門用于解決此類問題、枚舉就是一個(gè)特殊的java類,可以定義屬性、方法、構(gòu)造方法、實(shí)現(xiàn)接口、繼承類自動(dòng)拆裝箱:java中數(shù)據(jù)類型分為兩種:基本數(shù)據(jù)類 數(shù)據(jù)類型(對(duì)象在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一個(gè)字節(jié)的大小、String池:Java泛型:jdk1.51:將運(yùn)行時(shí)期的問題ClassCastException問題轉(zhuǎn)換成了編譯失敗,體現(xiàn)在編譯時(shí)期,程序員就2:避免了強(qiáng)制轉(zhuǎn)換的麻煩<>中傳遞一個(gè)具體的數(shù)據(jù)類型為什么?因?yàn)榉盒偷牟脸阂簿褪钦f,編輯器檢查了泛型的類型正確后,在生成的類文件中是沒在運(yùn)行時(shí),如何知道獲取的元素類型而不用強(qiáng)轉(zhuǎn)泛型的補(bǔ)償:因?yàn)榈臅r(shí)候,類型已經(jīng)確定了是同一個(gè)類型的元素,所以在運(yùn)行時(shí),只要獲取到該元素的類型,在進(jìn)行一次轉(zhuǎn)換即可,所以使用者不用再做轉(zhuǎn)換動(dòng)作了。什么時(shí)候用泛型類呢當(dāng)類中的操作的數(shù)據(jù)類型不確定的時(shí)候,以前用的Object來進(jìn)行擴(kuò)展的,現(xiàn)在可以用泛泛型在程序定義上的體現(xiàn)classTool<Q>{privateQ voidsetObject(Qobj){this.obj=obj;}publicQgetObject(){returnobj;}}//當(dāng)方法操作的數(shù)據(jù)類型不確定的時(shí)候,可以將泛型定義在方法上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)具體類型不確定的時(shí)候,這個(gè)通配符就是?;當(dāng)操作類型時(shí),不Object泛型限定上限:?extendsE:表示這個(gè)對(duì)象的實(shí)例,可以接收EE下限:?superE:可以接收EE為什么?因?yàn)槿〉臅r(shí)候,E類型既可以接收E類對(duì)象,又可以接收E泛型的細(xì)節(jié)、泛型到底代表什么類型取決于調(diào)用者傳入的類型,如果沒傳,默認(rèn)是Object類型、等式兩邊可以在任意一邊使用泛型,在另一邊不使用(考慮向后兼容ArrayList<String>al=newArrayList<Object>();ArrayList<?extendsObject>al=newArrayList<String>();al.add("aa");//錯(cuò),不能加String?extendsObjectObjectpublicstaticvoidmethod(ArrayList<?extendsObject>al)al.add("abc");//錯(cuò)//只能對(duì)al集合中的元素調(diào)用Object類中的方法,具體子類型的方法都不能用,因?yàn)樽宇愋蛚API---java.lang.System:屬性和行為都是靜態(tài)的。longcurrentTimeMillis();//返回當(dāng)前時(shí)間毫秒值 //退出虛擬機(jī)PropertiesgetProperties //獲取當(dāng)前系統(tǒng)的屬性信Propertiesprop=System.getProperties();//獲取系統(tǒng)的屬性信息,并將這些信息到Properties集System.setProperty("myname","畢老師");//給系統(tǒng)屬性信息集添加具體的屬性信//臨時(shí)設(shè)置方式:運(yùn)行jvm時(shí),可以通過jvm的參數(shù)進(jìn)行系統(tǒng)屬性的臨時(shí)設(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:這個(gè)對(duì)象來調(diào)用非靜態(tài)方法。這個(gè)方法就是staticRuntimegetRuntime();這個(gè)Runtime其實(shí)使用單例設(shè)計(jì)模式進(jìn)行設(shè)計(jì) RuntimeDemopublicstaticvoidmain(String[]args)throw

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論