java從入門到精通視頻筆記_第1頁
java從入門到精通視頻筆記_第2頁
java從入門到精通視頻筆記_第3頁
java從入門到精通視頻筆記_第4頁
java從入門到精通視頻筆記_第5頁
已閱讀5頁,還剩142頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

評論

0/150

提交評論