Java语言程序设计课件_第1页
Java语言程序设计课件_第2页
Java语言程序设计课件_第3页
Java语言程序设计课件_第4页
Java语言程序设计课件_第5页
已阅读5页,还剩182页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA語言概述第一章21.1.1Java語言的發展1991年由JamesGosling負責開發的一個分佈式代碼系統(Oak),最初是為家用消費電子產品(電冰箱、電視機等)進行編程控制。1993年Sun公司將目標市場轉向Internet。1994年將Oak語言更名為Java。1995年Java被正式發佈,之後立即引起極大的轟動。3Java目前的主要應用許多大公司購買了Java的許可證。眾多軟體開發商開始支持Java軟體產品。面向對象的應用開發。Intranet(企業內部網)上的軟體開發。動態畫面的設計,包括圖形圖像的調用。與各類資料庫連接查詢的SQL語句實現。其他應用類型的程式。

41.1.2Java語言的特點2-1簡單性面向對象分佈式處理健壯性結構中立安全性系統精簡,但功能齊備。風格類似於C++,對C++程式員而言非常容易掌握。Java摒棄了C++中容易引發程式錯誤的地方,如指針操作和記憶體管理;提供豐富的類庫。

完全是面向對象的,它不支持類似C語言那樣的面向過程的程式設計技術。支持TCP/IP協議。Java應用程式可通過一個特定的URL來打開並訪問對象,就像訪問本地檔系統那樣簡單。提供面向對象的異常處理機制,在編譯時能對Null指針檢測、數組邊界檢測、異常出口位元組代碼校驗等。自動垃圾收集來進行記憶體管理。將根源程式編譯成一種結構中立的中間檔格式。只要有Java運行系統的機器都能執行這種中間代碼。Java語言提供的安全。編譯器提供的安全。位元組碼校驗。類裝載。

51.1.2Java語言的特點2-2可移植性解釋性高性能多線程動態Java應用程式可以在配備了Java解釋器和運行環境的任何電腦系統上運行,而與體系結構無關。Java編譯器將java原始檔案生成類檔.class,類檔可通過java命令解釋執行,將Java位元組碼轉換為機器碼。JIT編譯器。可以提高Java代碼的執行速度。內置多線程功能,使得在一個程式裏可同時執行多個小任務。帶來的好處是更好的交互性和即時控制性。允許程式動態地裝入運行過程中所需要的類,這是C++語言進行面向對象程式設計所無法實現的。61.1.3Java與C++的比較專案JavaC++全局變數不存在全局變數存在數據類型和轉換

無結構、枚舉或者聯合,轉換時進行類型相容檢查通過指針進行任意的類型轉換,帶來不安全性範圍運算符

無作用域範圍運算符::有數組對象,有只讀的length

無length記憶體管理可創建不屬於基本數據類型的對象不能提前聲明不必進行提前聲明必須預處理沒有預處理機制有頭檔importinclude指針無有goto和virtual無有注釋文檔對注釋文檔的內建支持無71.1.4Java程式工作機制4-181、Java虛擬機4-2實現平臺無關性的基礎就是Java虛擬機,是以Java位元組碼為指令組的軟CPU。負責對本地*.class檔解釋執行。包含類加載器、位元組確認器、以及JIT即時編譯器。

類加載器:用來取得從網路或本地的類檔。

位元組確認器:確認類檔是否有正確的格式。

JIT:使虛擬機能提高到編譯式的運行效率。

92、位元組碼4-3*.class檔與機器碼不同,不是真正的CPU可運行的指令代碼,故又稱偽代碼。通過JVM以及JRE將其轉成本地機器代碼,達到一次撰寫,到處運行的效益。(WriteOnce,RunAnywhere)

103、垃圾收集4-4虛擬機使用兩個獨立的堆記憶體,分別用於靜態記憶體分配和動態記憶體分配。非垃圾收集堆記憶體,用於存儲所有類定義、常量池和方法表。另一個堆記憶體,用於垃圾收集的演算法適用於存放在動態堆記憶體中的對象。垃圾收集器在收集對象前調用finalize方法。顯式調用垃圾收集(System.gc())方法,不能保證立即運行,因為其優先順序很低。111.2.1Java應用程式舉例2-1//這是檔案名為“HelloWorld.java”的簡單應用程式importjava.io.*;//引入包classHelloWorld{//定義類publicstaticvoidmain(Stringargs[])//main方法{

System.out.println(“歡迎來到Java世界!”);//輸出數據}}

定義類的關鍵字類名必須這麼寫12保存並運行2-2以java為擴展名,保存時注意類型。131.2.2Java小應用程式舉例2-1/**HelloToJava.java*/importjava.awt.Graphics;importjava.applet.*;publicclassHelloToJavaextendsApplet{publicStringsHello;publicvoidinit(){sHello="歡迎來到Java世界!";}

publicvoidpaint(Graphicsg){g.drawString(sHello,50,50);}}文檔注釋,可以使用javadoc命令生成HTML幫助檔。裝入系統類庫。14保存並運行2-2將上頁檔保存為HelloToJava.java(必須)。<HTML><APPLETCODE="HelloToJava.class"WIDTH=200HEIGHT=100> </APPLET></HTML>將檔保存為*.htm或*.html檔。首先將HelloToJava.java檔進行編譯(javac命令)。

javacHelloToJava.java然後使用appletviewer*.htm

查看效果。151.2.3Java程式結構(1)至多有一個public類,檔案名必須與類名相同。(2)程式可以有一個或多個其他類。(3)當需要從某個類繼承或使用某個類及其方法時,使用import引入該類的定義。(4)Java程式組成結構package //0個或1個,必須放在檔開始

import //0個或多個,必須放在所有類定義之前

publicclassDefinition //0個或1個,檔案名必須與類名相同classDefinition //0個或多個interfaceDefinition //0個或多個

161.3開發工具與開發步驟安裝Java2SDK開發工具。設置環境變數:

path=javac和java命令所在的目錄。

classpath=存放位元組碼檔的目錄。Java2SDK簡介及使用。Java程式的集成開發環境。JCreator的安裝配置及使用。

172.1.1Java識別字用來表示變數、方法或類等的名字。定義的規則如下:只能使用字母、數字、下劃線和美元符。只能以字母、下劃線和美元符開頭。嚴格區分大小寫,沒有長度限制。應該具有特定的意義。合法識別字:$Programe,_java,$Programe_Java1,Programe2_1等。非法識別字:12Programe,&_java,$ProgrameJava1,%Programe21等。182.1.2保留字abstractbreakbytebooleancatchcasecharclasscontinuedefaultdodoubleelseextendsfalsefinalfloatforfinallyifimportimplementsintinterfaceInstanceoflonglengthnativenewnullpackageprivateprotectedpublicreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidvolatilewhile192.1.3分隔符號(Seprators)有:空格、圓括號、花括弧、分號等。每條語句無論一行還是多行都以分號結束。塊(Block)是包含在{}裏面的多條語句,塊可以嵌套。空白插在代碼的元素中間:由一個或多個空格組成,也可以由一個或多個tab空格組成多個空行。202.1.4注釋(Comments)(1)單行

://…(2)多行

:/*

… */(3)文檔注釋

:/***… */

單行注釋,以換行符為結束。多行注釋,注釋內容較多。使用javadoc工具從源代碼和文檔注釋中將資訊取出,然後轉換為HTML檔。212.2.1數據類型劃分Java數據類型基本數據類型字元型(char)布爾類型(boolean)複合數據類型類(class)介面(interface)數組空類型(null)數值類型整數類型實數類型短整型(short)整型(int)單精確度浮點型(float)雙精度浮點型(double)長整型(long)位元組型(byte)222.2.2常量和變數1.常量有字面(Literal)常量和符號常量兩種。符號常量定義的一般格式如下:<final><數據類型><符號常量識別字>=<常量值>;例如:finaldoublePI=3.141593;finalintCOUNT=1000;

2.變數定義的一般格式如下:<數據類型><變數識別字>=<值>,<變數識別字>=<值>,…;例如:

doublex=1.2345;

其數值意義如同字面所表示的一樣。用Java識別字表示的一個常量。用於標識數據的存儲單元,各種類型的變數創建後都有默認值。232.3.1整型數據2-11.整型常量(1)整型多為十進位數形式,也可為八進制或十六進制形式。(2)Java整型數都為帶符號數。

(3)整型缺省為int型,若為長整型需在數據後加字母l或

L。242.3.1整型數據2-22.整型變數按照長度分為:byte、short、int、long。int類型常用,基本滿足需要,再大的整數long。byte類型範圍很小,-255到+255之間。short類型很少用,限制數據的存儲為先高位元組,後低位元組,在某種及其中會出錯。例如:byteb;shorts;inti;longl;252.3.2實型數據2-11.實型常量(1)用十進位數形式表示,由數字和小數點組成,例如,3.25。(2)用科學計數法形式表示,例如,123E-3。

(3)數後加f或F為float,加d或D為double,沒有尾碼修飾的則缺省為double類型。

262.3.2實型數據2-22.實型變數實型變數按長度分為:float和double。雙精度浮點型double比單精確度浮點型float的精度更高,表示數據的範圍更大。

例如,float;doubled;272.3.3字元型數據2-1字元常量是用單引號括起來的一個字元,如:'J'、'*'。Java中有以反斜杠(\)開頭的字元,反斜杠將其後面的字元轉變為另外的含義,稱為轉義字元。

282.3.3字元型數據2-2

Java中的字元型數據是16位的Unicode字元,漢字和英文字母占的記憶體空間相同。

“JAVA你好”共12個位元組。變數的定義如下:

charch=‘c’;292.3.4字串數據字串常量是使用雙引號括起來的字元序列,注意:最後字元不是‘\0’。例如:"Let’slearnJava!"。字串變數作為對象來處理,通過String和StringBuffer類的構造方法來定義。

Strings=newString();

302.3.5布爾型數據布爾型常量值只有:true和false。布爾型變數為boolean類型,去值為true和false。例如,

booleanb=true;312.3.6類型轉換自動類型轉換:低優先順序的數據自動會轉換為高優先順序的數據。低高byte、short、charintlongfloatdouble強制類型轉換:優先順序高的數據轉換為優先順序低的數據。例如,doubled=3.14159d;inta=(int)d;322.4.1算術運算符包括:+,-,*,/,%,++,--等。首碼++:變數首先進行操作在自身進行加。例如,

inta=2;intb=a++;(a=3,b=2)尾碼++:變數自身首先加然後再進行操作。例如,

inta=2;intb=++a;(a=3,b=3)332.4.2關係運算符完成運算元的比較運算,結果為布爾類型值。包括:==,!=,<,<=,>,>=,instanceof。優先順序低於算術運算符,執行順序自作向右。342.4.3布爾邏輯運算符包括:&,|,!,^,&&,||。注意區別簡潔與&&(或||)和非簡潔與&(或|)例如,inta=6,b=8,c=10,d=12;booleanx=++a>b++&&c++>d--;&&,如果其前面的運算式為假,則不再計算其後面的運算式(a=7,b=9,c=10,d=12,x=false)booleanb=++a>b++&c++>d--;(a=7,b=9,c=10,d=12,x=false)&,不管其前面的運算式為什麼,都計算其後面運算式352.4.4位運算符按位取反〜,〜01010101=10101010。按位與&,11111001&10001111=10001001。按位或|,11111001|10001111=11111111。按位異或^,11111001^10001111=01110110。左移<<,10101011<<2=10101100。右移>>,10101011>>2=11101010。無符號右移>>>,10101011>>>2=00101010。362.4.5賦值運算符包括:=,+=,-=,*=,/=,%=。例如,

inta=b=c=3;372.4.6條件運算符為(?:)一般形式為:運算式1?運算式2:運算式3;例如,

doublesalary=(xintanceofteacher)?2000:200;2.4.7運算符的優先順序如書p35表2-10所示。382.5運算式由運算元和運算符按照一定的語法格式組成運算式。例如,(a+b)*(c-d)。392.6簡單的輸入輸出輸出:使用System.out對象進行輸出。Println():輸出文本並換行。Print():輸出文本不換行。輸入:1、使用System.in對象輸入。try----catch與read或readLine方法。throwsIOException與read或readLine方法。2、使用命令行參數main()方法的args[]。40輸入輸出示例importjava.io.*;classinout{publicstaticvoidmain(Stringargs[])throwsIOException{bytebuf[]=newbyte[50];doublemul=1d;intn=Integer.parseInt(args[0]);for(inti=0;i<n;i++){System.out.print("PleaseinputtheNO."+(i+1)+"data:");

System.in.read(buf);doublenum=Double.parseDouble(newString(buf).trim());mul=mul*num;}

System.out.println("Themultiis:"+mul);}}命令行參數標準輸入System.in對象標準輸出41流程控制選擇-if-else-switch重複(迴圈)-while-do-while-for跳轉-break-continue其他語句-return423.1.1

if語句

if(條件)語句1;else

語句2;if(條件){語句組;

}

else{

語句組;

}publicclassSignFunction{publicstaticvoidmain(Stringargs[]){intintx;intx=0;

if(intx>0)System.out.println(intx+"is+;");

else{

if(intx<0)System.out.println(intx+"is-;");

elseSystem.out.println(intx+"is0;");}}}433.1.2switch語句

switch(運算式){case'常量值1':語句(組);break;case'常量值2':語句(組);break;case'常量值N':語句(組);break;default:語句(組);}運算式必須為byte,short,int或char類型常量值必須是與運算式類型相容,且不能重複,break跳出case語句段若所有的case都不匹配,則可去執行default語句443.2迴圈結構1、while迴圈

while(條件) {語句組;}2、do-while迴圈do{語句組;} while(條件);3、for迴圈

for(變數初始化;條件;遞增或遞減變數的值){語句組;}注意:兩者的區別,1先判斷條件,成立才執行。2先執行在判斷條件。453.3其他語句label:{語句塊}

:用於給程式塊取名字。break:語句在迴圈中用於立即從當前迴圈終止執行,結束當前迴圈的執行。continue:語句則是從其調用處跳至迴圈的開始處,結束本次迴圈,繼續執行下一次迴圈,continue語句之後的語句將不再執行。46綜合實例publicclassBreakDemo{publicstaticvoidmain(Stringargs[]){

for(inti=1;i<100;i+=2){ if(i>10)break; System.out.println("i="+i); }System.out.println("迴圈終止。");}}473.4.1方法的定義與調用2-11、方法定義格式如下:[<修飾符>]<類型><方法名稱>([<參數行>])[throws<異常名稱>]{<方法體> [return(返回值);]}

可為private、public、protected和default

與return語句返回值類型相同。

符合識別字定義規則。

若方法的類型為void,則無return語句。

intmin3(intx,inty,intz){intsmall;//Math.min(x,y)返回x,y中較小數small=Math.min(x,y);

small=Math.min(small,z);return(small);}

483.4.1方法的定義與調用2-22、方法的調用(1)創建方法所在類對象,使用此對象“.”操作符調用。方法有返回值,方法調用當作一個數值來處理,方法無返回值,可由對象直接調用。s.study();(2)使用修飾符static修飾的方法可以使用類名直接調用,若在同一個類中,可直接調用。493.4.2方法調用時的參數傳遞1.方法的參數傳遞2.傳值調用與傳引用調用

503.4.3方法和變數的作用域1.局部變數指定義在語句塊或方法內的變數。2.實例變數和類變數定義在類內、方法外的變數是實例變數或類變數,其中使用修飾符static修飾的變數是靜態變數,也稱為類變數。實例變數和類變數的作用域為類。

513.4.4方法的嵌套和遞歸調用

1.嵌套調用2.遞歸調用

523.4.5方法的重載

方法重載指同一個類中多個方法的名字相同,參數的類型不同、參數的個數不同或參數的排列順序不同的現象。

534.1.1一維數組的定義數組類型數組名[];或數組類型[]數組名;數組類型可為Java中的任何數據類型。數組名,必須符合識別字定義規則。“[]”指明該變數是一個數組類型的變數,可放到數組名後面,也可放到數組名前。

intstudent[];int[]student;544.1.2一維數組的初始化使用new分配記憶體空間,並按照數組的類型,為每一個數組元素建立默任值。

intstudent[];student=newint[10];

intstudent[]=newint[10];554.1.3一維數組的引用引用格式為:數組名[下標]inta[]=newint[10];intb=a[0]+a[9];數組下標為從0到9。如果調用了a[10],程式運行時將提示錯誤:java.lang.ArrayIndexOutOfBoundsException

56一維數組的使用classqiuhe{ publicstaticvoidmain(Stringargs[]){

inta[]={5,8,2,4,1,9,78}; System.out.println("Theminis:"+minnum(a)); }

staticintminnum(intnum[]){ intmin=num[0]; for(inti=0;i<num.length-1;i++){ if(min>num[i]) min=num[i];} returnmin;}}注意:兩者的區別,1先判斷條件,成立才執行。2先執行在判斷條件。574.2.1二維數組的定義定義格式為:數組類型數組名[][];或數組類型[][]數組名;或數組類型[]數組名[];

intarray_name[][];或int[][]array_name;或int[]array_name[];

數組的數組584.2.2二維數組的初始化(1)直接為每一維分配空間,例如:

inta[][]=newint[3][2];

(2)高維開始,分別為每一維分配空間,例如:inta[][]=newint[3][];

a[0]=newint[2];

a[1]=newint[3];

a[2]=newint[4];

(3)數組常量初始化,例如:

inta[][]={{1},{2,3},{4,5,6}};

594.2.3二維數組的引用引用格式為: 數組名[下標2][下標1];下標1,下標2分為二維數組的第一、二維下標,同一維數組一樣,也可為整型常量和運算式,並且數組下標都從0開始。

inta[][]={{1,2,3},{4,5,6},{7,8,9}};System.out.println("數組a各元素的值為:");for(inti=0;i<4;i++){for(intj=0;j<3;j++)System.out.print(a[i][j]+"\t");System.out.println();}604.3數組的常用方法System類中的靜態方法arraycopy()。Arrays類中的方法。排序方法sort(Object[]arrayname)二分查找方法binarySearch(Object[]a,Objectkey)

615.1.1對象對象是具有某些特殊屬性(數據)和行為方式(方法)的實體。

可以是有生命的個體,比如一個人或一只老虎。也可以是無生命的個體,比如一輛汽車或一臺電腦。也可以是一個抽象的概念,如天氣的變化或滑鼠所產生的事件。

兩個特徵:屬性(Property)和行為(Behavior)如:一個人的屬性有:姓名、性別、年齡、身高、體重等行為有:唱歌、打球、騎車、學習等。

625.1.2消息單一對象的存在並沒有多大的作用,只有多個對象相互作用才會完成複雜的行為。對象和對象之間是通過傳遞消息來完成相互通信的。一個消息由三方面內容組成:1)消息的接收者,即消息的目標對象;2)接收對象採用的方法;3)執行方法所需用的參數(Parameters)。

例如:一輛自行車放在車棚中並沒有什麼用,當我們人騎上它,並加速時才體現它的作用,其中接收者(自行車),採用的方法(加速),所需的參數(上升到更高的檔位)。635.1.3類類是具有共同屬性和行為的對象的抽象。類可以定義為數據和方法的集合。對象具有特殊屬性和行為方式的實體。類對象抽象實例化封裝的實體=數據+方法操作或行為屬性或狀態方法數據或變數645.1.4面向對象的基本特徵1.封裝:將數據成員(DataMember)和屬於此數據的操作方法(OperatingMethod),放在同一個實體(Entity)或對象中。2.繼承:父類定義(Define)一些通用的屬性與行為,其孩子繼續使用。3.多態:在同一個類中可有許多同名的方法,但其參數數量與數據類型不同,而且操作過程與返回值也可能會不同。(1)模組化

(2)資訊隱藏

(1)實現代碼複用

(2)簡化設計過程解決其他語言中不能重名的問題

655.2.1類的定義類的定義格式為:[類修飾符]classname{typevariable1;

…typevariableN;

typemethodname1(parameter-list){//方法體}

…typemethodnameN(parameter-list){//方法體}}

成員變數(對象屬性)成員方法(對象行為或操作)665.2.2成員變數作用範圍是整個類。與局部變數不同。可以使用修飾符來控制變數的作用範圍。格式:<修飾符><數據類型><名稱>(=<初值>)修飾符可以為:static:定義類變數,區分實例變數。final:用來聲明常量,值只能用不能改。transient:定義暫時性變數,串行化時不能保存。volatile:定義共用變數,用於多線程共用。675.2.3成員方法

定義方法的一般格式:[access]typemethodname1([parameter-list]){//方法體}publicvoidsetdt(intday,intmonth,intyear){day=23;month=7;year=2003;}方法名稱返回類型修飾符,可選參數列表,可選685.2.4類的對象對象的聲明和創建類名對象名;//聲明對象名=new類名(參數);//創建(2)對象的使用對象名.成員變數名;對象名.成員方法名(參數列表);(3)對象的銷毀自動垃圾回收機制週期性的釋放無用的對象。69類和對象實例publicclassRectangleDemo{doublelength;doublewidth;voidsetL(doublel,doublew){length=l;width=w;}doublearea(){returnlength*width;}publicstaticvoidmain(Stringargs[]){RectangleDemor1;r1=newRectangleDemo();r1.setL(10,20);System.out.println(“area:”+r1.area());}}705.2.5

構造方法構造函數名稱與類名稱相同構造函數沒有返回類型其任務是在創建對象時初始化其內部狀態若無定義系統默認有一個無參構造方法classFruit{booleanseedLess;booleanseasonal;floatprice;

Fruit(booleanseed,booleanseason,floatp){

seedLess=seed; seasonal=season; price=p; }

}715.2.6

修飾符2-1所有類A所有子類C包中類B包中子類E本類Dpublic類、變數、方法Aprotected變數、方法B+Cdefault類、變數、方法Bprivate變數、方法Dprivateprotected變數、方法C725.2.6

修飾符2-2用來說明類、方法或變數的類型。static變數、方法類變數和方法final類、變數、方法常量、終類和方法native方法方法體可用其他語言abstract類、方法抽象類和方法syncronized方法線程互斥735.2.7

靜態初始化在類加載時,做一些起始動作的程式塊。格式:

static{

程式塊;}classStaticDemo{booleansex;Stringname;Stringtype;

static{type=“學生”;}floatscore;}745.2.8

內部類1.靜態成員類2.成員類3.局部類4.匿名類755.2.9

類的使用1.類對象作為類的成員2.類對象作為方法的參數3.方法返回值為類對象765.3.1

類繼承的實現2-1被繼承的類稱為父類繼承父類的類稱為子類執行繼承時,子類將獲得父類的屬性,並具有自身特有的屬性。

Emoloyee類:namesexWorker類:categorydressAllowanceOfficer類:empClassvehicle工人類,繼承了父類的姓名和性別屬性外還包含類別和是否有服裝津貼屬性主任類,還包含級別和是否配備交通工具屬性職員類,具有姓名和性別兩個屬性775.3.1

類繼承的實現2-2extends關鍵字用於繼承類。聲明一個繼承父類的類的通常形式如下:classsubclass-nameextendssuperclass-name{//類體}

沒有extends,默認父類為Object只能有一個父類,即單繼承子類繼承父類的全部成員注意785.3.2this和super關鍵字1.this的使用(1)訪問當前對象的數據成員(2)訪問當前對象的成員變數(3)重載時用來引用同類的其他構造方法2.super的使用(1)訪問直接基類中被隱藏的數據成員(2)調用直接基類中被重寫的成員方法(3)調用直接基類的構造方法795.3.3

抽象類和抽象方法定義目的是提供可由其子類共用的一般形式。抽象類不能實例化。抽象方法沒有函數體。抽象方法必須在子類中給出具體實現。抽象類中可以沒有抽象方法,有抽象方法的類一定是抽象類。抽象類必須繼承,子類根據自身需要擴展抽象類。abstract不能和final疊用修飾類。不能有private成員變數和方法。不能和private、static、final疊用修飾方法。805.3.4

類對象之間的類型轉換子類對象和基類對象之間的轉換:(1)子類對象可以隱式,也可以轉換為基類對象(2)處於相同類層次的類對象之間不能進行轉換(3)子類對象在一定的條件下可以轉換成基類對象,但必須使用強制類型轉換。815.4.1

方法重載方法重載是Java實現面向對象的多態性機制的一種方式。同一個類中多個方法有相同的名字,不同的參數列表,這種情況稱為方法重載。返回類型不同並不足以構成方法重載。當重載方法被調用時,編譯器根據參數的類型和數量來確定實際調用哪個重載方法的版本。825.4.2

方法重寫方法重寫是Java實現多態性機制的另一種方式。在類層次結構中,如果子類中的一個方法與父類中的方法有相同的方法名並具有相同數量和類型的參數列表,這種情況稱為方法重寫。重寫方法通過父類引用被調用,Java根據當前被引用對象的類型來決定執行哪個版本的方法。可通過super關鍵字調用直屬父類中被重寫的方法。子類定義與父類同名的變數,使父類變數隱藏,但仍有自己的空間,在子類中可調用。子類重寫父類方法,會清除父類空間,在子類中不存在。835.5.1

介面的定義[修飾符]interface介面名稱{[public][static][final]變數名=初值;//靜態常量[public][abstract][native]返回值方法名([參數表])throws[異常列表]//方法}由於介面中定義的方法都是抽象、公有的,常量都是靜態、公有的,所以修飾符可以省略。說明:(1)通常介面的名字以able或ible結尾;(2)可以使用extends來繼承介面的常量和抽象方法,但它與類中的extends不同,它可以有多個父介面,各父介面間用逗號隔開;(3)介面中的所有常量必須是publicstaticfinal,方法必須是publicabstract,這是系統默認的,不管你在定義介面時,寫不寫修飾符都是一樣的。(4)native要甚用。845.5.2

介面的實現在類的聲明中使用implements關鍵字來實現介面,一個類可以同時實現多個介面,各介面間用“,”隔開。classclassnameimplementsinterfacename{//重寫介面中的方法;}說明:(1)若實現介面的類不是抽象類,則必須實現所有介面的所有方法,即為所有的抽象方法定義方法體。(2)一個類在實現某介面抽象方法時,必須使用完全相同的方法名,參數列表。(3)介面的抽象方法的訪問控制符已指定為public,所以類在實現時,必須顯示的使用public修飾符,否則被警告縮小了介面中定義的方法的訪問控制範圍。85實例:介面的定義和實現interfaceA{doubleg=9.8;voidshow();}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}865.5.3

介面的繼承interfaceA{intsub(inta,intb);}interfaceBextendsA{intadd(inta,intb);}interfaceCextendsB{intmul(inta,intb);}組合:interfaceA{intsub(inta,intb);}interfaceB{intadd(inta,intb);}interfaceCextendsA,B{intmul(inta,intb);}875.5.4

介面的多態interfaceviecle{abstractbooleanstart();}classCarimplementsviecle{booleanstart(){//發動引擎}}classShipimplementsviecle{booleanstart(){//拋錨}}885.6.1

包的創建(1)缺省情況下為無名包(2)有名包的創建:使用package語句 如:packagepname

或packagedir1.dir2.pname包就是一個檔夾,裏面存放.class檔,包中的“.”號表示子檔夾。895.6.2

包的引用(1)使用包名、類名首碼 例如:mypack1.mypack2.Myclass(2)加載引用:使用import語句 格式:importmypack1.mypack2.Myclass

或importmypack.mypack2.*(3)直接引用:在同一檔夾下905.6.3

設置CLASSPATH環境變數CLASSPATH變數指明“.class”檔存放的位置。編譯時:javac–d

CLASSPATH路徑

Myclass.java例如:javac–dd:\javamyclass.java則直接在d:\java下創建在myclass.java指明的包目錄,並把Myclass.class拷到該目錄下。915.5.7Java類庫Java中常用的包有:applet、awt、io、lang、net、util926.1字串字串是字元的序列,它是組織字元的基本數據結構,從某種程度上來說有些類似於字元的數組。在Java中,字串被當作對象來處理。程式中需要用到的字串可以分為兩大類,一類是創建之後不會再做修改和變動的字串常量String類;另一類是創建之後允許再做更改和變化的字串變數StringBuffer類。936.1.1字串常量使用“”定義字串,使用‘’定義字元。“abc”,”歡迎使用Java”都是字串。‘a’,’b’,’c’都是字元。Java會自動為字串常量生成一個String類的對象,所以可以直接初始化String對象,如:Strings=“Helloworld!”946.2.1String類字串創建String的一個對象並進行初始化,需要調用類String的構造方法,主要有以下創造方法:①String():創建一個空串②String(Stringvalue)③String(charvalue[])④String(char[],intstartIndex,intnumChars)⑤String(byte[],bytehibyte)⑥String(byte[],bytehibyte,intstartIdnex,intnumChars)956.2.2String類的基本操作4-1(1)publicintlength():返回字串長度(注意漢字)(2)字串比較:

publicintcompareTo(StringanotherString) publicbooleanequals(ObjectanObject) publicbooleanequalsIgnore(StringanotherString)publicbooleanstartsWith(Stringprefix) publicbooleanendsWith(Stringsuffix)

booleanregionMatches(inttoffset,Stringother,intooffset,intlen)booleanregionMatches(booleanignoreCase,inttoffset,Stringother,intooffset,intlen)966.2.2String類的基本操作4-2(3)字串的檢索和子串publiccharcharAt(intindex)publicvoidgetChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)publicintindexOf(intch)和

publicintlastIndexOf(intch)publicintindexOf(intch,intfromIndex)publicintlastIndexOf(intch,intfromIndex)publicintindexOf(Stringstr)publicintlastIndexOf(Stringstr)publicintindexOf(Stringstr,intfromIndex)publicintlastIndexOf(Stringstr,intfromIndex)publicStringsubstring(intbeginIndex)publicStringsubstring(intbeginIndex,intendIndex)976.2.2String類的基本操作4-3(4)字串的修改

publicStringtoLowerCase()

publicStringtoUpperCase()

publicStringreplace(charoldChar,charnewChar)publicStringreplaceFirst(Stringrx,Stringreplacement)publicStringreplaceAll(Stringrx,Stringreplacement)

Stringtrim()publicStringconcat(Stringstr)

986.2.2String類的基本操作4-4(5)字串類與其他類型的轉換

staticStringvalueOf(chardata[])staticStringvalueOf(chardata[],intoffset,intcount)staticStringvalueOf(booleanb)staticStringvalueOf(charc)staticStringvalueOf(inti)

staticStringvalueOf(longl)staticStringvalueOf(floatf)staticStringvalueOf(doubled)

toString()996.3.1StringBuffer類的定義StringBuffer()StringBuffer(intlen)StringBuffer(Stringstr)1006.3.2StringBuffer的基本操作2-1(1)分配/獲取字串的長度voidsetLength(intnewLength)

intlength()(2)分配/獲取字串的容量voidensureCapacity(intminCapacity)intcapacity()(3)字串的檢索和子串voidgetChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)Stringsubstring(intbeginindex)和Stringsubstring(intbeginindex,intendindex)1016.3.2StringBuffer的基本操作2-2(4)字串的修改StringBuffer

append()StringBuffer

insert()StringBuffer

delete(intstarts,intend)StringBuffer

deleteCharAt(intindex)StringBuffer

reverse()StringBuffer

replace(intstarts,intend,Stringstr)

voidsetCharAt(intindex,charc)(5)字串類型轉換

toString()append(booleanb),append(inti),append(longl),append(floatf)append(doubled)insert(intindex,inti)insert(intindex,longl),insert(intindex,floatf)insert(intindex,doubled)1026.4main()方法的參數與其他方法傳遞參數的方式不一樣,main方法的參數是在運行程式時通過命令行來輸入的,並保存到一個字串args數組中去。在命令行運行的一般形式:

java類檔案名字串1字串2…字串n

javaGreetingHowdoyoudo?javaGreeting“Howdoyoudo?”1037.1.1異常基本概念運行時發生的錯誤稱為異常。處理這些異常就稱為異常處理。發生異常後此前分配的所有資源都將保留在相同的狀態,這將導致資源漏洞。PublicclassExceptionDemo1{publicstaticvoidmain(Stringargs[]){inta=0;System.out.println(8/a);}}1047.1.2異常處理機制異常處理機制執行過程:出現異常事件時,Java系統自動產生一個異常對象,然後將這個對象傳遞給Java運行時系統,這個例外產生和提交的過程稱為拋棄例外(throw);當Java運行時系統得到例外對象以後,它將會尋找處理這一例外的代碼,找到能處理這一例外的方法以後,運行時系統把當前例外對象交給這個方法進行處理,這一過程稱為捕獲(catch)。1057.2Throwable類7.2.1異常類的層次和主要子類Java異常指的是一個繼承Throwable類的實例,它有兩個子類:Exception和Error。它們均被放在java.lang包中。7.2.2異常類的方法和屬性祥見p130。1067.3異常處理(1)由系統自動處理。(2)使用try~catch~finally語句。(3)使用throw語句直接拋出異常或使用throws語句間接拋出異常。1077.3.1try~catch~finally語句語法結構:

try { 可能產生異常的代碼段; }

catch(異常類名1對象名1) { 處理語句組1; }

catch(異常類名2對象名2) { 處理語句組2; } ……

finally {

最終處理語句;

}1087.3.2throw語句和throws子句(1)throw語句用來明確地拋出一個異常,

throw異常;然後在包含它的所有try塊中從內向外尋找與其匹配的catch語句塊。(2)throws語句如果一個方法可能導致異常但不處理它,此時可在方法聲明中包含throws

子句,發生了異常,由調用者處理。throws列舉方法可能引發的所有異常。這對於除Error或RuntimeException及它們子類以外類型的所有異常是必要的。<方法名>(<參數行>)[throws<異常類1>,<異常類2>…]{if(異常條件1成立)

throwsnew異常類1();

if(異常條件2成立)

throwsnew異常類2();

…}1097.3.3創建自己的異常內置異常不可能始終足以捕獲所有錯誤,因此需要用戶自定義的異常類用戶自定義的異常類應為

Exception類(或者Exception類的子類)的子類創建的任何用戶自定義的異常類都可以獲得

Throwable類定義的方法classArraySizeExceptionextendsNegativeArraySizeException{ArraySizeException(){super(“您傳遞的是非法的數組大小”);}}該類是Exception的子類1108.1.1輸入/輸出流的概念數據流:是指在電腦的輸入輸出之間運動的數據序列。輸入輸出是相對程式來說的,程式扮演兩個角色:源和目的。輸入流:代表從外設流入程式的數據序列;輸出流:代表從程式流向外設的數據序列。位元組流:在輸入輸出過程中以位元組為單位。字元流:在輸入輸出過程中以字元為單位。1118.1.2輸入輸出類層次1128.1.3標準輸入輸出1.標準輸入

publicstaticfinalInputStreamin

使用read()和skip(longn)方法讀取。2.標準輸出

publicstaticfinalPrintStreamout

使用print()和println()來輸出。3.標準錯誤輸出

publicstaticfinalPrintStreamerr1138.2.1檔輸入輸出位元組流(1)創建FileInputStream類對象;(2)讀取檔資訊;(3)創建FileOutputStream類對象;(4)向輸出流寫信息:voidwrite(intb);voidwrite(byteb[]);voidwrite(byteb[],intoff,intlen);(5)關閉FileInputStream流。1148.2.2過濾流1、DataInputStream,DataOutputStream1>使用數據流方法:(1)用前面的方法建立位元組檔流對象;(2)基於位元組檔流對象建立數據檔流對象;(3)用此對象方法對基本類型的數據進行輸入/輸出。

2>創建數據流的構造方法。2、BufferedInputStream,BufferedOutputStream(1)創建流對象BufferedOutputStream;(2)用flush()方法更新流;(3)創建BufferedInputStream對象;(4)緩衝流類的應用。3、PrintStream類1158.3.1輸入輸出字元流常用的是InputStreamReader和OutputStreamWriter1.其構造方法:

InputStreamReader(InputStreamin);InputStreamReader(InputStreamin,Stringenc);OutputStreamWriter(OutputStreamout);OutputStreamWriter(OutputStreamout,Stringenc);2.讀寫方法3.其他方法StringgetEncoding()publicvoidcolse()

1168.3.2檔輸入輸出字元流

FileReader和FileWriter是InputStreamReader和OutputStreamWriter的子類。構造方法各有兩種。FileReader(Filef)FileReader(Stringfn)FileWriter(Filef)FileWriter(Stringfn)常用方法:read();read(char[]buffer);write(Stringstr);write(char[]buffer);1178.3.3緩衝字元流

BufferedReader和BufferedWriter構造方法:BufferedReader(Readerin)BufferedReader(Readerin,intsize)BufferedWriter(Writerout)BufferedWriter(Writerout,intsize)常用方法:readLine();newLine();1188.3.4列印輸出字元流

PrintWriter提供字元流的輸出處理。PrintWriter(OutputStreamout)PrintWriter(OutputStreamout,Booleanautoflush)PrintWriter(Writerout)PrintWriter(Writerout,Booleanautoflush)1198.4.1檔描述在java.io包中的File類提供了平臺無關的方式來描述目錄和文件對象的屬性。提供了很多的方法用來獲取路徑、目錄和文件的相關資訊。目錄管理檔管理1.檔的生成2.檔案名的處理3.檔屬性測試4.檔資訊處理1208.4.2檔的順序訪問

1、引入“java.io”包,importjava.io.*;2、根據數據源和輸入輸出的任務建立位元組或字元流。3、若需要對位元組或字元資訊組織加工位數據在已建位元組或字元流對象上建立數據流或緩衝流。4、用輸入輸出流對象的成員方法進行讀/寫操作,需要時可設置指針位置。5、關閉流對象。2-5要考慮異常處理。1218.4.3檔的隨機訪問

使用下列構造方法創建流:RandomAccessFile(Stringname,Stringmode);RandomAccessFile(Filename,Stringmode);mode的取值為”r”或”rw”1228.5.1串行化的概念和目的

對象能記錄自己狀態以便將來再恢復的能力。目的:(1)支持Java的對象持續性。(2)支持對象的遠程調用。(3)嚴格遵守Java的對象模型,對象的串行化狀態中應存有所有的關於種類的安全特性的資訊。(4)允許對象定義自身的格式。(5)儘量保持對象串行化的簡單扼要,但可以進行擴展和定制。1238.5.2串行化方法

1.定義一個可串行化的對象使此對象所屬的類實現Serializable介面。2.輸出數據進行保存使用輸入輸出流讀取和保存對象的基本數據。1248.5.3串行化注意事項

1.串行化能保存的對象2.transient關鍵字3.安全問題1258.6其他常用流1、管道流PipedInputStream和PipedOutputStream用於在不同的線程間直接傳送數據。2、記憶體的訪問ByteArrayInputStream和ByteArrayOutputStream為提高安全而禁止任何程式直接對內存進行操作。3、順序流SequenceInputStream和SequenceOutputStream同一若干不同的流。1269.1.1多線程的概念程式:靜態的電腦高級語言編寫的代碼。進程:程式的一次執行。線程:程式中的部分代碼的一次執行過程。多進程:操作系統中多個程式同時執行。多線程:程式中多個片斷同時執行。1279.1.2Java中的多線程Thread類是java.lang包中的一個專門用來創建線程和對線程進行操作的類。這些方法分為:構造方法。run()方法。改變線程狀態的方法。操作線程屬性的方法。1289.1.3線程的狀態和生命週期新建:新建的線程處於新建狀態就緒:在創建線程後,它將處於就緒狀態,等待start()方法被調用執行:線程在開始執行時進入運行狀態阻塞:線上程等待一個事件時(例如輸入/輸出操作),就稱其處於阻塞狀態。死亡:在run()方法已完成執行或其stop()方法被調用之後,線程就處於死亡狀態。新建狀態就緒狀態阻塞狀態運行狀態死亡狀態1299.1.4線程的調度和優先順序Java中的線程優先順序是在Thread類中定義的常量NORM_PRIORITY:值為5MAX_PRIORITY:值為10MIN_PRIORITY:值為1缺省優先級為

NORM_PRIO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论