版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java從入門到精通筆記
第o講開山篇
1.JavaseJ2se桌面
JavaeeJ2ee網(wǎng)絡(luò)
JavameJ2me手機(jī)
2.SQLserverMysqlOracle
3.學(xué)習(xí)軟件編程的注意事項(xiàng)
1.高效愉快學(xué)習(xí)
2.先建立一個整體框架然后細(xì)節(jié)
3.用什么再學(xué)習(xí)什么
4.先知道how,再知道why
5.軟件編程是一門“做中學(xué)”學(xué)科,做了才會
6.適當(dāng)囪冏吞棗
7.琢磨別人怎么做,不是我認(rèn)為這么做
第1講
1.課程包括:java面向?qū)ο缶幊蹋琷ava圖形界面,java數(shù)據(jù)庫編程,java文件i/o流,java網(wǎng)
絡(luò)編程,java的多線程
2.Java歷史:1990sun啟動綠色計劃
1992創(chuàng)建oak語言一>java
1994gosling參加硅谷大會演示java功能震驚世界
1995sun正式發(fā)布java第一個版本,目前最新的是jdk7.0
3.java開發(fā)工具:i己事本,jcreator,jbuilder,netbean,eclipse
4.jdk包括:jre(java運(yùn)行環(huán)境)
java的類庫:3600多個,常用的150多個
5.第一個程序:
//阿貴
〃功能:顯示“HelloWorld”
//public:表示類是公共的,一個文件中只有一個public類
//class:表示這個是一個類
//HelloWorld:類名(公共類的類名,必須和文件名一樣)
publicclassHelloWorld
(
〃一個主函數(shù),程序的入口
publicstaticvoidmain(Stringargs[])
(
〃執(zhí)行語句
)
6.Java源程序(.java文件)---->java字節(jié)碼文件(.class文件)---->由解釋執(zhí)行器
(java.exe)將字節(jié)碼文件加載到j(luò)ava虛擬機(jī)(jvm)------>字節(jié)碼文件(.class)就會在java
虛擬機(jī)中執(zhí)行
第2講變量.數(shù)據(jù)類型
1.在java里面int占4個字節(jié),long占8個字節(jié)
2.Java基本數(shù)據(jù)類型:
整數(shù):(byte一個字節(jié):-128—127int四個字節(jié):-2147483648—+2147483647
short兩個字節(jié):-32768—+32767long八個字節(jié):)
小數(shù)(浮點(diǎn)):floatdouble
布爾:boolean
字符:char(兩個字節(jié),可以存放漢字,chartestl='中引申到字符串
(類)
3.在java中對char進(jìn)行運(yùn)算的時候,直接是當(dāng)做ASCII碼對應(yīng)的整數(shù)
4.數(shù)據(jù)不能從高精度到低精度的轉(zhuǎn)換Byte<short<int<long<float<double
floata=3.4;是過不去的,在java中小數(shù)默認(rèn)是double(雙精度)的
應(yīng)該寫成是floata=3.4f;
不過可以強(qiáng)制轉(zhuǎn)換:inta=(int)1.2;intb=(int)1.9
5.inta=Lintb=a+1.2;a先是往高精度轉(zhuǎn)換,然后賦給b,就報錯改成inta=l;double
b=a+1.2;或者inta=l;floatb=a+1.2f;就解決了
第4講流程控制
1.switchcase語句中,switch條件表達(dá)式的數(shù)據(jù)類型應(yīng)該和后面case的類型一致
2.switchcase語句中,可用的數(shù)據(jù)類型主要是:byteshortintcharenum
3.當(dāng)型循環(huán):for和while循環(huán)
4.直到型循環(huán):dowhile循環(huán)
第5講類與對象
1.面向?qū)ο缶幊獭鲱惻c對象
類名首字母大寫
類里面的元素叫類的成員變量/屬性
2.類的定義
package包名;
class類名extends父類implements
接口名
(
成員變量;
構(gòu)造方法;
成員方法;
)
3.如何創(chuàng)建對象:
先聲明再創(chuàng)建Catcatl;catl=newCat();
—步到位Catcatl=newCat();
4.引用傳遞類似于指針一樣
第6講成員屬性成員方法
1.對象總是在內(nèi)存中的
2.類成員方法:方法就是指某些行為,表示為函數(shù)
public返回數(shù)據(jù)類型方法名(參數(shù)列表)
(
語句;〃方法(函數(shù))主題
3.類名首字母大寫方法名首字母小寫駝峰法(匈牙利法)下劃線
法
4.指針是存儲地址的,不因?yàn)樗闹赶虻臄?shù)據(jù)的類型而改變大小。
第7講成員方法(函數(shù))構(gòu)造方法
1.類的成員方法聲明
訪問修飾符數(shù)據(jù)類型函數(shù)名(參數(shù)列表);
2.方法的參數(shù)列表是多個的,參數(shù)列表的數(shù)據(jù)類型是任意的
3.在調(diào)用某個成員方法的時候給出的具體數(shù)值的個數(shù)和類型要相匹配
4.方法可以沒有返回值
5.先設(shè)計類,然后根據(jù)類創(chuàng)建對象
6.構(gòu)造方法(構(gòu)造函數(shù)):完成對新對象的初始化:
方法名和類名相同
沒有返回值
在創(chuàng)建一個類的新對象時,系統(tǒng)會自動調(diào)用該類的構(gòu)造方法完成對新對象的初始化
一個類可以定義多個不同的構(gòu)造方法
每個類都有一個默認(rèn)的構(gòu)造方法
第8講this類變量
1.this屬于類的對象的而不是屬于類的
2.5this不能在類的外部使用,只能在類定義時候使用!
3.可以用類名直接訪問靜態(tài)變量
第9講類方法封裝
1.類變量是該類的所有對象共享的對象,一改全改了
2.定義語法:訪問修飾符static數(shù)據(jù)類型變量名
3.publicclassDemo9
(
staticinti=l;
static
(
i++;
}〃會自動執(zhí)行一次,也只有一次
publicDemo9()
i
i++;
)
publicstaticvoidmain(Stringargs[])
(
Demo9tl=newDemo9();
Demo9t2=newDemo9();
4.類方法(靜態(tài)方法、靜態(tài)函數(shù)):屬于所有對象實(shí)例的
5.Java中:類變量(static)原則上用類方法(static)去訪問;類方法中不能訪問非靜態(tài)變量
,就是非類變量,但是普通的成員方法可以訪問靜態(tài)變量(類變量)
使用:類名.類方法名對象名.類方法名
6.非類變量就是實(shí)例變量,屬于每個對象自己的
7.Java面向?qū)ο缶幊痰娜ㄋ模┐筇卣鳎悍庋b、繼承、多態(tài)(、抽象)
8.抽象:把一類事物的共有的屬性和行為提取出來,形成一個物理模板,此研究問題的方法就
是抽象
9.封裝:把抽象出來的數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在內(nèi)部,程序的其它部分
只有通過被授權(quán)的操作(成員方法),才能對數(shù)據(jù)進(jìn)行操作。
10.封裝的訪問控制修飾符
11.四種訪問控制符:
公開級別:public
受保護(hù)級別:對子類和同一個包中的類公開
默認(rèn)級別:沒有修飾符,向同一個包的類公開,子類不可以訪問類中默認(rèn)級別的元素的
私有級別:用private修飾,只有類本身才能訪問
公開〉受保護(hù)>默認(rèn)〉私有
12.
Qlicrojief*PaveiPoiait-I■三I
J文靜⑺1?IUD<X>
?1???/UBAd-3由ItiHTJtlli"
javaa&旬對象編秋(2)大
?封裝-訪問控制修飾將
4料訪問縱射的訪問總留
工游翳涮那麗聚的穆柳
區(qū)冊儺出JJJJ
protectedJJJt
pLRil髓嘟j(luò)/xx
cr:-
要理解四種控制級被需要舉例說明,但是我們還沒有抄
包和子集,所以只有等一下.大東先拿一會吧.
?島此登星
*1JOSBB40l.'HS?1?&?=曰■■?
BtWKUM-
13.包的三大作用:區(qū)分相同名字的類當(dāng)類很多的時候可以很好的管理類控制訪問范圍
14.包的打包命令:packagecom.xiaoming一般放在文件的開始的地方
15.引包命令:improt包名
第10講訪問修飾符重載覆蓋
1.一個文家中如果只有public類,那么這個public類可以不用主函數(shù)
2.不想被繼承就設(shè)為protected
3.子類最多只能繼承一個父類,Java里面不允許一個子類繼承多個父類,C++卻可以,如Java
中一定要呢,就用接口吧
4.Java的所有類都是Object的子類,繼承層次數(shù)沒有限制
6.在做開發(fā)的時候多使用JDK幫助文檔
7.方法重載:類的同一種功能的多種實(shí)現(xiàn)方式,取決于調(diào)用者傳遞的參數(shù)
8.方法重載注意事項(xiàng):
方法名相同
方法的參數(shù)類型,個數(shù),順序至少有一項(xiàng)不同
方法的修飾符可以不同
方法的返回類型可以不同
另外:
只是返回類型不一樣并不構(gòu)成重載
只是控制訪問修飾符不一樣不構(gòu)成重載
第11講約瑟夫問題(丟手帕問題)
1.方法覆蓋的:子類有一個方法和父類的某個方法名稱、返回類型、參數(shù)一樣
2.方法覆蓋注意:
子類的方法的返回類型、參數(shù)、方法名稱要和父類的一樣,否則編譯出錯
子類方法不能縮小父類方法的訪問權(quán)限,但是擴(kuò)大是可以的
3.丟手帕問題:
第十二講多態(tài)
1.多態(tài)性:訪問子類可以通過訪問父類:
Animalcat=newCat();
Animaldog=newDog();
2.在使用多態(tài)的時候,如果有使用覆蓋函數(shù),那么被覆蓋的方法(即是父類中的的那個相應(yīng)的
方法)是要存在的。
3.多態(tài):一個引用(類型)在不同情況下的多種狀態(tài),可使代碼更加靈活
4.java允許父類的引用變量引用它子類的實(shí)例,是自動完成的
代碼:
packagecom.agui;
publicclassDemo5{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Dog2ddd=newDog2();
ddd.cry();
Cat2ccc=newCat2();
ccc.cry();
Animal2an=newCat2();
an.cry();
Masterxxx=newMasterQ;
xxx.feed(newDog2(),newBoneQ);
〃動物類
classAnimal2
(
Stringname;
intage;
publicStringgetName(){
returnname;
1
publicvoidsetName(Stringname){
=name;
publicintgetAge(){
returnage;
publicvoidsetAge(intage){
this,age=age;
classFood
(
Stringname;
publicvoidshowNameQ
classFishextendsFood
(
publicvoidshowName()
第十三講抽象類接口(難點(diǎn)重點(diǎn))
1.父類方法的不確定性,用抽象類修飾這個方法,abstract。
2.抽象類還是可以一樣被繼承
3.當(dāng)一個類繼承的類是抽象的類時候,就要把抽象類中的所有的抽象方法全部方法實(shí)現(xiàn)
4.用abstract關(guān)鍵詞來修飾的時候,一定是抽象類和抽象方法
5.在使用中不多,公司筆試的時候考很多
6.抽象類不能被實(shí)例化,只有被繼承以后再去實(shí)例化
7.抽象類不一定要包含abstract方法,就算沒有abstract方法,也不能實(shí)例化它
8.一旦類包含了abstract方法,這個類必須聲明為abstract
9.抽象方法不能有主體“{廣
packagecom.sl;
publicclassDemol{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
abstractclassAnimal
(
Stringname;
intage;
abstractpublicvoidcry();
〃當(dāng)一個類繼承的類是抽象的類時候,就要把抽象類中的所有的抽象方法全部方法實(shí)現(xiàn)
classCatextendsAnimal
(
publicvoidcry()
(
//donothing
System?!?.printing口苗嘀叫");
)
10.接口就是給出一些沒有內(nèi)容的方法,封裝到一起,到某個類要使用的時候,再根據(jù)具體情
況把這些方法寫出來,語法:
class類名implements接口
方法;
變量;
packagecom.sl;
publicclassDemo2{
publicstaticvoidmain(String[]args)
(
Computercomputer=newComputer();
Cameracamera=newCamera();
Phonephone=newPhone();
computer.useUsb(camera);
computer.useUsb(phone);
interfaceUsb
(
〃聲明了兩個方法
〃開始工作
publicvoidstart();
〃停止工作
publicvoidstop();
//照相機(jī).實(shí)現(xiàn)Usb接口
〃一個類實(shí)現(xiàn)接口就要把所有的類全部實(shí)現(xiàn)!
classCameraimplementsUsb
publicvoidstart()
(
System.oMf.println("我是照相機(jī)我開始工作了!");
)
publicvoidstop()
(
System.oi/f.println("我是照相機(jī),我停止工作了!)
)
)
〃手機(jī)類
classPhoneimplementsUsb
(
publicvoidstart()
{
System.o"Aprintln("我是手機(jī),我開始工作了!");
)
publicvoidstop()
System.oat.println("我是手機(jī),我停止工作了!");
〃計算機(jī)
classComputer
〃開始使用USB接口
publicvoiduseUsb(Usbusb)〃體現(xiàn)多態(tài)
(
usb.start();
usb.stopQ;
)
)
11.接口不能被實(shí)例化
12.接口中的所有方法都不能有主體
13.抽象類里面是可以有實(shí)現(xiàn)了的方法的
14.接口中的所有方法都不能有主體,即都不能被實(shí)現(xiàn)
15.接口是更加抽象的抽象類?。。。?/p>
16.一個類繼承抽象類或是使用接口,那么就要實(shí)現(xiàn)所有的抽象方法
17.一個類可以實(shí)現(xiàn)多個接口
18.接口中可以有變量(但是不能用private,protected修飾)
19.接口中的變量本質(zhì)上都是靜態(tài)的,而且是final,不管你加不加static,所以可以直接使用:
接口名.變量名
20.在java開發(fā)中,經(jīng)常把常用的變量定義在接口中作為全局變量使用
訪問形式:接口名.變量名
21.一個接口不能繼承其它的類,但是可以繼承別的接口
22.接口體現(xiàn)了程序設(shè)計的多態(tài)和高內(nèi)聚低耦合的思想
第十四課final作業(yè)評講
1.實(shí)現(xiàn)接口和繼承父類的區(qū)別:
2.java是單繼承,一個類只允許繼承一個父類,這種單繼承的機(jī)制可以保證類的純潔性,比
C++的多繼承機(jī)制簡潔
3.實(shí)現(xiàn)接口可以看做是對單繼承的一種補(bǔ)充
4.繼承是層次式的,不太靈活,修改某個類就會打破這種繼承的平衡,但是接口就不會,因?yàn)?/p>
只針對實(shí)現(xiàn)接口的類才起作用
5.用接口體現(xiàn)多態(tài):
6.前期綁定:在程序運(yùn)行之前就進(jìn)行綁定,由編譯器和連接程序?qū)崿F(xiàn),又叫靜態(tài)綁定,如static
方法和final方法,包括private方法,它是隱式final的
7.后期綁定:在運(yùn)行的時候根據(jù)對象的類型進(jìn)行綁定,由方法調(diào)用機(jī)制實(shí)現(xiàn),因此又叫動態(tài)綁
定,或是運(yùn)行時綁定,除前期綁定外的所有方法都屬于后期綁定
8.
〃展示接口實(shí)現(xiàn)多態(tài)的概念
packagecom.s2;
〃汽車接口
interfaceCar
(
StringgetName。;//獲得名字
intgetPrice。;//獲得價格
)
〃寶馬
classBMWimplementsCar
(
publicStringgetNameQ
(
return"我日,寶馬啊”;
)
publicintgetPrice()
(
return800000;
classQQimplementsCar
publicStringgetNameQ
return”沒意思的,qqH;
publicintgetPrice()
(
return20000;
)
)
publicclassCarShop
(
〃售車的收入
privateintmoney=0;
〃賣出一部車
publicvoidsellCar(Carcar)
(
System.?!rintin(“車型:”+car.getName()+”價格是:,,+car.getPrice());
money+=car,getPrice();
)
publicintgetMoneyO
(
returnmoney;
)
publicstaticvoidmain(String[]args)
CarShopa=newCarShopQ;
〃賣出寶馬
a.sellCar(newBMW());
//賣出qq
a.sellCar(newQQ());
System.ow?.println("總收入是:"+a.getMoney());
9.final概念:final可以修飾變量和方法
當(dāng)不希望父類的某些方法被子類覆蓋的時,可以用final修飾
當(dāng)不希望類的某個變量的值被修改,可以用final修飾
當(dāng)不希望類被繼承時,可以用final修飾
lO.final修飾的變量一般用下劃線書寫
11.如果一個變量是final的,那么定義時候必須賦初值
12.final修飾的變量又叫常量,一般用XX_XX_XX命名
13.final什么時候用:
處于安全的考慮,類的某個方法不允許修改
類不會被其它的類繼承
某些變量值是固定不變的,比如pi
第15講講題目
1.switch只能對int、short>byte以及枚舉類型進(jìn)行判斷,case后面只能是常量表達(dá)是
2.猜拳的java程序設(shè)計:
有個人Tom設(shè)計他的成員變量,成員方法,和電腦猜拳,電腦每次都產(chǎn)生一個隨機(jī)
數(shù)0,1,2,0表示石頭,1表示剪刀,2表示布。請實(shí)現(xiàn):
第16講數(shù)組
1.數(shù)組是可以存放多個同一類型的數(shù)據(jù)
2.用法:
程序員用法:數(shù)組定義:數(shù)據(jù)類型數(shù)組名[]=new數(shù)據(jù)類型[大小];
如:intarr[]=newint[5];
或者是int口arr=newint[5];
或者是int[]arr=newint[5];
數(shù)組引用:數(shù)組名[下標(biāo)]
沒事找事用法:數(shù)組定義:intarrn;arr=newint15];
或者是int口arr;arr=new
或者是int[]arr;arr=newint[5];
數(shù)組引用:數(shù)組名[下標(biāo)]
古板用法:inta口={1,2,3,4,5,6,7,890};
數(shù)組引用:數(shù)組名[下標(biāo)]
3.知道數(shù)組的大?。篴rr.length(成員屬性)
4.引用在棧里面,對象在堆里面
5.對象數(shù)組:
packagecom.testl;
import
publicclassDemno5_2{
publicstaticvoidmain(String[]args)throwsIOException{
Dogdog[]=newDog[4];
InputStreamReaderisr=newInputstreamReader(System.m);
BufferedReaderbr=newBufferedReader(isr);
for(inti=0;i<4;i++)
(
dog[i]=newDog();
System.oMprintln("請輸入第”+(i+l)+”只狗名字)
〃輸入狗名
//try{
Stringname=br.readLine();〃將名字賦給對象
//}catch(Exceptione){
//TODOAuto-generatedcatchblock
//e.printStackTrace();
//}
dog[i].setName(name);
System.—.printin("請輸入第”+(i+l)+”只狗的體重:
Strings_weight=br.readLine();
floatweight=Float.parseF7oR(s_weight);
//將名字賦給對象
dog[i].setWeight(weight);
)
floatallWeight=O;
for(inti=0;i<4;i++)
(
allWeight+=dog[i].getWeight();
)
floatavgWeight=allWeight/dog.length;
System?!?.printin(“狗總體重:"+allWeight+”狗平均體重:"+avgWeight);
)
)
〃定義一個狗類
classDog
(
privateStringname;
privatefloatweight;
publicvoidsetName(Stringname)
(
this,name=name;
)
publicvoidsetWeight(floatweight)
this,weight=weight;
publicfloatgetWeightQ
returnthis.weight;
4.對象、字符串的很多不能用“==",用的話是表示地址相等,比較字符串的內(nèi)容是否相等是用
equals方法
5.數(shù)組可存放同一類型數(shù)據(jù)
簡單數(shù)據(jù)類型(intfoat)數(shù)組,可以直接賦值
對象數(shù)組在定義后,賦值時候需要再次為每個對象分配空間【即是:new對象】
數(shù)組大小必須事先指定,如:intx;inta口=newint[x];是可以的
數(shù)組名可以理解為指向數(shù)組首地址的引用
數(shù)組的下標(biāo)是從0開始標(biāo)號的
6.排序的介紹:排序是將一群數(shù)據(jù)依據(jù)一定的順序進(jìn)行排列的過程
分類:
內(nèi)部排序:將要排序的所有數(shù)據(jù)都加在到內(nèi)存里面進(jìn)行排序,包括交換式排序法、選擇式排序
法和插入式排序法
外部排序:數(shù)據(jù)量過大,無法全部加載到內(nèi)存,包括合并排序法和直接合并排序法
7.交換式排序法屬于內(nèi)部排序法,是運(yùn)用數(shù)據(jù)值比較后,依判斷規(guī)則對數(shù)據(jù)的位置進(jìn)行交換,
已達(dá)到排序的目的,它包括:冒泡排序法(Bubblesort)和快速排序法(Quicksort)
8.冒泡排序法:
第一次寫法:
packagecom.test1;
publicclassDemo5_3{
publicstaticvoidmain(String[]args)
intarr[]={l,6,0,-l,9,4,5,l,-5,4,7);
〃排序開始
//
for(inti=O;i<arr.length-l;i++)
(
〃內(nèi)層循環(huán)開始逐一比較,如果發(fā)現(xiàn)前一個數(shù)比后一個數(shù)大,就交換
for(intj=O;j<arr.length-i-l;j++)
(
if(arr[j]>arr[j+l])
(
arr[j]=arr[j]Aarr[j+1];
arr[j+l]=arr|j]Aarr[j+l];
arr[j]=arr[j]Aarr[j+l];
for(inti=O;i<=arr.length-l;i++)
(
System.^wZ.print(arr[i]+n");
)
System.oMprint("總長度是"+arr.length);
我們進(jìn)行改進(jìn),進(jìn)行封裝試試看:
packagecom.testl;
publicclassDemo5_3{
publicstaticvoidmain(String[]args)
intarr[]={l,6,0,-l,9,4,5,l,-5,4,7);
Bubblebubble=newBubble();
bubble,set(arr);
〃排序開始
//
classBubble
(
publicvoidset(intarr[])
i
for(inti=O;i<arr.length-1;i++)
(
//內(nèi)層循環(huán)開始逐一比較,如果發(fā)現(xiàn)前一個數(shù)比后一個數(shù)大,就交換
for(intj=O;j<arr.length-i-l;j++)
(
if(arr[j]>arr[j+l])
(
arr[j]=arr[j]Aarr[j+1];
arr[j+l]=arr[j]Aarr[j+l];
arr[j]=arr[j]Aarr[j+1];
for(inti=O;i<=arr.length-l;i++)
System.OMf.print(arr[i]+"");
)
System.。加.print("總長度是"+arr.length);
)
)
9.注意:新建一個類的對象而且調(diào)用了類的方法時候,虛擬機(jī)會在主棧的外面給調(diào)用的這個方
法分配一個相應(yīng)的棧,在外面的這個棧里面對數(shù)組或者對象的操作就是對主棧的相應(yīng)的數(shù)組或
者對象的操作,但是不是針對所有的類型,如果是int等簡單類型就不行。
10.選擇式排序法:選擇排序法(快于冒泡排序法):
選擇排序法(selectsorting)也是一種簡單的排序方法,第一次從R[0kR[n-1]中尋選
取最小值,與R[0]交換,第二次從中選取最小值,與R[l]交換,第三次從
R[2卜R[n-1]中選取最小值與R[2]交換...總共(n-1)次。
第十八講排序查找
1.插入式排序法分為:
插入排序法(InsertionSort)
謝爾排序法(shellsort)
二叉樹排序法(Binary-treesort)
2.插入式排序法一插入排序法(InsertionSorting)
基本思想:把n個待排序的元素看成是一個有序表和一個無序表,開始時候有序表只包含一個
元素,無序表中包含有n-l個元素,排序過程中每次從無序表中取出一個元素,把她的排序嗎
一次和有序表元素的排序碼進(jìn)行比較,將它插入到有序表的適當(dāng)位置,使之成為新的有序表。
3.插入法的實(shí)現(xiàn):
packagecom.testl;
publicclassDemo5_4{
publicstaticvoidmain(String[]args)
(
intarr[]={1,6,3,10,8,7,9,0,0,-199,9);
Insertinsert=newInsert();
insert,sort(arr);
)
classInsert
(
publicvoidsort(intarr[])
(
for(inti=l;i<arr.length;i++)
(
intinsertVal=arr[i];
//insertVal準(zhǔn)備和前一個數(shù)比較
intindex=i-l;
while(index>=O&&insertVal<arr[index])
(
〃將要把型[index]向后移動
arr[index+1]=arr[index];
〃讓index向前移動
index";
)
〃將indexVal插入到適當(dāng)位置
arr[index+l]=insertVal;
)
System.oMprintln("結(jié)果是:");
for(intp=O;p<=arr.length-l;p++)
(
System。"力print(arr[p]+"");
)
)
)
4.交換式排序法——快速排序法
快速排序(Quicksort)是對冒泡排序法的改進(jìn),1962年提出的,使用遞歸思想。
5.希爾排序法
6.合并排序法:外部排序法最常用的方法,如果數(shù)據(jù)量太大無法一次完全加載,可使用外部輔
助內(nèi)存來處理數(shù)據(jù),主要應(yīng)用在文件排序。
7.查找:順序查找和二分查找(使用二分查找前提是先排好序)
packagecom.test1;
publicclassDemo5_5
(
publicstaticvoidmain(String[]args)
(
intarr[]={2,5,7,12,15);
BinaryFindbf=newBinaryFindQ;
bf.find(O,arr.length-1,3,arr);
bf.find(O,arr.length-1,12,arr);
)
)
classBinaryFind
(
publicvoidfind(intleftindex,intrightindex,intval,intarr[])
(
〃首先找到中間的數(shù)
intmidIndex=(rightIndex+leftIndex)/2;
intmidVal=arr[midIndex];
if(rightlndex>=leftlndex)
(
〃如果要找的數(shù)比midVai小
if(midVal>val)
(
find(leftlndex,midIndex-1,val,arr);
)
)
第十九講多維數(shù)組
1.多維數(shù)組,定義:
語法:類型數(shù)組名口口=new類型[大小][大小]inta口口=newint[2][3]
2.
publicclassDemo5_6
publicstaticvoidmain(String[]args)
(
inta[][]=newint[4][6];
a[l][2]=l;
a[2][l]=2;
a[2][3]=3;
for(inti=0;i<4;i++)
(
〃列
for(intj=O;j<3;j++)
System.o〃1.print(a[i][j]+"");
System.o〃println();
)
第二十講二進(jìn)制位運(yùn)算移位計算
1.0的反碼和補(bǔ)碼都是0
2.我們只會針對有符號的數(shù)才講反碼補(bǔ)碼
3.java沒有無符號數(shù),換言之,java中的數(shù)都是有符號的
4.在計算機(jī)運(yùn)算的時候,都是以補(bǔ)碼的方式運(yùn)算的
5.按位與&或|異或八取反~
6.--2=-3(00000010->11111101->11111100->10000011)
7.2&3=000000102|3=00000011~-5=(10000101->11111010->111110110bW>00000100)4
8.有3個移位運(yùn)算符:
>>算術(shù)右移:低位溢出,符號位不變,并用符號位補(bǔ)由于移動而空出的高位
<<算術(shù)左移:符號位不變,地位補(bǔ)0
>>>邏輯右移:
9.記?。簩ω?fù)數(shù)操作就要先找補(bǔ)碼?。?!正數(shù)也是,只不過不邊罷了。得到的結(jié)果如果是正數(shù)
就結(jié)束,如果是負(fù)數(shù)就再折騰一下,轉(zhuǎn)變成原碼才行。
10.-1移動任意位都是-1
相當(dāng)于是*4)=4,相當(dāng)于是*4)=-4
12.而對于有符號數(shù),其左移操作還是邏輯左移,但右移操作是采用邏輯右移還是算術(shù)右移就
取決于機(jī)器了!(算術(shù)右移和邏輯右移的區(qū)別是:算術(shù)右移不右移符號位,即最高位,右移后
前補(bǔ)0還是1取決于符號位的值;邏輯右移執(zhí)行時將移動符號位,右移后前補(bǔ)0)
第21講集合
1.集合類泛型異常的處理
2.解決方法:鏈表或者集合類(可以動態(tài)的改變),請熟悉常用的集合類
3.集合類分類:
List結(jié)構(gòu)的集合類:
ArrayList類,LinkedList類,Vector類,Stack類
Map結(jié)構(gòu)的集合類
HashMap類,HashTable類
Set結(jié)構(gòu)的集合類
HashSet類,TreeSet類
Queue結(jié)構(gòu)的集合類
Queue接口
4.Java中所有的對象都是從Object繼承下來的
5.子類交給父類,可以自動轉(zhuǎn)換,反過來就要強(qiáng)制轉(zhuǎn)換
6.ArrayList中可以多次存放同樣的人,ArrayList本質(zhì)是存放引用
7.AArryList中刪除對象
packagecom.test1_1;
import
publicclassDemo5
(
publicstaticvoidmain(String[]args)
ArrayListal=newArrayList。;
System.o"Z.println(“al大?。篗+al.size());
〃向辿中加入數(shù)據(jù)(類型Object)
〃創(chuàng)建一個職員
Clerkclerkl=newClerk(“老大”,50,1000);
Clerkclerk2=newClerk(“老二”,45,1000);
Clerkclerk3=newClerk(“老三”,35,1000);
〃將clerkl加入al中
al.add(clerkl);
al.add(clerk2);
al.add(clerk3);
〃可不可以放入同樣的人?
System.o“/.println(”al大小:n+al.size());
〃如何訪問al中的對象(數(shù)據(jù))
〃訪問第一個對象
//Clerktemp=(Clerk)al.get(2)://al.get(0)返回object類型,要強(qiáng)制轉(zhuǎn)換
〃遍歷所有的對象
for(inti=0;i<al.size();i++)
(
Clerktemp=(Clerk)al.get(i);
System.。"力println("第"+(i+l)+"個人是:"+temp.getName());
)
〃如何在al中刪除一個對象
al.remove(l);
System.。"%.printin("第2個人被刪除了,現(xiàn)在呢?看看下面的:”);
for(inti=0;i<al.size();i++)
Clerktemp=(Clerk)al.get(i);
System.。加.printin("第"+(i+l)+"個人是:"+temp.getName());
)
)
)
classClerk
(
publicStringgetName()
(
returnname;
)
publicfloatgetSal()
(
returnsal;
)
publicintgetAge()
(
returnage;
)
Stringname;
privatefloatsal;
intage;
publicClerk(Stringname,intage,floatsal)
(
=name;
this.sal=sal;
this,age=age;
第22講集合
1.字符串相等是地址相等而不是內(nèi)容相等!
2.雇員管理系統(tǒng)程序的編寫(自己改進(jìn)了一點(diǎn),不完全,繼續(xù)改進(jìn)……)
3.LinkedList
addFirst表示把元素加在鏈表的最前面(類似于棧一樣)
addLast表示把元素加在鏈表的最后面(類似于隊列一樣)
getFirst
getLast
remove
removeFirst
removeLast
4.Vector:
5.Stack用法:(加的時候是在前加的)
第二十三講集合
1.HashMap
HashMaphm=newHashMapO;
Empemp=newEmp(“s001",''aaa",3.4f);
2.HashMap可以存放空置但是HashTable不能存放空值。
3.Hashtable是基于陳舊的Dictionary的,HashMap是Javal.2弓|進(jìn)的Map接口的一個實(shí)現(xiàn)
4.Hashtable是線程同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的。而
HashMap是異步的,因而HapMap中的對象并不是線程安全的。因?yàn)橥降囊髸绊憟?zhí)行的
效率,所以如果你不需要線程安全的集合那么使用HashMap是一個很好的選擇,這樣可以避
免由于同步而帶來的不必要的性能開銷,從而提高效率。
5.值:HashMap可以讓你將空值作為一個表的條目的key或value,但是Hashtable是不能放入
空值的(null)
6.HashTable由于是同步的,有鎖,因此是存在等待的,HashMap允許
7.ArrayList和Vector區(qū)別:
Vector是同步的,是線程安全的,更安全
ArrayList是異步的,不是線程安全的,沒有Vector安全
數(shù)據(jù)增長:Vector缺省情況下是自動增長原來一倍的數(shù)組長度,適合保存大量的數(shù)據(jù);
ArrayList是原來的50%
8.如果要求線程安全,使用Vector、Hashtable,否則ArrayList、LinkedList、HashMap
9.如果要求鍵值對,使用HashMap、Hashtable
10.如果數(shù)據(jù)量大又考慮線程安全,使用Vector
第二十四講集合補(bǔ)充
HashMap和Hashtable都是實(shí)現(xiàn)Map的接口的,ArrayList和LinkedList都是實(shí)現(xiàn)List的接口的
第二十五講泛型異常
2.Java引入泛型的好處就是安全簡單,可以在開始的時候就約束集合的類型
3.泛型的好處就是在編譯的時候檢查類型的安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動和隱式的,提
高代碼重用率
packagecom.test1_1;
import
publicclassDemo7_4{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ArrayList<Dog>al=newArrayList<Dog>();
Dogdogl=newDog();
al.add(dogl);
//Dogtemp=(Dog)al.get(0);
//Cattemp1=(Cat)al.get(O);
Dog也說=al.get(0);〃這個時候就不需要強(qiáng)制類型轉(zhuǎn)換
)
)
4.Java的反射機(jī)制:拿到一個類的很多信息!好處是:編寫一些靈活性更好的代碼
packagecom.testl_l;
publicclassDemo7_5
(
publicstaticvoidmain(String[]args)
(
//Gen<Integer>genl=newGen<Integer>(2);〃我們這個時候調(diào)用了構(gòu)造函數(shù),注意新建
的時候都是調(diào)用了構(gòu)造函數(shù)
//gen1.showTypeName();
Gen<Bird>gen2=newGen<Bird>(newBird());
gen2.showTypeName();
)
〃定義一個鳥類Bird
classBird
publicvoidtest1()
(
)
publicvoidcount(inta,intb)
(
)
)
〃定義一個類
classGen<T>
(
privateTo;
〃構(gòu)造函數(shù)
publicGen(Ta)〃構(gòu)造函數(shù)
(
o=a;
)
//得到T的類型的名稱
publicvoidshowTypeName()
(
〃通過反射機(jī)制,我們可以得到T這個類型的很多信息,比如得到成員函數(shù)名
Method口m=o.getClass().getDedaredMethods();〃函數(shù)的一些信息
〃打印
for(inti=O;i<m.length;i++)
)
5.使用泛型的優(yōu)點(diǎn)(GJ表示泛型Java):類型安全
向后兼容
層次清晰
性能較高
6.異常處理:當(dāng)出現(xiàn)程序無法控制的外部環(huán)境問題的時候(用戶提供的文件不存在,文件內(nèi)容
損壞,網(wǎng)絡(luò)不可用……),JAVA就會用異常對象來描述
7.JAVA中用2種方法處理異常
1.在發(fā)生異常的地方直接處理
2.將異常拋給調(diào)用者,讓調(diào)用者自己處理
8.異常分類:
頂層都是Throwable
9.檢查異常舉例:
10.tracert(traceroute)查看路由信息
11.routeprint:路由表信息打印出來
12.netstat-an:誰連接到你的電腦上的
第二十六講異常和異常的處理
1.異常處理:
Try...catch:程序運(yùn)行產(chǎn)生異常時候,將從異常發(fā)生點(diǎn)中斷程序并向外拋出異常信息
2.設(shè)置了捕獲,而且真的捕獲到了異常,后面的異常就檢測不到,遵循一個先后的順序,但是
程序還是會繼續(xù)執(zhí)行,正常程序和e.printStackTrace。;執(zhí)行后顯示的順序貌似有點(diǎn)亂了,所以
書上推薦用System.oaf.println("message:="+e.getMessage());顯示順序不會亂
3.在出現(xiàn)異常的地方就中止執(zhí)行代碼,然后直接進(jìn)入到catch語句,如果有多個catch語句,
就進(jìn)入匹配異常的那個catch語句
4.try
FileReaderfr=newFileReader(Md:\\l2334.txt");
)
catch(Exceptione)//或者Exceptione,Exceptione是捕獲所有的
(
System.0w^println("message:=n+e.getMessage());
e.printStackTrace();
)
5.finally:如果把finally塊置try...catch語句后,finally塊一般都會得到執(zhí)行,相當(dāng)于一個萬能
的保險,即使前面的try塊發(fā)生異常,而又沒有對應(yīng)異常的catch塊,finally塊將馬上執(zhí)行
6.文件被打開一直沒有關(guān)閉是很恐怖的!所以就有了finally語句,不管有沒有異常都會執(zhí)行,
一般說,把需要關(guān)閉的資源「文件,連接,內(nèi)存……1
7.以下情況finally將不被執(zhí)行:
Finally塊中發(fā)生了異常
程序所在的線程死亡了
使用了System.exit(-l)
關(guān)閉CPU
8.
packagecom.testl_l;
import
import.*;
publicclassDemo7_6
(
publicstaticvoidmain(String[]args)
(
〃檢查異常1.打開文件
FileReaderfr=null;
try
(
〃在出現(xiàn)異常的地方就中止執(zhí)行代碼,然后直接進(jìn)入到catch語句
〃如果有多個catch語句,就進(jìn)入匹配異常的那個catch語句
fr=newFileReader("d:\\1234.txt");〃如果找不到咋辦?。磕惚仨毺幚?/p>
)
catch(Exceptione)//或者Exceptione,Exceptione是捕獲所有的
(
〃要輸出異常的信息,利于排錯
System.^wAprintln("message:=H+e.getMessage());
e.printStackTrace();
//處理
)
//catch(lOExceptione2)
//{
//e2.printStackTrace();
//)
finally
(
System?!?.printin(“進(jìn)入finally");
〃這個語句塊,不管有沒有異常,都會執(zhí)行
〃一般說,把需要關(guān)閉的資源[文件,連接,內(nèi)存……]
if(fr!=null)
(
try(
fr.close();
}catch(lOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
//
System.?!rintln("kankan");
他的端口號:4567
〃運(yùn)行異常
//inta=4/0;
〃數(shù)組越界
//intarr[]={1,2,3};
arr[23]);
)
)
9.拋出異常:
packagecom.testl_l;
import
publicclassDemo7_7
(
publicstaticvoidmain(String[]args)throwsException
(
Fatherfather=newFather();
father,test1();
classFather
privateSonson;
publicFatherQ
(
son=newSon();
)
publicvoidtest1()throwsException
(
System.0w^println(,'l");
try(
son.test2();
}catch(Exceptione){
System.oMprintln("父親)
e.printStackTrace();
classSon
(
publicvoidtest2()throwsException
(
FileReaderfr=null;
fr=newFileReader("d:\\l23d4.txt");
)
)
10.泛型可以更安全和提高代碼重用率,泛型可以利用反射機(jī)制拿到類的一系列信息,從而提
高代碼的優(yōu)越性。
第二十七講作業(yè)講評
跳水成績打分系統(tǒng)
第二十八講作業(yè)講評
1.靜態(tài)變量不給初值也是可以的,默認(rèn)為0,如果前面有final就一定要賦值了
2.布爾值之間可以用“一"號
3.if(i==l&j==2)〃由于"i==l”返回了布爾值,所以就可以過去,否則就不行,但是c中就沒
有這樣的顧慮,c會自動轉(zhuǎn)換成boolen
4.繼承中不能縮減被繼承的父類中函數(shù)的范圍(針對函數(shù)的參數(shù)的范圍)
5.Math.floor->取一個比某數(shù)小的最大整數(shù)
Math.round->四舍五入
Math,ceil->取一個比某數(shù)大的最小整數(shù)//ceil:天花板
Math.min->需要兩個數(shù)被操作
6.substring(beginlndex,endindex)----->起始索引包括,結(jié)束索引不包括
7.字符串的序數(shù)也是從0開始計數(shù)
8.Java的內(nèi)存區(qū)分為:代碼區(qū)、棧區(qū)和堆區(qū)
9.普通變量定義和初始化的時候直接放在棧區(qū),不是普通變量的引用在棧區(qū),對象在堆區(qū)
10.類中含有靜態(tài)變量(函數(shù))時候:直接在數(shù)據(jù)區(qū)(申請空間)
11.堆區(qū)中有字符串引用池(stringpool),它存放字符串的引用,當(dāng)字符池發(fā)現(xiàn)有字符時就指
向字符,字符是存放在堆區(qū)中的。相同的字符串指向相同的地址,但是如果要用new來初始
化,地址就不一樣了,因?yàn)閚ew是直接去開辟堆區(qū)的空間的。
12.對于對象來講,==是比較地址
14.如果希望在子類中調(diào)用父類的構(gòu)造函數(shù),那么一般要求在子類的構(gòu)造函數(shù)中調(diào)用
15.super表示當(dāng)前正要調(diào)用該類它父類的變量或方法。
第二十九講滿漢樓.swing介紹開始進(jìn)入圖形界面)
l.gui->gooe(讀音)Graphicuserinterface
2.AWT(抽象窗口工具集)AbstractWindowToolKit
------>swing,解決了awt存在的led問題,是awt的繼承和發(fā)展
——>IBM認(rèn)為swing比較消耗內(nèi)存,就創(chuàng)建了一個新的GUI庫,叫SWT
—>IBM為了開發(fā)方便,又開發(fā)了更易用,功能強(qiáng)大的JFace
3.
Eclipse最早是IBM附屬公司oti開發(fā)的,一共投入了4000萬美金,后來捐獻(xiàn)給開源社區(qū)
Eclipse是一個開源的、可擴(kuò)展的集成開發(fā)環(huán)境,已經(jīng)成為最流行的java開發(fā)工具
Eclipse安裝就可以開發(fā)Javase,不能開發(fā)javaee項(xiàng)目,要安裝MyEclipse或者lomboz
4.IDE:集成開發(fā)環(huán)境,比如jereator、vs2005
5.sun公司開發(fā)的netbean,波蘭的公司的Jbuilder,還有更早的Jcreator,IBM的J2SE開發(fā)
+Myeclipse
6.swing組件:
7.JFrame是Frame的子類
屬于容器類組件,頂層容器
JFrame有一些常用的方法
8.JButton組件(也是一種容器):是AbstractButton的子類,可以加入別的組件
9.由于組件會很多,以后就現(xiàn)在類的開始聲明,然后再在構(gòu)造函數(shù)里面先創(chuàng)建,再添加!
第三十講布局管理器
1.布局管理器:
概念:組件在容器中的位置和大小是由布局管理器來決定的,所有的容器都會使用一個布局管
理器,通過它來自動進(jìn)行組件的布局管理
種類:java提供了五種布局管理器:流式布局管理器(FlowLayout);邊界布局管理器
(BorderLayout);網(wǎng)格布局管理器(GridLayout);卡片布局管理器(CardLayout)、網(wǎng)格包
布局管理器(GridBagLayout),前三種最常見
2.邊界布局將容器簡單的劃分為東南西北中5個區(qū)域,中間區(qū)域最大
3.JFrame和JDialog窗體默認(rèn)是邊界布局
如:
packagecom.GUI;
import
import
publicclassDemo82extendsJFrame
JButtonjbl,jb2,jb3,jb4,jb5;
publicstaticvoidmain(String[]args)
Demo8_2demo82=newDemo8_2();
)
publicDemo8_2()
(
jbl=newJButton("中部)
jb2=newJButton("北部”);
jb3=newJButton("東部)
jb4=newJButton("南部)
jb5=newJButton("西部)
〃添加各個組件
this.add(jbl,BorderLayout.CENTER);
this.add(jb2,BorderLayoutWOT?TH);
this.add(jb3,BorderLayout.EAST);
this.add(jb4,BorderLayout.SOUTH);
this.add(jb5,BorderLayout.WEST);
//設(shè)置窗體屬性
this.setTitle("邊界布局”);
this.setSize(200,200);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EX/71_OALC£(9S£);
〃顯示窗體
this.setVisible(true);
)
4.流式布局:HowLayout,按照組件的添加次序?qū)粹o組件(當(dāng)然也可以是別的組件)從左到
右放到容器中,當(dāng)?shù)竭_(dá)容器的邊界時,組件放置到下一行中,F(xiàn)l
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金色的魚鉤教案范文10篇
- 半年個人工作計劃
- 元宵大班教案
- 2021北師大版三年級數(shù)學(xué)下冊教案設(shè)計
- 四年級上冊語文教學(xué)計劃4篇
- 等待高中作文(集錦15篇)
- 幼兒園畢業(yè)實(shí)習(xí)報告3篇
- 在外貿(mào)公司實(shí)習(xí)報告集合8篇
- 上半年道路交通安全工作總結(jié)
- 天宮課堂第三課300字作文10篇參考
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(提高篇)(含答案)
- 安全生產(chǎn)事故案例分析
- 2024年07月22208政治學(xué)原理期末試題答案
- 《客戶開發(fā)技巧》課件
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識宣傳課件
- 口腔執(zhí)業(yè)醫(yī)師定期考核試題(資料)帶答案
- 2023-2024學(xué)年北京市通州區(qū)九年級(上)期末語文試卷
- 2024-2030年中國瑜伽培訓(xùn)行業(yè)運(yùn)營模式及投資戰(zhàn)略規(guī)劃分析報告
- 人教版七年級語文上冊《課內(nèi)文言文基礎(chǔ)知識 》專項(xiàng)測試卷及答案
- 2023-2024學(xué)年廣東省深圳市龍崗區(qū)八年級(上)期末英語試卷
- DB23-T 3768-2024北方種鵝節(jié)水生態(tài)旱養(yǎng)管理技術(shù)規(guī)程
評論
0/150
提交評論