Java面向對象程序設計-課件全套 虞建東 第1-11章 -Java語言概述-JDBC和MySQL數據庫_第1頁
Java面向對象程序設計-課件全套 虞建東 第1-11章 -Java語言概述-JDBC和MySQL數據庫_第2頁
Java面向對象程序設計-課件全套 虞建東 第1-11章 -Java語言概述-JDBC和MySQL數據庫_第3頁
Java面向對象程序設計-課件全套 虞建東 第1-11章 -Java語言概述-JDBC和MySQL數據庫_第4頁
Java面向對象程序設計-課件全套 虞建東 第1-11章 -Java語言概述-JDBC和MySQL數據庫_第5頁
已閱讀5頁,還剩311頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java面向對象程序設計2課程的主要內容1、概述2、Java語言基礎3、面向對象技術4、Java實用類庫5、輸入/輸出處理6、異常處理(Exception)7、多線程8、圖形用戶界面與事件處理9、網絡通信10、數據庫編程3參考資料Java編程思想Java核心技術,卷I:基礎知識/java/4本講基本內容簡介各種相關的編程語言介紹Java語言的特點介紹Java語言的開發環境Java程序規范5Java的歷史1991年SunMicrosystem公司的JamesGosling、BillJoe等人開發的面向信息家電的編程軟件OakOak->Java:互聯網給Java帶來新的生機1995年Sun向公眾推出Java并引起業界的轟動Java是當今最流行的軟件開發語言之一,Sun推出了Java2&J2EE使Java具有更廣泛的用途,適用于各種應用開發,尤其是網絡應用,網絡服務,嵌入式系統6解釋型vs.編譯型的工作模式源程序Java編譯器SPARCpentiumPowerpc中間碼PowerpcpentiumSPARC二進制源程序SPARCPowerpcpentiumPowerpcpentiumSPARCJava解釋器類、類庫裝載(庫)鏈接7Java的編譯與執行編譯,沒有絕對地址調入包含、繼承所用到的所有類,內存分配確定,變成真正可執行的機器碼Java源程序(.java文件)Java編譯器JavaBytecode(.class文件)系統執行平臺Bytecode解釋器Bytecode載入器字節碼校驗器不存在偽造的指針不違反訪問權限不非法訪問對象不導致操作棧溢出

8Java虛擬機不同的操作系統有不同的虛擬機。它類似一個小巧而高效的CPU。Bytecode代碼是與平臺無關的虛擬機的機器指令。Java字節代碼運行的兩種方式:interpreter(解釋方式)Just-in-time(即時編譯):由代碼生成器將字節代碼轉換成本機的機器代碼,然后可以以較高速度執行.JavainterpreterJust-in-timecompilerRuntimeSystemOperatingSystemHardware9Java開發環境——開發工具javac.exe:Java編譯器,用來將java程序編譯成Bytecode。java.exe:Java解釋器,執行已經轉換成Bytecode的Java應用程序。jdb.exe:Java調試器,用來調試Java程序。javap.exe:反編譯(將.class文件還原為.java)。javadoc.exe:文檔生成器,創建HTML文件。appletviwer.exe:Applet解釋器,用來解釋已經轉換成Bytecode的Java小應用程序。10Java程序——程序結構Java程序結構:package語句:零個或一個,必須放在文件開始import語句:零個或多個,必須放在所有類定義之前publicClassDefinition:零個或一個ClassDefinition:零個或多個InterfaceDefinition:零個或多個類個數:至少一個類,最多只能有一個public類源文件命名:若有public類,源文件必須按該類命名標識符:區分大小寫建議:一個類一個.java文件11Java程序——命名規則包、類、變量、方法等命名:要體現各自的含義。包名全部小寫,io,awt類名第一個字母要大寫,HelloWorldApp變量名第一個字母要小寫,userName方法名第一個字母要小寫,setName程序書寫格式:保證良好的可讀性,使程序一目了然。大括號{}的使用與對齊語句段的對齊在語句段之間適當空行程序注釋:幫助了解程序的功能。類注釋 變量注釋 方法注釋語句注釋 語句段注釋13Java語言基礎關鍵字與標識符數據類型數據類型的轉換運算符和表達式流程控制數組141.1標識符(Identifier)程序員對程序中的各個元素加以命名時使用的命名記號稱為標識符,包括:類名、變量名、方法名……Java語言中,標識符是以字母,下劃線(_),貨幣符($£¥)開始的一個字符序列,后面可以跟字母,下劃線,貨幣符,數字。Java標識符區分大小寫字母。標識符中最好不使用貨幣符($£),因為這些符號常被用于內部處理。合法的標識符:IdentifieruserNameUser_Name_sys_value$changemy$Change非法的標識符:2mailroom#class151.2數據類型(DataType)Javatypesystemprimitivereferencenullcharnumericbooleanclassinterfacearrayintegralfloating-pointbyteshortintlongfloatdouble161.2數據類型(DataType)數據類型

所占位數

數的范圍

boolean 1 true/falsechar 16 0~65535byte

8

-27~27-1short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 float0.0f 32 7 -3.4e+38

~3.4e+38double0.0 64 15 -1.7e+308

~1.7e+308171.2數據類型(DataType)所有基本類型所占的位數都是確定的,并不因操作系統的不同而不同。所有基本類型的關鍵詞都是小寫的。數據類型轉換必須滿足如下規則:不能對boolean類型進行類型轉換。不能把對象類型轉換成不相關類的對象。在把容量大的類型轉換為容量小的類型時必須使用強制類型轉換。181.2.1布爾類型(boolean)布爾型數據只有兩個值true和false它們不對應于任何整數值false為缺省值布爾型數據只能參與邏輯關系運算:&&||==!=!示例:booleanb1;booleanb2=true;b=!b2;booleanb=(b1&&b2)!=false;191.2.2字符類型(char)字符型數據代表16位的Unicode字符字符常量是用單引號括起來的一個字符'a'‘B’‘\n’‘\u0030’字符型數據的取值范圍為0~65535或者說\u0000~\uFFFF\u0000為缺省值示例charc1; \\缺省值為0charc2=‘0’; \\賦初值為字符'0'charc3=32; \\用整數賦初值為空格201.2.2字符類型(char)特殊字符的常量表示法:反斜線(Backslash) ‘\\’退格(Backspace) ‘\b’回車(Carriagereturn) ‘\r’進紙符(Formfeed) ‘\f’制表符(Formfeed) ‘\t’換行(Newline) ‘\n’單引號(Singlequote) ‘\’’八進制數(‘\0’~‘\377’

) ‘\DDD’Unicode字符 ‘\uHHHH’211.2.3整數類型(byteshortintlong)整數常量表示法:十進制:

0-243

2147483647八進制以0開頭:

010[=8]-0377[=-255]十六進制以0x或0X開頭:

0x10[=16]-0XF=[-15]64位長整數以l或L結尾:12l-343L0xfffffffffL1L<<32等于4294967296L1<<32等于1(特別注意非0)沒有以l或L結尾的數字,根據其實際值所屬范圍,可以被用作byte,short,或int型整數以l或L結尾的數字,無論其實際值所屬范圍怎樣,都被用作long型整數221.2.3整數類型(byteshortintlong)示例byteb1; \\缺省值為0byteb2=127; \\賦初值為127shorts1=(short)(b1+b2);\\強制類型轉換shorts2=(short)(b1+123)\\強制類型轉換intn=b1+b2; \\不需要強制類型轉換longl1=2343; \\不需要強制類型轉換longl2=4294967296L; \\必須用L或l結尾longl3=65536*63356; \\乘法運算越界,l3為0longl4=65536L*63356; \\l3為4294967296L231.2.4浮點數類型(floatdouble)浮點數(實數)常量的兩種表示法十機制小數形式:0.23.18-234.科學計數法形式:0.23e61.23E-432位浮點數形式:0.23f1.23E-4f.18F示例doubled1=127.0; \\賦初值為127doubled2=127; \\賦初值為127floatf1=127.0f; \\必須在數字后加f或Ffloatf2=4.0e38f; \\錯誤!32位浮點數不能超過 \\3.4028234663852886e38floatf3=(float)d1; \\必須強制類型轉換241.2.5類型轉換(typecast)基本數據類型在賦值時的自動類型轉換規則:byte short,char,int,long,float,doubleshort int,long,float,doublechar int,long,float,doubleint long,float,doublelong float,doublefloat double反向的類型轉換必須使用強制類型轉換轉換過程中可能損失精度(byte)255==-1 (byte)0x5634==0x34浮點數到整數的轉換是通過舍棄小數得到,而不是四舍五入(int)23.7==23 (int)-45.89f==-45251.3字符串(String)字符串是Java中最常用的類字符串常量是雙引號(“”)引起來的字符序列“astring”“a\nmultiline\nstring\n”多個字符串通過連接運算(+)生成新字符串對象“twostring”+“concatenateintoone”字符串可以和基本類型做連接運算Strings=“0xF=”+0xF;//“0xF=15”字符串可以和任何對象做連接運算Strings=“s=”+anObject;//“s=…”261.3.1基本類型轉換為字符串布爾類型(boolean)true->“true” false->“false”整數類型(byteshortintlong)byteshortintlong->整數的十進制表示字符類型(char)’A’->“A” ‘\uHHHH’->“\uHHHH”浮點數類型(floatdoule)相應精度的十進制浮點數(必要時使用科學計數法)float的精度約為7;double的精度約為15271.3.2對象轉換為字符串任何一個對象都有toString()方法,這個方法在所有對象的基類Object中有缺省實現在需要將對象自動轉換為字符串的地方,對象的toString()方法被調用,用來生成相應的字符串。任何類(class)、接口(interface)、數組(array)的實例都是對象。281.3.3字符串(String)特殊字符在字符串中的表示法反斜線(Backslash) \\退格(Backspace) \b回車(Carriagereturn) \r進紙符(Formfeed) \f制表符(Formfeed) \t換行(Newline) \n雙引號(Doublequote) \”八進制數(‘\0’~‘\377’

) \DDDUnicode字符 \uHHHH292.1運算符(Operator)算術運算符:+,―,*,/,%,++,--關系運算符:>,<,>=,<=,==,!=布爾邏輯運算符:!,&&,||位運算符:>>,<<,>>>,&,|,^,~賦值運算符:=,+=,-=,*=,/=三元條件運算符:?:302.1運算符(Operator)其它特殊的運算符包括分量運算符:.下標運算符:[]實例類型判斷運算符:instanceof對象示例創建運算符:new,強制類型轉換運算符:(類型)方法調用運算符:()312.2表達式表達式是由操作數和運算符按一定的語法形式組成的符號序列。一個常量或一個變量名字是最簡單的表達式,其值即該常量或變量的值;表達式的值還可以用作其他運算的操作數,形成更復雜的表達式。示例:X num1+num2 a*(b+c)+d3.14 x<=(y+z) x&&y||z322.3優先級和結合順序1) .,

[],() 9) &2) ++,--,!,~,instanceof 10) ^

3) +,-,(type),

new 11) |4) *

,/,% 12) &&5) +,- 13) ||6) >>,>>>,<< 14) ?:7) >,<,>=,<= 15) =,+=,-=,*=,/=,%=,^=8) ==,!= 16) &=,|=,<<=,>>=,>>>=注:紅色的從右到左,其余的從左到右;用括號改變結合順序。 藍色運算符對byte、short、char作運算時,結果為int型整數。332.4語句和代碼段一個由分號(;)結尾的單一命令是一條語句(Statement),一條語句一般是一行代碼,但也可以占多行代碼。inta=1;//變量定義及初始化語句用大括號({……})圍起來的多條語句構成一個代碼段(Codeblock);同時代碼段也大括號前的一些修飾性描述:classAclass{ for(inti=0;i<=1;i++){……

……

} }342.5作用域(Scope)作用域決定了變量可使用的范圍全局變量(Globalvariables):變量可以在整個類中被訪問;(成員變量,類變量)局部變量(Localvariables):變量只能在定義其的代碼段中被訪問。作用域規則:在一個代碼段中定義的變量只能在該代碼段或者該代碼段的子代碼段中可見。使用局部變量比使用全局變量更安全。352.5作用域(示例)classScoping{intx=0;voidmethod1(){inty;y=x;//OK.method1可以訪問y.}voidmethod2(){intz=1;z=y;//Error.y在method2的作用域之外定義

}}363.Java語言的控制分支語句:if-else,switch循環語句:while,do-while,for與程序轉移有關的其它語句:break,continue,return例外處理語句:try-catch-finally,throw373.1條件語句if-elseif(boolean-expression1){statements1;}elseif(boolean-expression2){statements2;}……elseif(boolean-expressionN){statementsN;}else{statementsElse;}383.1條件語句if-else布爾表達式boolean-expression是任意一個返回布爾數據類型的表達式,而且必須是(比C或C++要嚴格)。與C或C++一樣,每個單一語句后面都要有分號。為了增強程序的可讀性,應將if或else后的語句用{}括起來。else子句是任選的,不能單獨作為語句使用,它必須和if語句配對使用,并且總是與離它最近的if配對。if(1<2){System.out.println(“1issmallerthan2”);}else{System.out.println(“CanNOTreachhere!”);}393.1多分支語句switchswitch(expression) {casevalue1:statements1;break;……casevalueN:statementsN;break;[default:defaultStatements;]}403.1多分支語句switch表達式expression的返回值類型必須是這幾種類型之一:int、byte、char、short、String。case子句中的值valueI必須是常量,而且所有case子句中的值應是不同的。default子句是任選的。break語句用來在執行完一個case分支后,使程序跳出switch語句,即終止switch語句的執行。如果某個case分支后沒有break語句,程序將不再做比較而執行下一個分支。switch語句的功能可以用if-else語句來實現,但某些情況下,使用switch語句更簡煉。413.1多分支語句switchinta=100,b=20,c;charoper=‘+’;switch(oper){case‘+’:c=a+b;break;case‘-’:c=a-b;break;default:c=a*b;

[break;]}423.2循環語句while[initialization]//初始化條件while(termination){//循環條件

body; //循環體

[iteration;] //迭代變更循 //環條件}當表達式termination為true時,執行{}中的語句,否則終止循環。tbfalsetrue433.2循環語句do-while[initialization]//初始化條件do{body; //循環體

[iteration;] //迭代變更循 //環條件}while(termination);//循環條件首先執行一遍{}中的語句,當表達式termination為true時,繼續執行{}中的語句,否則終止循環。tbfalsetrue443.2循環語句forfor(Init;Termination;Iterat){ body;//循環體}Init//初始化條件Termination//循環條件Iterat//迭代變更循環條件tbodyfalsetrueiterainit453.2循環語句forfor語句執行時,首先執行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執行循環體中的語句,最后執行迭代部分。完成一次循環后,重新判斷終止條件。初始化、終止以及迭代部分都可以為空語句(但分號不能省),三者均為空的時候,相當于一個無限循環。在初始化部分和迭代部分可以使用逗號語句,來進行多個操作。逗號語句是用逗號分隔的語句序列。for(inti=0,intj=10;i<j;i++,j--){……}463.2循環語句比較intn=1,sum=0;while(n<=10){sum=sum+n;n++;}intn=10,sum=0;do{sum+=n;n--;}while(n>0);intsum=0;for(inti=1;i<=10;i++){sum+=i;}while循環do-while循環for循環473.3程序轉移相關語句break在switch語中,break語句用來終止switch語句的執行,使程序從整個switch語句后的第一條語句開始執行。在循環語句中,break用于終止并跳出循環,從緊跟著循環體代碼段后的語句執行。在Java中,可以為每個代碼塊加一個標號,break語句可用于跳出它所指定的塊,并從緊跟該塊后的第一條語句處執行。BlockLabel:{codeBlock;breakBlockLabel;}483.3程序轉移相關語句breaka:{//標記代碼塊a…… b:{//標記代碼塊b……c:{//標記代碼塊c……breakb;……//這段語句將不執行

}//代碼塊c結束

……//這段語句也不執行

}//代碼塊b結束

……//從這段語句開始執行}//代碼塊a結束493.3程序轉移相關語句continuecontinue語句用來結束本次循環,跳過循環體中下面尚未執行的語句,接著進行終止條件的判斷,以決定是否繼續循環。對于for語句,在進行終止條件的判斷前,還要先執行迭代語句。它的格式為:continue;也可以用continue跳轉到括號指明的外層循環中,這時的格式為continueouterLable;503.3程序轉移相關語句continueouter:for(inti=0;i<10;i++){//外層循環

inner:for(intj=0;j<10;j++){//內層循環

if(i<j){ ……

continueouter; } ……}//內層循環結束

……}//外層循環結束for(inti=0;i<10;i++){if(i==5){continue;}

……}513.3程序轉移相關語句returnreturn語句從當前方法中退出,返回到調用該方法的語句處,并從緊跟該語句的下一條語句繼續程序的執行。返回語句有兩種格式:returnexpression;//當方法需要返回某種類型數據時return;//當方法的返回類型為void時單獨一條return語句放在方法中間時,會產生編譯錯誤,因為其后的語句將不會執行到。若真需要退出方法,可以通過將return語句嵌入某些語句(如if-else)來使程序在未執行完方法中所有語句時退出。524

數組和字符串數組是一組同類型的變量或對象的集合數組的類型可以是基本類型,或類和接口數組中每個元素的類型相同引用數組元素通過數組名[下標]數組下標(數組的索引)從0開始數組是一種特殊的對象(Object)定義類型(聲明)創建數組(分配內存空間):new釋放(Java虛擬機完成)一維數組、多維數組534.1一維數組一維數組的元素只有一個下標變量例:A[1],c[3]一維數組的聲明方法1:類型數組名[];Stringargs[];inta[];doubleamount[];charc[];方法2:類型[]數組名;String[]args;int[]a;double[]amount;char[]c;注意類型是數組中元素的數據類型(基本和構造類型)數組名是一個標識符數組聲明后不能被訪問,因未為數組元素分配內存空間variabledmightnothavebeeninitializedSystem.out.println(d[0]);^1errordouble[]d;System.out.println(d[0]);54數組的創建用new來創建數組為數組元素分配內存空間,并對數組元素進行初始化格式:數組名=new類型[數組長度]例:a=newint[3];聲明和創建的聯用:int[]a=newint[3];默認賦初值整型初值為0int[]i=newint[3];實型初值為0.0float[]f=newfloat[3];布爾型初值為falseboolean[]b=newboolean[3];字符型初值為\u0000(不可見)char[]c=newchar[3];55classTest{ publicstaticvoidmain(Stringargs[]){ int[]i=newint[3]; float[]f=newfloat[3]; boolean[]b=newboolean[3]; char[]c=newchar[3]; for(intj=0;j<i.length;j++) System.out.println(i[j]); for(intj=0;j<f.length;j++) System.out.println(f[j]); for(intj=0;j<b.length;j++) System.out.println(b[j]); for(intj=0;j<c.length;j++) System.out.println(c[j]); }}C:\>javaTest0000.00.00.0falsefalsefalseC:\T56一維數組的初始化為數組元素指定初始值方式一:聲明和創建數組后對數組初始化classTest{ publicstaticvoidmain(Stringargs[]){ inta[]=newint[5]; System.out.println(“\t輸出一維數組a:”); for(inti=0;i<5;i++){ a[i]=i+1; System.out.println(“\ta[”+i+“]=”+a[i]); }}}a.length57一維數組的初始化方式二:在聲明數組的同時對數組初始化格式:類型數組名[]={元素1[,元素2……]};inta[]={1,2,3,4,5};classTest{ publicstaticvoidmain(Stringargs[]){ inta[]={1,2,3,4,5}; System.out.println(“\t輸出一維數組a:”); for(inti=0;i<5;i++) System.out.println(“\ta[”+i+“]=”+a[i]); }}58數組的賦值數組的整體賦值用java.lang.System類的方法進行數組復制59數組整體賦值classTest{ publicstaticvoidmain(Stringargs[]){ inta[]={2,4,6,8}; intb[];int[]c={1,3,5,7}; b=a;c=a; for(intj=0;j<a.length;j++) System.out.print(a[j]+““); System.out.println(); for(intj=0;j<b.length;j++) System.out.print(b[j]+““); System.out.println(); for(intj=0;j<c.length;j++) System.out.print(c[j]); }}C:\>javaTest246824682468C:\>T60一維數組的數組復制java.lang.System類的方法publicstaticvoidarraycopy(Objectsrc, intsrcIndex, Objectdest, intdestIndex, intlength)61classTest{publicstaticvoidmain(Stringargs[]){int[]a={2,4,6,8}; int[]b; int[]c={1,3,5,7,9}; b=a; System.arraycopy(a,1,c,0,3); System.out.print(“數組a:”); for(inti=0;i<a.length;i++) System.out.print(a[i]+“”); System.out.println(); System.out.print(“數組b:”); for(inti=0;i<b.length;i++) System.out.print(b[i]+“”); System.out.println();一維數組的數組復制System.out.print(“數組c:”);for(inti=0;i<c.length;i++) System.out.print(c[i]+“”);System.out.println();}}數組a:2468數組b:2468數組c:46879T62小結類型相同、數量確定的存儲結構用下標訪問數組中任一個元素,數組名[下標]聲明、創建(new)、初始化/賦值int[]d;System.out.println(d[0]);System.out.println(d.length);variabledmightnothavebeeninitializedSystem.out.println(d[0]); ^System.out.println(d.length);^634.2多維數組數組的數組ArraysofArrays例:表格(行和列)以二維數組為例期中考試期末考試姓名總分6870學生A698085學生B847590學生C8664二維數組的聲明類型數組名[][],例inta[][];數組聲明后不能被訪問,因未為數組元素分配內存空間二維數組的創建方法一:直接分配空間(new)例inta[][]=newint[2][3];

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]兩個一維數組,每個數組包含3個元素65二維數組的創建方法二:從最高維開始,為每一維分配空間例int[][]c=newint[2][];c[0]=newint[4];c[1]=newint[3];c[0][0]c[0][1]c[0][2]c[0][3]c[1][0]c[1][1]c[1][2]注:為數組分配空間需指定維數大小,至少最高維(最左邊)大小錯誤:intb[][]=newint[][];66二維數組的初始化對每個元素單獨進行賦值聲明數組的同時初始化對數組元素的引用數組名[下標1][下標2]下標為非負的整型常數0~67二維數組的初始化每個元素單獨進行賦值classTest{ publicstaticvoidmain(Stringargs[]){ int[][]a=newint[3][3]; a[0][0]=1;a[1][1]=1;a[2][2]=1; System.out.println(“數組a:”); for(inti=0;i<a.length;i++){ for(intj=0;j<a[i].length;j++) System.out.print(a[i][j]+“”); System.out.println(); } }}最高維數組長度10001000168二維數組的初始化聲明數組的同時初始化例int[][]a={{1,2,3},{3,4,5}};a[0][0]=1a[0][1]=2a[0][2]=3a[1][0]=3a[1][1]=4a[1][2]=5

例String[][]cartoons={{"Flint","Fred","Wim","Pebbles","Dino"},{"Rub","Barn","Bet","Bam"},{"Jet","Geo","Jane","Elroy","Judy","Rosie","Astro"},{"Sco","Sco","Shag","Velma","Fred","Dap"}};inti=cartoons.length694.3數組的界限起點和終點數組的長度:數組名.length起點:數組名[0]終點:數組名[length-1]inti={4,56,78,9,34};i.length5i[0]

4i[length-1]=i[4]34i[a]若a>4則???703類和對象-1程序語言的發展面向機器(機器語言、匯編語言)可讀性、可維護、移植性差;效率高。面向過程核心:算法+數據結構缺陷:隨著應用程序的規模擴大,操作與數據分離所帶來的維護工作量越來越大不適用于GUI界面、事件驅動編程面向對象面向對象設計思想的要點認為客觀世界由各種對象組成,任何事物都是對象,復雜的對象可以由比較簡單的對象以某種方式組合而成。把所有對象都劃分成各種對象類,每個對象類都定義了一組數據和一組方法。按照子類與父類的關系,把若干個對象類組成一個層次結構的系統。對象彼此之間僅能通過傳遞消息互相聯系

抽象性 封裝性 繼承性多態性面向對象程序設計的優點開發時間短,效率高,可靠性高,所開發的程序更強壯。由于面向對象編程的可重用性,可以在應用程序中大量采用成熟的類庫,從而縮短了開發時間。應用程序更易于維護、更新和升級。繼承和封裝使得應用程序的修改帶來的影響更加局部化??芍赜眯?可擴展性 可管理性741.面向對象的概念現實世界 :人、狗、書計算機模型:類是對象的模板,對象是類的實例

classPerson{}

Personp=newPerson();intx=9;int[]a=newint[]{1,2,3};Strings=newString(“qaz”);75現實生活中的對象對象在程序中是通過一種抽象數據類型來描述的,這種抽象數據類型稱為類(class)。classCar{intcolorNo;intdoorNumber;

intspeed;

voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}

抽象數據類型76……Carcar1;Carcar2;…

…CarcarN;方法構造方法是一種特殊方法,它的名字必須與它所在的類的名字完全相同,而且沒有類型,構造方法也可以重載。方法重載:一個類中可以有多個方法具有相同的名字,但這些方法的參數必須不同,即或者是參數的個數不同,或者是某個參數的類型不同。實例方法和類方法classA{inta;floatmax(floatx,floaty){//實例方法

…}

staticfloatjerry(){//類方法

…}

staticvoidspeak(Strings){//類方法

…}}實例方法既能對類變量操作也能對實例變量操作,而類方法只能對類變量進行操作。實例方法可以調用該類中的實例或類方法;類方法只能調用該類的類方法,不能調用實例方法。靜態的是屬于類的,實例的屬于對象實例。成員變量、類變量、局部變量對象的內存模型(引用、指針\堆和棧)創建一個對象包括對象的聲明和為對象分配classPoint{intx,y;Point(inta,intb){x=a;y=b;}}Pointp1=newPoint(5,15);Pointp2=newPoint(8,18);p1=p2;參數的傳遞this關鍵字包是Java語言中有效地管理類的一個機制包名的目的是有效的區分名字相同的類,不同Java源文件中兩個類名字相同時,它們可以通過隸屬不同的包來相互區分com.sun.java.Hello.class包和import84訪問權限當類可以被訪問時,對類的成員變量和成員方法而言,其應用范圍可以通過施以一定的訪問權限來限定。 類內 包內 子類 任意 公共的(public) ★ ★ ★ ★ 保護的(protected)★ ★ ★ 包訪問(缺?。?★ ★ 私有的(private) ★基本類型的類包裝

提供了基本數據類型相關的類,這些類在java.lang包中,分別是:Byte、Integer、Short、Long、Float、Double和Character類.自動裝箱就是允許把一個基本數據類型的值直接賦值給基本數據類型相對應的類的實例,例如:

Integernumber=100;或

intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動拆箱就是允許把基本數據類型的類的實例當作相應的基本數據類型來使用,例如:number是一個Integer對象,那么允許:

intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();4.11基本類型的類包裝

4.11.1Double和Float類4.11.2Byte、Short、Integer、Long類4.11.3Character類4.11.4自動裝箱與拆箱自動裝箱就是允許把一個基本數據類型的值直接賦值給基本數據類型相對應的類的實例,例如:

Integernumber=100;或

intm=100;Integernumber=m;上述語句的裝箱過程是:Integernumber=newInteger(m);自動拆箱就是允許把基本數據類型的類的實例當作相應的基本數據類型來使用,例如:number是一個Integer對象,那么允許:

intx=number+number;上述語句的拆箱過程是:intx=Value()+Value();87子類子類是作為另一個類的擴充或修正而定義的一個類。bicycle(superclass)MountainbikesRacingbikesTandembikessubclass88繼承繼承使得子類可以利用父類中定義的方法和變量,就像它們屬于子類本身一樣。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}

classManagerextendsEmployee{Stringdepartment;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}

89方法override和成員變量的隱藏覆蓋使得在子類中可以重新定義父類中已有的方法,從而是子類具有自己的行為。classEmployee{Stringname;publicvoidshowInfo(){System.out.println(name);}}

classManagerextendsEmployee{Stringdepartment;

Stringname;publicvoidshowInfo(){System.out.println(name);System.out.println(“Managerof”+department);}}

90繼承的例子ShapePointCircleCylinder何時選擇繼承?一個很好的經驗:“B是一個A嗎?”如果是則讓B做A的子類.在更多的時候,組成關系比繼承更能使系統具有高度的靈活性,可維護行,并且提高系統的可重用性。ShapePointCircleCylinder91方法覆蓋時應遵循的原則:覆蓋后的方法不能比被覆蓋的方法有更嚴格的訪問前提條件。覆蓋后的方法不能比被覆蓋的方法產生更多的例外,也不能有更松的事后條件。super1、子類如果想明確使用父類的構造方法,必須在子類的構造方法中使用關鍵字super來調用父類的構造方法,而且super必須是子類構造方法中的頭一條語句。3、在父類中定義構造方法時,應盡量寫一個不帶參數的構造方法,以防子類省略super時出現錯誤。2、在子類的構造方法中,沒有明顯地寫出super關鍵字來調用父類的某個構造方法,那么默認地有:super();即調用父類的不帶參數的構造方法。2、final類不能被繼承,即不能有子類。1、final關鍵字可以修飾類、成員變量和方法中的局部變量。3、修飾方法,則不允許子類重寫父類的final方法。4、成員變量或局部變量被修飾為final的,就是常量。常量在聲明時沒有默認值,所以在聲明常量時必須指定該常量的值,而且不能再發生變化。final對象的上轉型1.上轉型對象不能操作子類新增的成員變量(失掉了這部分屬性);不能調用子類新增的方法(失掉了一些功能)。2.上轉型對象可以訪問子類繼承或隱藏的成員變量,也可以調用子類繼承的方法或子類的重寫方法。上轉型對象操作子類繼承的方法或子類重寫的方法,其作用等價于子類對象去調用這些方法。因此,如果子類重寫了父類的某個方法后,當對象的上轉型對象調用這個方法時一定是調用了子類重寫的方法。多態多態:不同的對象收到同一個消息可產生完全不同的效果

或同一個行為具有多個不同表現形式或形態的能力多態的效果:用戶發送一個通用的消息,而實現的細節則由接收對象自行決定。多態的作用:增強了操作的透明性、可理解性和可擴展性。增強了軟件的靈活性和重用性。多態存在的三個必要條件繼承重寫父類引用指向子類對象9596抽象類抽象類:用abstract關鍵字來修飾一個類時,該類叫做抽象類;抽象類必須被繼承。抽象類不能被直接實例化。它只能作為其它類的超類,這一點與最終類(final類)正好相反。抽象方法:用abstract來修飾一個方法時,該方法叫做抽象方法。抽象方法必須被重寫抽象方法只有聲明,不能有實現。定義了抽象方法的類必須是抽象類。abstract類的理解

1、抽象類可以抽象出重要的行為標準,該行為標準用抽象方法來表示。即抽象類封裝了子類必需要有的行為標準。2、抽象類聲明的對象可以成為其子類的對象的上轉型對象,調用子類重寫的方法,即體現子類根據抽象類里的行為標準給出的具體行為。3、多態核心技術之一是使用上轉型對象,即將abstract類聲明對象作為其子類的上轉型對象,那么這個上轉型對象就可以調用子類重寫的方法。4、利用多態設計程序的好處是,可以體現程序設計的所謂開-閉原則。開-閉原則強調一個程序應當對擴展開放,對修改關閉,增強代碼的可維護性。98接口(interface)JDK8版本之前,接口體中只有抽象方法.所有的static常量的訪問權限一定都是public(允許省略public、final和static修飾符,接口中不會有變量)interfacePrintable{

publicstaticfinalintMAX=100;//等價寫法:intMAX=100;

publicabstractvoidadd();

//等價寫法:voidadd();}publicinterfacePrintable{publicstaticfinalintMAX=100;//等價寫法:intMAX=100;publicabstractvoidon();//等價寫法:voidon();publicdefaultintmax(inta,intb){//default方法returna>b?a:b;}

publicstaticvoidf(){System.out.println("注意是從JavaSE8開始的");}}classAimplementsPrintable,Addable{}一個類實現了某個接口,那么這個類就自然擁有了接口中的常量,default方法(去掉了default關鍵字),該類也可以重寫接口中的default方法(注意,重寫時需要去掉default關鍵字)。如果一個非abstract類實現了某個接口,那么這個類必須重寫該接口的所有abstract方法,即去掉abstract修飾給出方法體。特別注意的是,類實現某接口,但類不擁有接口的static方法。接口中的方法的訪問權限都是public的,重寫時不可省略public(否則就降低了訪問權限,這是不允許的)。接口回調可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調用被類重寫的接口方法以及接口中的default方法接口回調即上轉型對象調用子類的重寫方法,即當接口變量調用被類重寫的接口方法或接口中的default方法時,就是通知相應的對象調用這個方法。接口回調可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調用被類重寫的接口方法以及接口中的default方法接口回調即上轉型對象調用子類的重寫方法,即當接口變量調用被類重寫的接口方法或接口中的default方法時,就是通知相應的對象調用這個方法。

Lambda表達式Lambda表達式主要目的是在使用單接口(只含有一個方法的接口)匿名類時讓代碼更加簡潔。Lambda表達式就是一個匿名方法(函數).Class類得到一個類的實例的最常用的方式就是使用new運算符和類的構造方法。但是,Java通過使用Class也可以得到一個類的實例。為了使用Class得到一個類的實例,可以先得到一個和該類相關的Class對象(相當于得到類型)。

異常(Exception)處理105本講內容異常機制簡介try代碼段拋出異常(throw語句)捕獲異常(catch代碼段)再拋異常(throw)finally代碼段throws語句JDK中的異常自己定義的異常1061.異常機制簡介在進行程序設計時,錯誤的產生是不可避免的,如何處理錯誤?把錯誤交給誰去處理?程序又該如何從錯誤中恢復?這是任何程序設計語言都要解決的問題。所謂錯誤,是在程序運行過程中發生的異常事件,比如除0溢出、數組越界、文件找不到等,這些事件的發生將阻礙程序的正常運行。為了增加程序的強壯性,程序設計時,必須考慮到可能發生的異常情況并做出相應的處理。1071.異常機制簡介普通的錯誤處理方法通過被調用函數的返回值感知在被調用函數中產生的錯誤;通過使用if語句來判斷是否出現了錯誤并進行處理。這種錯誤處理機制會導致不少問題函數的返回值一般有程序意義,需要定義用于錯誤處理的無效的返回值;為知道錯誤產生的內部細節,常用全局變量(如Errno)來存儲錯誤的類型,這容易導致誤用,因為變量的值有可能還未被處理就被另外的錯誤覆蓋掉。108沒有錯誤處理的程序{openTheFile;determineitssize;allocatethatmuchmemory;read-file……closeTheFile;}109以常規方法處理錯誤openFiles;if(theFilesOpen){

determinethelengthofthefile;if(gotTheFileLength){

allocatethatmuchmemory;if(gotEnoughMemory){

readthefileintomemory;if(readFailed)errorCode=-1;}elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;……110以常規方法處理錯誤存在的困難和問題寫程序難大部分精力花在出錯處理上了只把能夠想到的錯誤考慮到對以外的情況無法處理程序可讀性差大量的錯誤處理代碼混雜在程序中出錯返回的信息量太少無法更確切的了解錯誤狀況或原因111

用異常機制處理錯誤try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}1122.Java異常機制try{…}定義可能產生異常的代碼段throwe;用于拋出一個異常catch(Etypee){…}用于捕獲一個異常finally{…}用于做統一的事后處理,如釋放資源throwsEtype1,Etype2……用于聲明方法可能拋出的異常類型try-catch-finally1133.try代碼段try代碼段包含可能產生異常的代碼try代碼段后跟有一個或多個catch代碼段每個catch代碼段聲明其能處理的一種特定類型的異常每個catch代碼段都是一段異常處理代碼try{

可能產生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}1144.拋出異常(throw語句)任何從Throwable派生的類都可以用throw語句拋出,拋出異常用來表明程序遇到的錯誤無法正常執行而需要異常處理thrownewMyException(“someinfomation”);異??梢杂蓆ry代碼段中的語句拋出也可以從被try代碼段中調用的方法中拋出異常還可能產生于數組下標越界以及Java虛擬機內部錯誤等Exception和Error是Throwable的直接派生類Exception程序應該處理的異常情形Error代表系統嚴重錯誤,一般程序不處理這類錯誤異常拋出點后的代碼在拋出異常后不再執行也可以說異常的拋出終止了代碼段的執行1155.捕獲異常(catch代碼段)catch代碼段聲明其能捕獲的異常類型,并包含處理該類型異常的代碼異??偸怯删嚯x產生異常最近的匹配catch代碼段處理catch(Exceptione)捕獲所有Exceptioncatch(Throwablet)捕獲Exception和Errortry{

可能產生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}1165.捕獲異常(續1)如果沒有相應的異常處理,則異常被交給上一層try代碼段進行處理異常處理的查找依據類型匹配原則順序進行第一個匹配的異常處理被執行,當異常處理執行完畢,程序接著最后一個catch代碼段后的語句執行異常處理的順序影響到異常的處理子類異常可被父類異常處理捕獲不要先捕獲父類異常,再捕獲子類異常如果找不到相應的異常處理非GUI程序結束程序執行;Applet或GUI程序回復到事件處理狀態1176.finally代碼段用于及時釋放系統資源例如關閉文件刪除臨時文件總被執行產生異常時,異常處理完畢后執行無異常產生時,try代碼段執行完畢后執行

break,return,continuetry{

可能產生異常的語句}//不能有其它語句分隔catch(Etypee){

處理異常的語句}……finally{

事后處理語句}1187.throws語句用于方法定義中,表示一個方法可能拋出的異常publicintread()throwsIOException

1198.異常的分類Error:系統的嚴重錯誤,一般由Java虛擬機監測生成并拋出,它們包括動態鏈接失敗、虛擬機錯誤、線程死鎖等,Java程序對它們一般不做處理。Exception:一般性程序故障,一般由用戶代碼或類庫生成并拋出,Java程序需要對它們進行處理。RuntimeException:運行時程序故障,例如被零除、數組下標越界等。這些錯誤可能在任何方法中產生,并且良好的程序應該可以避免這些錯誤。1209.Throwable類的方法Throwable()Throwable(Stringmessage)StringtoString()“classname”:“getMessage()”

StringgetMessage()StringgetLocalizedMessage()voidprintStackTrace()voidprintStackTrace(PrintStream

s)voidprintStackTrace(PrintWriters)ThrowablefillInStackTrace()ThrowableErrorExceptionRuntimeException12177:publicstaticvoidmain(String[]args){78:try{79:testThrowable();80:}81:catch(Throwablet){82:System.err.println(t.toString());83:System.err.println(t.getMessage());84:System.err.println(t.getLocalizedMessage());85:t.printStackTrace();86:}87:}…136:staticvoidtestThrowable()throwsThrowable{137:thrownewThrowable("測試Throwable的用法。");138:}java.lang.Throwable:測試Throwable的用法。測試Throwable的用法。測試Throwable的用法。java.lang.Throwable:測試Throwable

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論