版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java面向?qū)ο蟪绦蛟O(shè)計(jì)2024/2/232教材和參考書教材Y.Daniel
Liang(李娜譯),Java語(yǔ)言程序設(shè)計(jì)(第8版)(基礎(chǔ)篇/進(jìn)階篇),機(jī)械工業(yè)出版社,2011.參考書1、WalterSavitch,Java
程序設(shè)計(jì)與問(wèn)題解決(第4版,英文),人民郵電出版社,2006.2、朱仲杰,Java2全方位學(xué)習(xí),機(jī)械工業(yè)出版社,2006.3、張大治,精通Eclipse,清華大學(xué)出版社,2006.2024/2/233一、Java編程基礎(chǔ)1.Java基本數(shù)據(jù)類型TypeNameKindofvalueMemoryUsedSizeRangebyteinteger1byte-128to127shortinteger2bytes-32768to32767intinteger4bytes-2147483648to2147483647longinteger8bytes-9223372036854775808to…07floatfloating-point4bytes+/-3.40282347e+38to+/-1.40239846e-45doublefloating-point8bytes+/-1.76769313486231570e+308to+/-4.94065645841246544e-324charcharacter(Unicode)2bytesallUnicodecharactersbooleantrueoffalse1bitnotapplicable2024/2/234一、Java編程基礎(chǔ)2.常量(1)匿名常量intx=1;floaty=1.0;charz=‘A’;booleanflag=true;(2)命名常量finaldoublepi=3.14159;2024/2/235一、Java編程基礎(chǔ)3.控制臺(tái)輸入Scannerinput=newScanner(System.in);doublex=input.nextDouble();inty=input.nextInt();Scanner的方法nextByte() nextShort(),nextInt(),nextLong()nextFloat(),nextDouble()next() //讀取一個(gè)字nextLine() //讀取一行文本2024/2/2361.1.4ConsoleI/O3.控制臺(tái)輸入importjava.util.*;publicclassScannerDemo{ publicstaticvoidmain(String[]args){
intn1,n2; ScannerscannerObject=newScanner(System.in);
System.out.println(“Entertwowholenumbers:”);n1=scannerObject.nextInt(); n2=scannerObject.nextInt();//scannerObject.next()readsoneword//scannerObject.nextLine()readsanentireline.
System.out.println(“Youentered“+n1+“and“+n2); }}2024/2/237一、Java編程基礎(chǔ)4.控制臺(tái)輸出System.out.println(“abc”);System.out.print(“abc”);System.out.print(“abc\n”);2024/2/238一、Java編程基礎(chǔ)5.賦值語(yǔ)句
charsymbol; symbol=‘A’; charch=‘B’;
intm; m=4;
intn=5; doublex=4.5;
booleanmale=true;2024/2/239一、Java編程基礎(chǔ)6.類型轉(zhuǎn)換(1)強(qiáng)制類型轉(zhuǎn)換doubledistance=9.0;intpoints=(int)distance;charch=‘7’;inta=(int)ch; //variableahasvalue55.(2)隱含類型轉(zhuǎn)換byteshortintlongfloatdoubledoublex=7;2024/2/2310一、Java編程基礎(chǔ)7.優(yōu)先規(guī)則HighestPrecedence(1)theunaryoperators:+,-,++,--,and!(2)thebinaryarithmeticoperators:*,/,and%(3)thebinaryarithmeticoperators:+and–LowestPrecedence
2024/2/2311一、Java編程基礎(chǔ)8.類和對(duì)象Datamembers(數(shù)據(jù)成員)InstanceVariablesClassVariablesMethods(方法)InstanceMethodsClassMethodsObjects(對(duì)象)TheInstanceofaClass2024/2/2312一、Java編程基礎(chǔ)8.類和對(duì)象(static)2024/2/2313一、Java編程基礎(chǔ)8.類和對(duì)象(static)2024/2/2314一、Java編程基礎(chǔ)8.類和對(duì)象(1)staticstatic修飾的變量(方法)稱為類變量(方法);沒(méi)有static修飾的變量(方法)稱為實(shí)例變量(方法);類變量不屬于任何一個(gè)特定的實(shí)例,在創(chuàng)建實(shí)例之前就已經(jīng)存在,實(shí)例變量屬于特定的實(shí)例,創(chuàng)建實(shí)例之前實(shí)例變量不存在;類方法是不依賴于實(shí)例數(shù)據(jù)的方法,因此它不能對(duì)實(shí)例數(shù)據(jù)進(jìn)行操作,也不能調(diào)用實(shí)例方法(因?yàn)閷?shí)例方法有可能間接操作實(shí)例數(shù)據(jù));實(shí)例方法可以操作類變量,也可以調(diào)用類方法;2024/2/2315一、Java編程基礎(chǔ)8.類和對(duì)象(2)封裝將數(shù)據(jù)(方法)設(shè)為私有,防止客戶代碼直接操作該數(shù)據(jù)(方法),便于程序的升級(jí);將數(shù)據(jù)和對(duì)數(shù)據(jù)進(jìn)行操作的方法置于同一模塊中,防止方法對(duì)數(shù)據(jù)進(jìn)行誤操作,一個(gè)實(shí)例的方法只能對(duì)該實(shí)例以及該實(shí)例所屬類的數(shù)據(jù)進(jìn)行操作,一個(gè)類的方法只能對(duì)該類的數(shù)據(jù)進(jìn)行操作;減少命名沖突2024/2/2316一、Java編程基礎(chǔ)9.JavaAPI(應(yīng)用編程接口)PackagesandimportStatementThejava.lang.StringClassThejava.util.StringTokenizerClassTheWrapperClasses2024/2/2317一、Java編程基礎(chǔ)(1)PackagesandimportStatementTheclassesintheJavaAPIaregroupedintopackages.Apackageissimplyacollectionofrelatedclasses.
java.util.GregorianCalendar
firstDate=new java.util.GregorianCalendar(2004,1,1);
java.util.GregorianCalendar
lastDate=new java.util.GregorianCalendar(2004,12,31);
importjava.util.GregorianCalendar; //importjava.util.*;
GregorianCalendar
firstDate= newGregorianCalendar(2004,1,1);
2024/2/2318一、Java編程基礎(chǔ)(2)Thejava.lang.StringClassThefollowingisalistofsomeofthemethodsdefinedinclassString:String().String(char[]value
String(Stringoriginal)intlength()charcharAt(intindex)boolean
equals(Object
anObject)int
indexOf(int
ch)
int
indexOf(String
str)boolean
startsWith(Stringprefix).Stringsubstring(int
beginIndex,int
endIndex)
2024/2/2319一、Java編程基礎(chǔ)(2)Thejava.lang.StringClassJavastringconcatenationoperator(+)."one"+"two""onetwo”"hello"+anyObject.toString()"hello"+anyObject"hello"+5System.out.println(2+3+"5"); //prints55System.out.println(2+""+3+"5"); //prints2352024/2/2320一、Java編程基礎(chǔ)(2)Thejava.lang.StringClass
publicclassStringDemo{publicstaticvoidmain(String[]args){Stringsentence=“TextProcessingishard!”;
intposition=sentence.indexOf(“hard”);
System.out.println(sentence);
System.out.println(“Theword\”hard\”startsatindex +position); sentence=sentence.substring(0,position)+“easy!”;
System.out.println(“Thechangedstringis:”);
System.out.println(sentence); }}2024/2/2321一、Java編程基礎(chǔ)(3)Thejava.util.StringTokenizerClassTheStringTokenizerclassispartofthepackage
java.util.ThefollowingisalistofsomeofthemethodsintheclassStringTokenizer:StringTokenizer(String
str)
StringTokenizer(String
str,Stringdelim)boolean
hasMoreTokens()StringnextToken(String
delim)
int
countTokens()2024/2/2322一、Java編程基礎(chǔ)(3)Thejava.util.StringTokenizerClass
//ProductInfo.javaimportjava.util.*;publicclassProductInfo{ publicstaticvoidmain(String[]args){ Stringdata="MiniDiscs74Minute(10-Pack)_5_9.00";
StringTokenizer
tknzr=newStringTokenizer(data,"_"); Stringname= tknzr.nextToken(); Stringquantity=tknzr.nextToken(); Stringprice=tknzr.nextToken();
System.out.println("Name:"+name);
System.out.println("Quantity:"+quantity);
System.out.println("Price:"+price); }}2024/2/2323一、Java編程基礎(chǔ)(4)TheWrapperClasses(1)java.lang.Byte(2)java.lang.Short(3)java.lang.Integer(4)java.lang.Long(5)java.lang.Character(6)java.lang.Float(7)java.lang.Double(8)java.lang.Boolean2024/2/2324一、Java編程基礎(chǔ)TheWrapperClasses2024/2/2325一、Java編程基礎(chǔ)TheWrapperClasses2024/2/2326二、方法1.參數(shù)傳遞(1)基本數(shù)據(jù)類型傳遞數(shù)值(2)對(duì)象類型傳遞引用r9.09.0radiusabcstrarg02024/2/2327二、方法2.方法重載方法重載是多態(tài)的表現(xiàn)形式之一,方法重載用同名操作完成不同的運(yùn)算邏輯,操作接口的一致性減輕了用戶學(xué)習(xí)和使用的負(fù)擔(dān),比如doubleadd(doublea,doubleb)int
add(inta,intb)2024/2/2328三、數(shù)組1.數(shù)組的聲明、創(chuàng)建和初始化(1)聲明數(shù)組double[]values;(2)聲明和創(chuàng)建數(shù)組double[]values=newdouble[10];數(shù)組一旦創(chuàng)建,系統(tǒng)給數(shù)組元素賦缺省值,數(shù)值型和字符型賦值為0,布爾型賦值為false,對(duì)象類型賦值為null(3)聲明、創(chuàng)建和初始化數(shù)組int[]
ages={21,19,35,27,55};String[]names={"Bob","Achebe",null};2024/2/2329三、數(shù)組2.數(shù)組的length變量數(shù)組為對(duì)象類型,任何數(shù)組都有一個(gè)length變量表示數(shù)組中元素的個(gè)數(shù)int[]values={3,6,9,8,10,78};inttotal=0;for(intk=0;k<values.length;k++){total+=values[k];}2024/2/2330三、數(shù)組3.foreach循環(huán)foreach循環(huán)寫出的代碼可讀性更強(qiáng)int[]values={3,6,9,8,10,78};inttotal=0;for(intk:values){total+=k;}2024/2/2331三、數(shù)組4.數(shù)組作為參數(shù)傳遞(1)失敗的數(shù)據(jù)交換swap(inta,intb){
intt=a;a=b;b=t;}intx=5;inty=6;swap(x,y);5665xyabt2024/2/2332三、數(shù)組4.數(shù)組作為參數(shù)傳遞(2)成功的數(shù)據(jù)交換swap(int[]a){
intt=a[0];a[0]=a[1];a[1]=t;}int[]b={5,6};swap(b)56bat2024/2/2333三、數(shù)組5.Java與C++參數(shù)傳遞比較(1)基本數(shù)據(jù)類型參數(shù)傳遞值傳遞(Java,C++)voidswap(intx,inty){
intt=x;x=y;y=t;}傳遞引用(C++)voidswap(int&x,int&y){…}引用變量為實(shí)際變量的別名56abtxy2024/2/2334三、數(shù)組5.Java與C++參數(shù)傳遞比較(1)基本數(shù)據(jù)類型參數(shù)傳遞傳遞指針(C++)voidswap(int*px,int*py){
intt=px[0];px[0]=py[0];py[0]=t;}
inta=5;
intb=6;
swap(&a,&b);56abtpypx2024/2/2335三、數(shù)組5.Java與C++參數(shù)傳遞比較(2)對(duì)象類型參數(shù)傳遞值傳遞(C++)Java語(yǔ)言的對(duì)象之所以不能傳遞對(duì)象的值是因?yàn)镴ava語(yǔ)言沒(méi)有拷貝構(gòu)造函數(shù)。傳遞引用(Java,C++)Java的引用完全區(qū)別于C++的引用,Java的引用本質(zhì)上等同于C++的指針,C++的引用變量是另外一個(gè)變量的別名(引用變量與它引用的變量標(biāo)識(shí)同一段存儲(chǔ)單元)。傳遞指針(C++)Java語(yǔ)言沒(méi)有指針語(yǔ)法,其引用變量起到了指針的作用。2024/2/2336三、數(shù)組5.java.util.Arrays類sort,binarySearch,equals和fill方法
intvalues={5,23,8,19};
intlist1={5,23,8,19};
intlist2={5,23,19,8};
java.util.Arrays.sort(values);
java.util.Arrays.sort(values,1,3);
java.util.Arrays.binarySearch(values,9);
java.util.Arrays.fill(values,10);
java.util.Arrays.fill(values,1,3,20);java.util.Arrays.equals(list1,list2);//equals(values,list1);2024/2/2337三、數(shù)組6.多維數(shù)組創(chuàng)建多維數(shù)組的兩種方式
int[][]values={{1,2,3},{3,5},{5,8,10}};
int[][]values=newint[3][];values[0]=newint[3];values[1]=newint[4];values[2]=newint[2];2024/2/2338四、對(duì)象和類1.時(shí)間和日期(1)時(shí)間(1970.01.01.00)(見p30)System.currentTimesMillis()(2)日期(Date類)Date()Date(long
elapseTime)toString()getTime()setTime(long
elapseTime)2024/2/2339四、對(duì)象和類2.類變量和實(shí)例變量3.類方法和實(shí)例方法4.訪問(wèn)控制(可見性)public(package)protectedprivate5.數(shù)據(jù)封裝賦值(set)方法和讀取(get)方法2024/2/2340五、字符串和文本IO1.String類格式化字符串doublex=3.14159;Stringstr=String.format(“%5.2f”,x);2.Character類Character類是char的包裝類,用于字符的比較和字母的大小寫變換。2024/2/2341五、字符串和文本IO3.StringBuilder/StringBuffer類String類實(shí)例中存放的數(shù)據(jù)不能更改,要對(duì)字符串中的數(shù)據(jù)進(jìn)行修改,就必須使用StringBuilder類或StringBuffer類。這兩個(gè)類的方法基本相似,區(qū)別在于StringBuffer可用于并發(fā)訪問(wèn)。StringBuilder類的主要方法
appenddeleteinsertreplace2024/2/2342五、字符串和文本IO4.String和StringBuilder比較2024/2/2343五、字符串和文本IO5.File類File類的主要方法
File(String
pathName) //目錄是一個(gè)特殊的文件
File(Stringparent,Stringchild)exists()
canRead()
canWrite()
isDirectory()
isFile()
getName()
getPath()2024/2/2344五、字符串和文本IO6.文件輸出
java.io.PrintWriter
PrintWriter(Filefile)
PrintWriter(String
fileName)
print(Stringstring)//println
print(char
ch)//println
print(intx) //short,long,doublefloat…close()2024/2/2345五、字符串和文本IO6.文件輸出
java.io.PrintWriter
importjava.io.*publicclassWriteData{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(“test.txt”);
if(file.exists()){
System.out.println(“test.txtalreadyexists”);System.exit(0);}
PrintWriteroutput=newPrintWriter(file);
output.print(“abcdefgh”);
output.close();}}2024/2/2346五、字符串和文本IO7.文件輸入
java.util.Scanner
Scanner(Filefile)
Scanner(String
fileName)
hasNext()
nextLine()
nextInt() //long,short,double…close()next() //getnextword
useDelimiter(Stringpattern)2024/2/2347五、字符串和文本IO7.文件輸入
java.util.Scanner
importjava.io.*;importjava.util.*;publicclassReadData{publicstaticvoidmain(String[]args)throwsException{Filefile=newFile(“test.txt”);Scannerinput=newScanner(file);
while(input.hasNext()){Stringword=next(); //System.out.println()Stringline=nextLine(); //}
input.close();}}2024/2/2348五、字符串和文本IO8.文件對(duì)話框
javax.swing.JFileChooser類
importjava.util.Scanner;importjavax.swing.JFileChooser;importjava.io.*;publicclassReadFile{publicstaticvoidmain(String[]args)throwsException{
JFileChooserchooser=newJFileChooser();if(chooser.showOpenDialog(null)==
JFileChooser.APPROVE_OPTION){Scannerinput=newScanner(chooser.getSelectedFile());
input.close();}}}2024/2/2349六、繼承1.抽象面向?qū)ο缶幊痰囊粋€(gè)重要目標(biāo)是提高代碼的重用率(以盡可能低的成本獲得更多的回報(bào))2024/2/2350六、繼承1.抽象(1)抽象可以有效地提高代碼的重用率(2)派生可以適應(yīng)用戶需求的變化(3)父類(基類,超類),子類(派生類,擴(kuò)展類),Object類2024/2/2351六、繼承2.extends和super關(guān)鍵字
publicclassPerson{privateStringname;privateStringaddress;publicPerson(Stringname,Stringaddress){
this.name=name;
this.address=address;}publicStringgetName(){returnname;}publicStringgetAddress(){returnaddress;}publicStringtoString(){returnname+“_”+address;}}2024/2/2352六、繼承2.extends和super關(guān)鍵字
publicclassStudentextendsPerson{privatedouble[]score;publicStudent(Stringname,Stringaddress){
super(name,address);//firststatement,superscore=newdouble[40];
for(intk=0;k<40;k++){
score[k]=-1.0;}}2024/2/23532.extends和super關(guān)鍵字
publicdoublegetScore(intindex){
if(index>=0&&index<40){returnscore[index];}return-1.0;}publicvoidsetScore(intindex,doublescore){
if(index>=0&&index<40){
score[index]=score;}}六、繼承2024/2/2354六、繼承publicdoublegetAverageScore(){doubletotal=0.0;
intcount=0;
for(intk=0;k<40;k++){
if(score[k]>-1.0){total+=score[k];count++;}}
if(count>0){returntotal/count;}return-1;}2024/2/2355六、繼承publicStringtoString(){Stringstr=super.toString();//super
for(intk=0;k<40;k++){
str=str+“_”+score[k];}returnstr;}}2024/2/2356六、繼承3.方法覆蓋在Object類中定義了equals和toString方法,程序員可以在自己定義的類中覆蓋這兩個(gè)方法。在以下代碼中,toString()調(diào)用是對(duì)象實(shí)際所屬類型的方法。
publicclassTest{publicstaticvoidmain(String[]args){Studentstudent=newStudent(“cxg”,“abc”);student.setScore(1,90.0);student.setScore(2,85.0);
System.out.println(student.toString());}}2024/2/2357六、繼承4.protected關(guān)鍵字類可見性和成員可見性關(guān)系如下表publicclass(package)classpublicmember對(duì)任意子類和客戶都可見對(duì)同一包中的子類和客戶可見protectedmember對(duì)任意子類可見,對(duì)同一包中的客戶可見對(duì)同一包中的子類和客戶可見packagemember對(duì)同一包中的子類和客戶可見對(duì)同一包中的客戶可見privatemember對(duì)子類和客戶不可見對(duì)子類和客戶不可見2024/2/2358六、繼承5.final類和final方法一個(gè)類如果被申明為final類,那么該類不能作為其它類的父類。一個(gè)方法如果被申明為final方法,那么該方法在子類中不能被覆蓋。2024/2/2359七、多態(tài)1.多態(tài)的表現(xiàn)形式(1)方法重載
int
add(inta,intb){returna+b;}doubleadd(doublea,doubleb){returna+b;}(2)通過(guò)基類變量引用子類方法2024/2/2360七、多態(tài)publicclassEmployeeextendsPerson{privatedoublehourSalary;privatedoubleworkHour;publicEmployee(Stringname,Stringaddress,doublehourSalary){
super(name,address);
this.hourSalary=hourSalary;}publicvoidsetHourSalary(double
hourSalary){
this.hourSalary=hourSalary;}publicdoublegetHourSalary(){returnhourSalary;}publicvoidsetWorkHour(double
workHour){
this.workHour=workHour;}2024/2/2361七、多態(tài)
publicdoublegetWorkHour(){returnworkHour;}publicdoublegetSalary(){returnworkHour*hourSalary;}publicStringtoString(){
Strint
str=super.toString();
str=str+“_”+getSalary();returnstr;}2024/2/2362七、多態(tài)
publicclassTestPolymorphism{publicstaticvoidmain(String[]args){Studentstudent=newStrudent(“Jack”,“abc”);Employeeemployee=newEmployee(“Ada”,“def”,100.0);
Perseonperson;person=student; //implicitcasting
System.out.println(person.toString());person=employee; //implicitcasting
System.out.println(person.toString());}}2024/2/2363七、多態(tài)2.多態(tài)的作用(1)提供一致的操作接口;(2)提供動(dòng)態(tài)綁定(聯(lián)編)功能,有利于擴(kuò)展系統(tǒng)的功能。2024/2/2364七、多態(tài)3.instanceof操作符和ArrayList
importjava.util.ArrayList;publicclassTest{publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
list.add(new
Student(“Jack”,“abc”));
list.add(new
Empolyee(“Smith”,“def”,10.0));
list.add(new
Student(“Hilber”,“xyz”));
list.add(“cxg”);
intsize=list.size();
for(intk=0;k<size;k++){Objectobject=list.get(i);
if(object
instanceofStudent){ //Students=(Student)object;explicitcasting
System.out.println(object.toString());}}}}2024/2/2365七、面向?qū)ο缶幊痰奶卣鳎?)封裝將數(shù)據(jù)(方法)設(shè)為私有,防止客戶代碼直接操作該數(shù)據(jù)(方法),便于系統(tǒng)的升級(jí);將數(shù)據(jù)和對(duì)數(shù)據(jù)進(jìn)行操作的方法置于同一模塊中,盡可能防止方法對(duì)數(shù)據(jù)進(jìn)行誤操作;對(duì)封裝服務(wù)器中數(shù)據(jù)(間接)進(jìn)行操作需要指定服務(wù)器名稱,減少了命名沖突(在兩個(gè)對(duì)象中用相同的變量名和函數(shù)名不會(huì)引起沖突)。(2)繼承抽象可以有效地提高代碼的重用率,提高勞動(dòng)生產(chǎn)率;派生可以適應(yīng)用戶需求的變化;Object類為最常見的操作(toString,equals)提供了一致接口。(3)多態(tài)為程序員提供一致的編程接口,減輕程序員的學(xué)習(xí)和使用負(fù)擔(dān);提供動(dòng)態(tài)綁定(聯(lián)編)功能,有利于擴(kuò)展系統(tǒng)的功能。2024/2/2366九、異常1.錯(cuò)誤處理在程序的執(zhí)行過(guò)程中,無(wú)效的輸入或者無(wú)法預(yù)見的環(huán)境條件有可能導(dǎo)致執(zhí)行中的程序無(wú)法繼續(xù),健壯的程序必須預(yù)見性地做好安排,使得程序能夠優(yōu)雅地執(zhí)行。結(jié)構(gòu)化錯(cuò)誤處理機(jī)制不僅關(guān)注錯(cuò)誤處理本身,更關(guān)注錯(cuò)誤處理的方式。2024/2/2367九、異常1.錯(cuò)誤處理(1)非結(jié)構(gòu)化錯(cuò)誤處理非結(jié)構(gòu)化錯(cuò)誤處理破壞程序的邏輯結(jié)構(gòu),在閱讀程序時(shí)程序員注意力常常被錯(cuò)誤處理代碼分散。2024/2/2368九、異常1.錯(cuò)誤處理(2)結(jié)構(gòu)化錯(cuò)誤處理結(jié)構(gòu)化錯(cuò)誤處理能夠保持程序的完整邏輯結(jié)構(gòu),在閱讀程序時(shí)程序員可將注意力集中于程序邏輯的正確性2024/2/2369九、異常1.錯(cuò)誤處理(3)當(dāng)前方法無(wú)法確定該如何處理如果當(dāng)前方法不知道該如何處理發(fā)生的錯(cuò)誤,它就用一個(gè)異常對(duì)象通知調(diào)用方法。
Integer.parseInt(String
str)
Scanner.nextLine()2024/2/2370九、異常2.異常在Java語(yǔ)言中把錯(cuò)誤分為Error和Exception兩個(gè)類型,并把它們抽象為Throwable2024/2/2371九、異常3.Exception類Throwable
有兩個(gè)子類:ErrorandException.Error用于問(wèn)題嚴(yán)重、程序無(wú)法從錯(cuò)誤中恢復(fù)的情況,比如“outofmemory”錯(cuò)誤。
Exception用于有可能處理的錯(cuò)誤,比如文件讀寫出錯(cuò),文件沒(méi)有找到。2024/2/2372九、異常3.Exception類Java語(yǔ)言的Exception分為兩個(gè)類型:checkedexceptions
和uncheckedexceptions.“unchecked”和“checked”是指編譯器是否對(duì)異常情況進(jìn)行檢查。NumberFormatException--uncheckedIOException--checked2024/2/2373九、異常4.Exception對(duì)象當(dāng)出現(xiàn)不正常情況的時(shí)候,在一個(gè)方法內(nèi)可以創(chuàng)建并拋出(throw
)異常對(duì)象,把問(wèn)題交給調(diào)用該方法的上一級(jí)方法來(lái)處理,如果上一級(jí)方法也不準(zhǔn)備處理問(wèn)題,則把異常對(duì)象再次拋出,由更高層的調(diào)用方法來(lái)處理,依此類推。
異常對(duì)象傳遞所經(jīng)歷的方法序列叫調(diào)用棧(callstack),調(diào)用棧的信息將會(huì)保留在異常對(duì)象中供捕獲將對(duì)象的方法使用。如果異常對(duì)象在傳遞的路徑上從未處理過(guò),則最終被傳送到虛擬機(jī),由虛擬機(jī)來(lái)處理。2024/2/2374九、異常4.Exception對(duì)象異常對(duì)象包含的信息:(1)異常類型(即異常類的名稱);(2)調(diào)用棧;(3)描述異常對(duì)象的字符串。2024/2/2375九、異常4.Exception對(duì)象2024/2/2376九、異常4.Exception對(duì)象2024/2/2377九、異常4.Exception對(duì)象上一程序中的關(guān)鍵知識(shí)點(diǎn)
throw操作
throws子句被調(diào)用的方法拋出了異常,異常未捕獲的情況
catch語(yǔ)句之后的操作2024/2/2378九、異常4.Exception對(duì)象2024/2/2379九、異常5.用戶自定義異常類checked異常類可以從Exception類派生;unchecked異常類從RuntimeException類派生。2024/2/2380九、異常5.用戶自定義異常類2024/2/2381九、異常6.異常處理try-catch塊如果準(zhǔn)備在一個(gè)方法中處理異常,就要用到如下try-catch塊try{//codethatmaythrowexceptions}catch(ExceptionTypee){//codetohandletheexception}2024/2/2382九、異常6.異常處理Thetry-catchBlock2024/2/23831.1.5ExceptionObjects6.異常處理Thetry-catchBlock2024/2/2384九、異常6.異常處理2024/2/2385九、異常7.錯(cuò)誤處理小結(jié)(1)為了清晰地反映程序員的思維邏輯,應(yīng)采用結(jié)構(gòu)化異常處理機(jī)制,編寫程序時(shí),首先要關(guān)心的是程序的執(zhí)行邏輯,然后考慮在何處將會(huì)出現(xiàn)哪種類型的錯(cuò)誤,最后處理錯(cuò)誤。(2)在Java語(yǔ)言中錯(cuò)誤分為Error和Exception兩個(gè)類型,這兩個(gè)類型抽象為ThrowableError:嚴(yán)重錯(cuò)誤,無(wú)法恢復(fù)的錯(cuò)誤Exception:可以處理的錯(cuò)誤,錯(cuò)誤被處理之后程序可繼續(xù)執(zhí)行2024/2/2386九、異常7.錯(cuò)誤處理小結(jié)(3)Exception分為checked和unchecked異常兩個(gè)類型自定義unchecked異??芍苯訌腞untimeException繼承;自定義checked異常通常從Exception繼承。(4)用throw產(chǎn)生異常,用throws拋出異常(5)用try{…}catch(){}捕獲和處理異常一個(gè)try塊可對(duì)應(yīng)多個(gè)catch塊,捕獲的異常按catch()塊的順序匹配,應(yīng)先捕獲子類異常2024/2/2387九、異常7.錯(cuò)誤處理小結(jié)(6)未捕獲的checked異常必須用throws子句拋出,throws拋出的異常交由上一級(jí)程序程序處理;(7)從main方法拋出異常由虛擬機(jī)來(lái)處理。2024/2/2388十、抽象類1.抽象方法一個(gè)抽象方法只有方法簽名,沒(méi)有實(shí)現(xiàn)代碼;抽象方法用帶有abstract修飾符;publicabstractvoideat(intamount);publicabstractvoidsleep(inthours);擁有抽象方法的類必須聲明為抽象類。publicabstractclassclassName{...}2024/2/2389十、抽象類2.抽象類的作用為子類提供基類;阻止創(chuàng)建基類對(duì)象;一個(gè)抽象類不一定包含抽象方法,如果不希望客戶創(chuàng)建某個(gè)類的對(duì)象,則可將該類聲明為抽象類。為子類提供一致的操作接口。2024/2/23902.3.1AbstractClasses2024/2/2391十、抽象類3.抽象類的子類如果抽象類的子類沒(méi)有實(shí)現(xiàn)基類的所有抽象方法,則子類必須聲明為抽象類;當(dāng)子類實(shí)現(xiàn)了基類的所有抽象方法時(shí)也可以將子類聲明為抽象類。2024/2/2392十、抽象類2024/2/2393十、抽象類2024/2/23942.3.1AbstractClasses2024/2/23952.3.1AbstractClasses2024/2/2396十、抽象類2024/2/2397十、抽象類2024/2/23982.3.1AbstractClasses2024/2/23992024/2/231002024/2/23101十、抽象類4.創(chuàng)建具體類的對(duì)象Personperson=newPerson("John");//illegalPersonperson=newEmployee(“John”,21);Employeeemployee=newEmployee("John",21);Clientclient=newClient("Mary",6000.0);2024/2/23102十、抽象類5.多態(tài)多態(tài)允許一個(gè)方法名與多個(gè)實(shí)現(xiàn)相關(guān)聯(lián),當(dāng)Java虛擬機(jī)通過(guò)(引用)變量名調(diào)用方法時(shí),虛擬機(jī)檢查變量實(shí)際引用的對(duì)象來(lái)確定方法實(shí)現(xiàn)代碼。Containercontainer;container=newWagon(1,1,3);container=newTank(1,3);doublevolume=puteVolume();2024/2/231032.3.2Polymorphism2024/2/23104十一、接口
本講的內(nèi)容包括:1.接口2.接口的UML表示3.使用接口4.比較抽象類和接口2024/2/23105十一、接口1.接口在Java語(yǔ)言中,接口定義為抽象方法的集合,也允許包括常量聲明.
接口聲明使用關(guān)鍵詞interface,而不是關(guān)鍵詞class.2024/2/23106十一、接口1.接口2024/2/23107十一、接口1.接口接口中的方法隱含為public和abstract方法,不必顯式使用關(guān)兩個(gè)關(guān)鍵詞.接口中的數(shù)據(jù)隱含為public,static,andfinal.不必顯式使用這三個(gè)關(guān)鍵詞.2024/2/23108十一、接口1.接口2024/2/23109十一、接口1.接口一個(gè)類實(shí)現(xiàn)某個(gè)接口,就必須實(shí)現(xiàn)接口中的所有方法(對(duì)那么些沒(méi)有真正用處的方法提供一個(gè)空實(shí)現(xiàn)),除非把類聲明為抽象類..2024/2/23110十一、接口1.接口一個(gè)接口可以繼承另外一個(gè)或多個(gè)接口,被繼承的接口稱superinterface,新接口稱為subinterface.2024/2/23111十一、接口2.接口的UML表示接口在UML中包括兩個(gè)部分:(1)帶<<interface>>字頭的接口名;(2)若干方法名.
接口在UML中無(wú)屬性.2024/2/23112十一、接口2024/2/23113十一、接口2024/2/23114十一、接口3.使用接口2024/2/23115十一、接口2024/2/23116十一、接口3.使用接口實(shí)現(xiàn)接口的(具體)類必須實(shí)現(xiàn)接口的所有方法.2024/2/23117十一、接口3.使用接口2024/2/231182024/2/231192.3.3Interfaces2024/2/231202.3.3Interfaces2024/2/231212.3.3Interfaces2024/2/23122十一、接口4.接口與抽象類的比較(1)抽象類允許有實(shí)現(xiàn)細(xì)節(jié),包括變量和方法定義,由于抽象類有實(shí)現(xiàn)細(xì)節(jié),所以抽象類只能單繼承.(2)接口只包括簽名約定,因此可多繼承,可出現(xiàn)在類(繼承)層次的任何位置,接口不能有構(gòu)造方法.(3)接口與類一樣被當(dāng)做類型使用.2024/2/23123復(fù)習(xí)1.使用命令行環(huán)境(1)編譯程序//Test.javapublicclass{publicstaticvoidmain(String[]args){
if(args.length>0){System.out.println(args[0]);}else{
System.out.println(“hollow!”);}}}D:\cxg>javac
Test.java //產(chǎn)生Test.class2024/2/23124復(fù)習(xí)1.使用命令行環(huán)境(2)運(yùn)行程序D:\cxg>javaTest //執(zhí)行Test.class(3)JDK包含的內(nèi)容
Java程序編譯器javac.exeJava程序解釋器java.exeJava應(yīng)用編程接口JavaAPI(即JDK提供的庫(kù))
jre(Java運(yùn)行環(huán)境)
不包含IDE(集成開發(fā)環(huán)境),如Eclipse,JCreator(3)排錯(cuò)(1)語(yǔ)法;(2)邏輯;(3)運(yùn)行錯(cuò)誤(異常處理)2024/2/23125復(fù)習(xí)2.語(yǔ)法(1)關(guān)鍵字(2)標(biāo)識(shí)符(變量,常量,函數(shù),類名)標(biāo)識(shí)符規(guī)則3.常量和變量賦值(1)賦值
int[]a={1,2,3}; //用常量賦值
Strings=“abc”; //用常量賦值
shortx=10; //其他常量自己復(fù)習(xí)(2)擴(kuò)展賦值
s+=“def”;(3)final關(guān)鍵字2024/2/23126復(fù)習(xí)4.函數(shù)(1)簽名publicstaticvoidmain(String[]args)修飾符函數(shù)類型函數(shù)名參數(shù)表:類型名和順序(參數(shù)名無(wú)關(guān)緊要,僅占位)2024/2/23127復(fù)習(xí)4.函數(shù)(2)可變長(zhǎng)參數(shù)列表
publicclassDemo{publicstaticvoidmain(String[]args){print(3,5,5.4);
print(newdouble[]{1,2,3});}publicstaticvoidprint(double
…numbers){
for(intk=0;k<numbers.length;k++){
System.out.println(numbers[k]);
}}}2024/2/23128復(fù)習(xí)4.函數(shù)(3)toString和equalspublicStringtoString(){…}publicStringequals(Objectobject){…}
關(guān)系運(yùn)算符==Object類的equals()方法等同于==,子類的equals()由用戶確定子類方法覆蓋基類方法時(shí),不能縮小可見性范圍,不能改變返回值類型,可去掉throws出子句(如果編譯器允許),錯(cuò)誤示例
voidtoString(){System.out.println(“abc”);}2024/2/23129復(fù)習(xí)5.static修飾符(1)類變量與實(shí)例變量(2)類方法與實(shí)例方法實(shí)例方法可以訪問(wèn)類變量和類方法類方法不可訪問(wèn)實(shí)例變量和實(shí)例方法(3)子類可覆蓋基類的類變量和類方法
publicstaticvoidmain(String[]args)
變量覆蓋與作用域大小2024/2/23130復(fù)習(xí)6.數(shù)組(1)定義和初始化(2)ArrayList2024/2/23131復(fù)習(xí)7.常用類(1)String,StringBuilder和StringBuffer類
voidchange(StringBuffer
str){
str.append(“abc”);}//StringBuffer
str=newStringBuffer(“xxx”);//change(str); 真正改變了實(shí)際參數(shù)strvoidchange(String
str){
str+=“abc
ef”; //int
charNumber=str.length();}//Stringstr=“abc”;//change(str); 實(shí)際參數(shù)str不變2024/2/23132復(fù)習(xí)7.常用類(2)Math類三角函數(shù)指數(shù)函數(shù)取整數(shù)函數(shù)
min、max和abs函數(shù)
random函數(shù)類常量Math.PI(3)Date和Random類2024/2/23133復(fù)習(xí)7.常用類(5)包裝類Integer
int
compareTo(Integeri) //returnvalue-1,0,1
boolean
equals(Object
obj)doubledoubleValue()Character
int
compareTo(Character
ch)
boolean
equals(Object
obj)
boolean
isDigit(char
ch)
boolean
isDigit(int
ch)
boolean
isUpperCase(char
ch)2024/2/23134復(fù)習(xí)7.常用類(6)File類和booleanexists()publicclassCount{publicstaticvoidmain(String
args[])throwsException{
int
charCount=0,lineCount=0;if(args.length!=1){
System.out.println("Usage:javaCountfileName");System.exit(0);}FilesourceFile=newFile(args[0]);if(!sourceFile.exists()){
System.out.println("Sourcefile"+args[0]+"notexist");System.exit(0);}……2024/2/23135復(fù)習(xí)7.常用類(7)Scanner類
Scannerinput=newScanner(sourceFile);while(input.hasNext()){
//檢查是否到文件結(jié)尾
Strings=input.nextLine();
…..}編程:(1)文件輸入輸出;(2)數(shù)據(jù)進(jìn)制轉(zhuǎn)換。2024/2/23136復(fù)習(xí)7.常用類(8)Exception類常用異常類使用異常類在子類覆蓋有異常子句的基類方法publicstaticvoidmain(String
args[])throwsException{…}2024/2/23137復(fù)習(xí)8.類(1)構(gòu)造函數(shù)(2)this對(duì)象用引用當(dāng)前對(duì)象的數(shù)據(jù)或方法,成員變量參數(shù)同名時(shí)常用此法(3)super不能直接調(diào)用基類構(gòu)造函數(shù)用super(…)調(diào)用基類構(gòu)造函數(shù),必須是子類構(gòu)造函數(shù)中的第1條語(yǔ)句用super.funName(…)調(diào)用基類方法,在子類方法中調(diào)用基類方法時(shí)使用(尤其是子類方法覆蓋基類方法時(shí)),不能有這樣的調(diào)用super.super.funName(…)2024/2/23138復(fù)習(xí)9.抽象類和接口(1)抽象類
publicabstractclassA{…}publicclassabstractB{…} //非法
publicclassC{Ax; //非法
inty;
…}(2)接口常量publicstaticfinal方法publicabstract接口為類型,是一個(gè)純抽象類,可用instanceof測(cè)試實(shí)例是否實(shí)現(xiàn)了某接口(3)比較接口和抽象類2024/2/231392.3.4DesignPatternsDesignpatternsdescribepracticalsolutionstocommondesignproblemsthatoccurrepeatedlyinsoftwaredevelopment.Adesignpatterndescriptionconsistsof:AnamethatidentifiesthepatternAdescriptionoftheproblemthatthepatternaddressesAdescriptionofthesolutionthatincludestheclassstructuresthatsolvetheproblemAdiscussionoftheconsequencesofusingthepattern2024/2/231402.3.4DesignPatternsDesignpatternsdocumentgooddesignsolutionsthatcanbeusedforsimilarproblemsandformasharedvocabularyforproblem-solvingdiscussions.Inaddition,designpatternsaregoodillustrationsofobject-orientedconcepts.2024/2/231412.3.4DesignPatternsCatalogofdesignpatternsCreationalPatterns:Singleton,AbstractFactory,Builder,FactoryMethod,PrototypeStructuralPatterns:Adapter,Bridge,Composite,Decorator,Fa?ade,Flyweight,ProxyBehavioralPatterns:Strategy,ChainofResponsibility,Command,Iterator,Mediator,Memento,Observer,State,Visitor,Interpreter,TemplateMethod2024/2/231422.3.5SingletonPattern1.Description2.Structure3.Example4.Consequences2024/2/231432.3.5SingletonPatternDescriptionInsomea
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 稅務(wù)培訓(xùn)與技能提升
- 桑拿會(huì)所前臺(tái)服務(wù)心得
- 餐具行業(yè)設(shè)計(jì)理念培訓(xùn)體會(huì)
- 園林綠化單位衛(wèi)生整治方案
- 2024年認(rèn)識(shí)電的教案6篇
- 2024年秋天的懷念教案(15篇)
- 《民族國(guó)家的興起》課件
- 農(nóng)村自建房貼瓷磚合同(2篇)
- 中國(guó)液晶材料行業(yè)市場(chǎng)全景評(píng)估及投資方向研究報(bào)告
- 2025有關(guān)寫樹木買賣合同范本
- 安全事故現(xiàn)場(chǎng)處置方案(3篇)
- 中國(guó)通 用技術(shù)集團(tuán)招聘筆試題庫(kù)
- 【MOOC】工程材料學(xué)-華中科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 銀行貸款保證合同范本
- 《汽車膠粘劑》課件
- 手繪pop教學(xué)課件
- 2024腦血管病指南
- 企業(yè)三年?duì)I銷規(guī)劃
- 教師資格考試高中歷史面試試題及解答參考
- 2024年社區(qū)工作者考試試題庫(kù)
- 工廠設(shè)備工程師年終總結(jié)
評(píng)論
0/150
提交評(píng)論