Java 程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩175頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java 程序設(shè)計(jì)基礎(chǔ)第一章 Java的類1.1 有關(guān)面向?qū)ο蟮母拍?.2 Java語(yǔ)言的特點(diǎn)1.3 Java的開發(fā)環(huán)境1.4 第一個(gè)Java程序1.5 Java類型系統(tǒng)1.6 Java中字符串的類1.7 Java中的類、方法和變量1.8 Java名空間及訪問(wèn)規(guī)則1.9 Java中的抽象類、接口和程序包1.10 對(duì)象的構(gòu)造函數(shù)1.1 有關(guān)面向?qū)ο蟮母拍頾面向?qū)ο蟪绦蛟O(shè)計(jì)圍繞的幾個(gè)主要概念:抽象數(shù)據(jù)類型、封裝,繼承性、多態(tài)性。1.1 有關(guān)面向?qū)ο蟮母拍頲lass Car int color_number; int door_number; int speed; void brake() void

2、 speedUp() ; void slowDown() 計(jì)算機(jī)中的對(duì)象的原型 現(xiàn)實(shí)生活中的對(duì)象抽象抽象數(shù)據(jù)類型數(shù)據(jù)類型1.1 有關(guān)面向?qū)ο蟮母拍頾 什么是類?類是描述對(duì)象的“基本原型”,它定義一種對(duì)象所能擁有的數(shù)據(jù)和能完成的操作,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類是程序的基本單元。variablesmethods 程序中的對(duì)象程序中的對(duì)象 是類的是類的一個(gè)實(shí)例,是一個(gè)軟件單一個(gè)實(shí)例,是一個(gè)軟件單元,它由一組結(jié)構(gòu)化的數(shù)元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)據(jù)和在其上的一組操作構(gòu)成成。1.1 有關(guān)面向?qū)ο蟮母拍頾 屬性:即指對(duì)象的所知道的狀態(tài)o 方法:指對(duì)象的功能單元。o 什么是消息?消息是面向?qū)?/p>

3、象系統(tǒng)中實(shí)現(xiàn)對(duì)象間的通信和請(qǐng)求任務(wù)的操作o 軟件對(duì)象通過(guò)相互間傳遞消息來(lái)相互作用和通信n 一個(gè)消息由三部分組成:1. 接受消息的對(duì)象2. 要完成方法的名字3. 方法需要的參數(shù)對(duì)象對(duì)象B對(duì)象對(duì)象 Amessage1.1 有關(guān)面向?qū)ο蟮母拍頾 一個(gè)例子o 在程序中操作的是類的一個(gè)實(shí)例:即對(duì)象o 創(chuàng)建一個(gè)對(duì)象 Hello obj=new Hello();o 調(diào)用方法 obj.showString(“Hello World!”)class Hello private String s;public void showString (String s) System.out.println(s);1.1

4、 有關(guān)面向?qū)ο蟮母拍頾 什么是封裝?封裝把對(duì)象的所有組成部分組合在一起,封裝定義程序如何引用對(duì)象的數(shù)據(jù),封裝實(shí)際上使用方法將類的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類的數(shù)據(jù)的修改和訪問(wèn)程度。私有數(shù)據(jù)私有數(shù)據(jù) 方法方法 方法方法數(shù)據(jù)數(shù)據(jù)對(duì)象對(duì)象A對(duì)象對(duì)象B公有數(shù)據(jù)公有數(shù)據(jù)1.1 有關(guān)面向?qū)ο蟮母拍頾 什么是子類?子類是作為另一個(gè)類的擴(kuò)充或修正所定義的一個(gè)類.bicycle(super class)Mountain bikesRacing bikesTandem bikessub class1.1 有關(guān)面向?qū)ο蟮母拍?什么是繼承?繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.class Car

5、 int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() class BenzBenz_Car extends Car double amount; play_DVD() 1.1 有關(guān)面向?qū)ο蟮母拍頾 什么是方法的覆蓋?在子類中重新定義父類中已有的方法。class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil() class Benz_Car extend

6、s Car double amount; play_DVD() push_break() speed=speed-10; 1.1 有關(guān)面向?qū)ο蟮母拍頾 什么是方法的重載(多態(tài)性)?在同一個(gè)類中至少有兩個(gè)方法用同一個(gè)名字,但有不同的參數(shù)。類類void show(int int_num)void show(double double_num)void show(int int_num, float float_num)1231.23123,1.231.2 Java語(yǔ)言的特點(diǎn)o Java是什么? Java=“C+” - “復(fù)雜性和奇異性”+“安全性和可移植性”o Java有哪些特性?(1) 面向?qū)ο?/p>

7、(2) 操作平臺(tái)無(wú)關(guān)性嚴(yán)格的語(yǔ)言定義:“沒(méi)有依據(jù)機(jī)器的不同而不同” 或“由編譯器決定”等字眼,最后的目標(biāo)碼都是一致的,初值都是確定的。 Write Once ,Run Anywhere!1.2 Java語(yǔ)言的特點(diǎn)o 兩種工作模式的比較源源程程序序Java編譯器編譯器SPARCPentiumPowerpc中間碼中間碼PowerpcPentiumSPARC二進(jìn)制二進(jìn)制源源程程序序SPARCPowerpcPentiumPowerpcPentiumSPARC編譯器編譯器二進(jìn)制二進(jìn)制Java解釋器解釋器(JVM)1.2 Java語(yǔ)言的特點(diǎn)編譯編譯,沒(méi)有絕對(duì)地址沒(méi)有絕對(duì)地址調(diào)入包含調(diào)入包含,繼承所用繼承所

8、用到的所有類到的所有類, 內(nèi)存分內(nèi)存分配確定配確定Java源程序源程序(.java文件文件)Java編譯器編譯器Java Bytecode(.class文件文件)系統(tǒng)執(zhí)行平臺(tái)系統(tǒng)執(zhí)行平臺(tái)Bytecode 解釋器解釋器Bytecode 載入器載入器字節(jié)碼校驗(yàn)器字節(jié)碼校驗(yàn)器不存在偽造的指針不存在偽造的指針不違反訪問(wèn)權(quán)限不違反訪問(wèn)權(quán)限不非法訪問(wèn)對(duì)象不非法訪問(wèn)對(duì)象不導(dǎo)致操作棧溢出不導(dǎo)致操作棧溢出 1.2 Java語(yǔ)言的特點(diǎn)o Java虛擬機(jī)JavainterpreterJust-in-timecompilerRuntime SystemOperating SystemHardwarel不同的操作系統(tǒng)有

9、不同的虛擬機(jī)不同的操作系統(tǒng)有不同的虛擬機(jī).l它類似一個(gè)小巧而高效的它類似一個(gè)小巧而高效的CPU.lbyte-code代碼是與平臺(tái)無(wú)關(guān)的代碼是與平臺(tái)無(wú)關(guān)的 是虛擬機(jī)的機(jī)器指令是虛擬機(jī)的機(jī)器指令.lJava字節(jié)代碼運(yùn)行的兩種方式字節(jié)代碼運(yùn)行的兩種方式: interpreter(解釋方式) Just-in-time(即時(shí)編譯):有代碼 生成器將字節(jié)代碼轉(zhuǎn)換成本機(jī) 的機(jī)器代碼,然后可以以較高速 度執(zhí)行. 1.2 Java語(yǔ)言的特點(diǎn)o安全問(wèn)題nJava是在網(wǎng)絡(luò)環(huán)境下使用的語(yǔ)言n一個(gè)安全的網(wǎng)絡(luò)至少要防止以下幾種破壞的可能性:o毀滅系統(tǒng)資源o消耗系統(tǒng)資源o挖掘系統(tǒng)或個(gè)人機(jī)密o騷擾正常工作的進(jìn)行1.2 Jav

10、a語(yǔ)言的特點(diǎn)Java源程序源程序(.java文件文件)Java編譯器編譯器Java Bytecode(.class文件文件)Bytecode 載入器載入器Bytecode 解釋器解釋器系統(tǒng)執(zhí)行平臺(tái)系統(tǒng)執(zhí)行平臺(tái)語(yǔ)言定義語(yǔ)言定義publicprotectedprivatefinal取消指針取消指針自動(dòng)回收自動(dòng)回收垃圾垃圾Bytecode檢查檢查限定對(duì)象的限定對(duì)象的存取權(quán)限存取權(quán)限系統(tǒng)堆棧溢出系統(tǒng)堆棧溢出參數(shù)類型一致參數(shù)類型一致程序執(zhí)行系統(tǒng)程序執(zhí)行系統(tǒng)WWW瀏覽器瀏覽器限制限制Java小應(yīng)用程序小應(yīng)用程序的不正當(dāng)使用的不正當(dāng)使用1.2 Java語(yǔ)言的特點(diǎn)o多線程n Java提供現(xiàn)成的類Thread,

11、只要繼承這個(gè)類就可以編寫多線程的程序。oJava與C及C+的區(qū)別n 不再有#include 和#define 等于處理功能n 不再有structure,union及typedefn 不再有函數(shù)、不再有指針、不再有多重繼承n 不再有g(shù)oton 不再有操作符重載(Operatior Overloading)n 取消自動(dòng)類型轉(zhuǎn)換,要求強(qiáng)制轉(zhuǎn)換1.3 Java的開發(fā)環(huán)境oJava開發(fā)環(huán)境 JDKnJDK中有Java編譯器和bytecode解釋器Appletviewer是小應(yīng)用程序的bytecode解釋器oJBuilderoWSADWebSphere Application Dev.oEclipse1.

12、3 Java的開發(fā)環(huán)境產(chǎn)生如下目錄結(jié)構(gòu)javabin的目錄下包含義下主要文件:javac:Java編譯器, 用來(lái)將java程序編譯成Bytecodejava:Java編譯器,執(zhí)行已經(jīng)轉(zhuǎn)換成Bytecode的java應(yīng)用程序.jdb: Java調(diào)試器, 用來(lái)調(diào)試java程序javap: 反編譯,將類文件還原回方法和變量.javadoc:文檔生成器,創(chuàng)建HTML文件appletviwer : Java解釋器, 用來(lái)解釋已經(jīng)轉(zhuǎn)換成Bytecode的java小 應(yīng)用程序.1.3 Java的開發(fā)環(huán)境ojavalib子目錄n庫(kù)函數(shù),其中classes.zip不要解開.o在系統(tǒng)環(huán)境變量中增加下面兩個(gè)參數(shù)1.

13、 PATH c:javabin2. SET CLASSPATH=. ; c:.libclasses.zip; c:myclasses;1.3 Java的開發(fā)環(huán)境C:javabinlibclasses.zipjavacjavaappletviewer用戶類文件用戶類文件所在目錄所在目錄myclasses當(dāng)前目錄當(dāng)前目錄1.4 第一個(gè)Java程序o 編輯存盤:主類名(含有main方法)和 文件名要一致性 HelloWorldApp.javao 編譯程序 : javac HelloWorldApp.javao 運(yùn)行程序 : java HelloWorldApp “myjava”o 運(yùn)行結(jié)果 : Hi

14、, myjavaclass HelloWorldApp public static void main(String args) System.out.println(“Hi, ”+args0); Java應(yīng)用程序應(yīng)用程序1.4 你的第一個(gè)Java程序1. 聲明一個(gè)類 : public class HelloWorldApp , 類名的第一個(gè)字母要大寫2. 一個(gè)類中可有很多方法, main方法是運(yùn)行程序的第一個(gè)方法,方法名的第一個(gè)字母要小寫.3. System.out.println是向屏幕輸出,相當(dāng)于C中的printf();public class HelloWorldApp public

15、static void main(String args) System.out.println(“Hi, ”+args0); 1.4 你的第一個(gè)Java程序4. 命令行參數(shù)的獲取 c:java HelloWorldApp myjava!6. 字符串的拼接public class HelloWorldApp public static void main(String args) System.out.println(“Hi, ”+args0); 1.5 Java類型系統(tǒng)和控制流程Java type systemprimitivereferencenullcharnumericbooleanc

16、lassinterface arrayintegralfloating-pointbyteshortintlongfloatdouble1.5 Java類型系統(tǒng)和控制流程o byte 8 位 -128127o short 16位 -3276832767o int 32 位 -21474836482147483647o long 64位 -9223372036854775808 9223372036854775807o float 32位 (+/-)3.40282347E+38 (+/-)1.40239846E-45o double 64位 (+/-)1.79769313486231570E+3

17、08 (+/-)4.94065645841246544E-324o char 16位 Unicode字符集 u0000o boolean true/false1.5 Java類型系統(tǒng)o在Java中”引用“是指向一個(gè)對(duì)象在內(nèi)存中的位置,在本質(zhì)上是一種帶有很強(qiáng)的完整性和安全性限制的指針.o當(dāng)你聲明某個(gè)類,接口或數(shù)組類型的一個(gè)變量時(shí),那個(gè)變量的值總是某個(gè)對(duì)象的引用或者是null引用.o指針就是簡(jiǎn)單的地址而已,引用除了表示地址而外,還象被引用的數(shù)據(jù)對(duì)象的縮影,還提供其他信息.o指針可以有+,-運(yùn)算,引用不可以運(yùn)算.1.5 Java類型系統(tǒng)和控制流程s1s210001s2=s1;a string1000

18、1class Mydate int year; int month; int day; Mydate today=new MyDate()00010008todays1=“a string”; 例例: String s1;String s2;1.5 Java類型系統(tǒng)和控制流程o能夠動(dòng)態(tài)取得的內(nèi)存有兩種,一種是對(duì)象實(shí)體,一種數(shù)組.oJava用new申請(qǐng)內(nèi)存,不需要自己釋放不用的內(nèi)存.o在Java中,定義數(shù)組時(shí)不必給出數(shù)組的大小,因?yàn)镴ava的數(shù)組是動(dòng)態(tài)分配的。o數(shù)組變量實(shí)際上是一個(gè)引用變量,因此要實(shí)例化才能使用。o例:int Array; Array=new int8;1.5 Java類型系統(tǒng)和

19、控制流程o 例:String arrayOfString=new String10;每個(gè)數(shù)組元素包含一個(gè)對(duì)字符串對(duì)象的引用,此時(shí)只分配了包含字符串引用的空間,并沒(méi)有對(duì)字符串本身分配內(nèi)存,此時(shí)不能訪問(wèn)。arrayOfStringfor(int i=0;i,=,=,=,!=n 邏輯運(yùn)算符 &,|,!,&,|n 賦值運(yùn)算符 n 條件運(yùn)算符 ? :n 位運(yùn)算符 &,|,n 其它運(yùn)算符o (),(參數(shù)表),(類型), . ,. ,instanceof,new,+1.5 Java類型系統(tǒng)和控制流程o 表達(dá)式n賦值語(yǔ)句n自加減o 程序塊n由把變量和語(yǔ)句組合在一起n不由“;” 結(jié)尾o

20、分支語(yǔ)句nifelse,switcho 循環(huán)語(yǔ)句nwhile,do-while,foro 跳轉(zhuǎn)語(yǔ)句nbreak,continue1.6 Java中的字符串o Java中的字符串類StringString和和StringBufferStringBuffero String 類的定義和實(shí)例的生成例例: String : String strstr; ; strstr=“this is a string”=“this is a string”或或: String str1=new String(“hello”);: String str1=new String(“hello”);或或: String

21、 str2=“: String str2=“aaaaaaaa”;”;o String類與其它類型的轉(zhuǎn)換例例1:1:將實(shí)型數(shù)轉(zhuǎn)換成字符串將實(shí)型數(shù)轉(zhuǎn)換成字符串System.out.println(String.valueOf(Math.PISystem.out.println(String.valueOf(Math.PI););1.6 Java中的字符串o 有兩個(gè)字符串str1,str2str1=str2; 是指兩個(gè)引用指向同一個(gè)地址o str1.equals(str2)是指兩個(gè)字符串內(nèi)容相等o 獲取String對(duì)象的信息例如:String s=“this is a string”; int le

22、n=s.length(); boolean result=s.equal(“this is a test”); char ch=s.charAt(6);1.6 Java中的字符串o StringBuffer的字符串的內(nèi)容是可以改變的o 創(chuàng)建StringBuffer對(duì)象o StringBuffer str=new Stringbuffer(“hello”);o 獲取StringBuffer對(duì)象的信息o int len=str.length();例例:StringBuffer sb=new StringBuffer(“Drink Java!”); sb.insert(6,”Hot ”); Syst

23、em.out.println(sb.toString(); Drink Hot Java!System.out.println接受的是接受的是String類類1.7 Java中的類、方法和變量 試用一個(gè)簡(jiǎn)單的類試用一個(gè)簡(jiǎn)單的類class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is :”+car_number); class CarDemo public static void main(Stri

24、ng args) Car Democar=new Car(); DemoCar.set_number(3838); DemoCar.show_number(); My car number is 38381.7 Java中的類、方法和變量o 類的繼承關(guān)系class Car int car_number; void set_number(int car_num) car_number=car_num; void show_number() System.out.println (“My car No. is :”+car_number); class TrashCar extends Car i

25、nt capacity; void set_capacity(int trash_car_capacity) capacity=trash_car_capacity; void show_capacity(); System.out.println(“My capacity is: ”+ capacity);1.7 Java中的類、方法和變量oTrashCar中繼承了Car中的兩個(gè)方法class CarDemo public static void main(String args) TrashCar DemoTrashCar=new TrashCar(); DemoTrashCar.set_

26、number(4949); DemoTrashCar.set_capacity(20); DemoTrashCar.show_number(); DemoTrashCar.show_capacity(); Car是父類是父類, TrashCar是子類是子類1.7 Java中的類、方法和變量o何時(shí)選擇繼承性?一個(gè)很好的經(jīng)驗(yàn): “B是一個(gè)A嗎?”如果是則讓B做A的子類.常犯的錯(cuò)誤常犯的錯(cuò)誤A有一個(gè)有一個(gè)B嗎嗎? 例如讓汽例如讓汽車輪子成為汽車的子類是錯(cuò)誤的車輪子成為汽車的子類是錯(cuò)誤的1.7 Java中的類、方法和變量o類的嚴(yán)格定義及修飾字類的修飾字類的修飾字 class 類名稱類名稱 extend

27、s 父類名稱父類名稱 . public, abstract, final或者沒(méi)有或者沒(méi)有變量修飾字變量修飾字 變量數(shù)據(jù)類型變量數(shù)據(jù)類型 變量名變量名1,變量名變量名2=變量初值變量初值;方法修飾字方法修飾字 方法的返回值類型方法的返回值類型 方法名稱方法名稱(參數(shù)參數(shù)1,參數(shù)參數(shù)2, /方法的內(nèi)容方法的內(nèi)容方法和變量的定義及修飾字方法和變量的定義及修飾字public、protected、private1.8 Java名空間及訪問(wèn)規(guī)則o每個(gè)類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。oabstract類不能直接產(chǎn)生屬于這個(gè)類的對(duì)象ofinal類不能被其他任何類所繼承(安

28、全的考慮)opublic類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用.ofriendly(缺省)類只能被本包中的其它類使用1.8 Java名空間及訪問(wèn)規(guī)則o變量和方法的修飾字public、protected、privateopublic: 任何其它類、對(duì)象只要可以看到這個(gè)類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。class ABC public int pub_i=5; public void show)() System.out.println (“pub_i”+pub_i);1.8 Java名空間及訪問(wèn)規(guī)則class Demo public static void

29、 main(String args) ABC abc=new ABC(); System.out.println(“abc.pub_i”+abc.pub_i); abc.pub_i=10; abc.show(); abc.pub_i=5pub_i=10;1.8 Java名空間及訪問(wèn)規(guī)則oprotected變量和方法o如果一個(gè)類中變量或方法有修飾字protected,同一類,同一包可以使用。不同包的類要使用,必須是該類的子類可以存取變量或調(diào)用public class ABC protected int pro_i=5; protected void show() System.out.print

30、ln (“pro_i=” +pro_i;) 1.8 Java名空間及訪問(wèn)規(guī)則o不同包中的類不能使用class DEF public static void main(String args) ABC abc=new ABC(); System.out.println (“_i=“+_i); abc.pub_i=10; abc.show(); import mytest.pack.ABC;class DEF extends ABC public static void main(String agrs) DEF def=new DEF(); System.out.pr

31、intln(def.i); def.i=10; def.show(); pro_i=5pro_i=101.8 Java名空間及訪問(wèn)規(guī)則o不同包但是是子類1.8 Java名空間及訪問(wèn)規(guī)則oprivate不允許任何其他類存取和調(diào)用ofriendly(前邊沒(méi)有修飾字的情況)在同一程序包中出現(xiàn)的類才可以直接使用它的數(shù)據(jù)和方法.1.8 Java名空間及訪問(wèn)規(guī)則o當(dāng)子類中的變量名與父類的相同,原來(lái)的變量被遮蓋.class A int data_a=3;class B extends A int data_a=5;class C extends B void print_out() System.out.p

32、rintln(“data_a= ”+data_a); System.out.println(“A.data_a= ”+A.data_a); System.out.println(“B.data_a= ”+B.data_a); data_a=5A.data_a=3B.data_a=5class demo public static void main(String args) C c=new C(); c.println_out(); 1.8 Java名空間及訪問(wèn)規(guī)則o方法的覆蓋(overriding)和重載(overloading)o子孫類中定義的方法和祖先類中某個(gè)方法同名,同參數(shù)行,則祖先類

33、中的該方法被覆蓋.o方法的重載是指一個(gè)對(duì)象的多態(tài)性,即多個(gè)方法用相同的名稱,但參數(shù)行不同.類類void show(int int_num)void show(double double_num)void show(int int_ um, float float_um)1231.23123,1.231.8 Java名空間及訪問(wèn)規(guī)則o到此為止-finalofinal在方法之前,防止該方法被覆蓋.ofinal在類之前,標(biāo)是該類不能被繼承ofinal在變量之前,定義一個(gè)常量.o屬于類的變量和方法-staticostatic 在變量或方法之前, 表明它們是屬于類的,class ABCD char da

34、ta; static int_share_data; class Demo ABCD a,b,c,dobject bchar dataobject cchar dataObject bchar datastatic intshare_dataobject bchar data1.8 Java名空間及訪問(wèn)規(guī)則o靜態(tài)變量在各實(shí)例間共享o如果是public靜態(tài)變量,則其它類可以不通過(guò)實(shí)例化訪問(wèn)它們o靜態(tài)方法稱為類的方法,因此不用實(shí)例化即可調(diào)用(面向過(guò)程)o一個(gè)對(duì)象的方法可以訪問(wèn)對(duì)象的數(shù)據(jù)成員,盡管不屬于方法的局部變量o一個(gè)類的方法只能訪問(wèn)自己的局部變量1.8 Java名空間及訪問(wèn)規(guī)則o例:不正確的引

35、用class StaticError String mystring=“hello”; public static void main(String args) System.out.println(mystring);o錯(cuò)誤信息:cant make a static reference to nonstatic variable.o為什么不正確? 只有對(duì)象的方法可以訪問(wèn)對(duì)象的變量.1.8 Java名空間及訪問(wèn)規(guī)則o解決的辦法:1. 將變量改稱類變量class StaticError static String mystring=“hello”; public static void main

36、(String args) System.out.println(mystring);1.8 Java名空間及訪問(wèn)規(guī)則2. 先創(chuàng)建一個(gè)類的實(shí)例class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); 1.9 Java中的抽象類、接口和程序包o抽象類是指不能直接被實(shí)例化的類,因此一般作為其它類的超類,與final類正好相反o抽象類中的抽象的方法-在該類中定義但不在該類中提供實(shí)現(xiàn),由繼承類提供細(xì)節(jié)public abstract cla

37、ss SomeAbstractClass void method1() System.out.println(“Hi, Java”); void method2();o定義抽象方法的類必須是抽象類.1.9 Java中的抽象類、接口和程序包o 利用接口可實(shí)現(xiàn)多重 繼承(可同時(shí)實(shí)現(xiàn)多個(gè)接口)o 接口的作用和抽象類 類似,指定原型,不直 接定義方法的內(nèi)容.o 關(guān)鍵字implement用 來(lái)實(shí)現(xiàn)方法,即在使用時(shí)要用給出方法的實(shí)際內(nèi)容o 接口中的方法和變量是public的interface Stack void push(object x); object pop();class A extends A

38、pplet implements Stack void push(object x) ;/具體內(nèi)容具體內(nèi)容 object pop() ;/具體內(nèi)容具體內(nèi)容 1.10 對(duì)象的構(gòu)造函數(shù)o使用new來(lái)做內(nèi)存配置class Demo1 /數(shù)組的配置數(shù)組的配置 public static void main(String args) int array; array=new int55; array14=5; class myClass /對(duì)象實(shí)體的產(chǎn)生對(duì)象實(shí)體的產(chǎn)生 int data=5;class Demo2 public static void main(String args) myClass

39、obj;/建立一個(gè)引用建立一個(gè)引用 obj=new myClass(); System.out.println(obj.data); 1.10 對(duì)象的構(gòu)造函數(shù)oConstructor和finalizeroconstructor(構(gòu)造函數(shù)),在一個(gè)類中和類同名的方法叫構(gòu)造函數(shù).系統(tǒng)在產(chǎn)生對(duì)象時(shí)會(huì)自動(dòng)執(zhí)行.class Point int x,y; Point() x =0;y=0; Point(int new_x,int new_y) x=new_x,y=new_y; class UsePoint Point point_A=new Point(); Point point_B=new Point

40、(5,7);1.10 對(duì)象的構(gòu)造函數(shù)othisnthis指自己這個(gè)對(duì)象nthis的作用是要將自己這個(gè)對(duì)象當(dāng)作參數(shù),傳送給別的對(duì)象中的方法.class ThisClass public static void main() Bank bank=new Bank(); bank.someMethod(this); class Circle int r; Circle(int r) this.r=r; public area() return r*r*3;osuper指這個(gè)對(duì)象的父類super用來(lái)引用父類中的方法及變量數(shù)據(jù).public class apple extends fruits publ

41、ic apple(int price) super(price); o以上句子表示使用超類的構(gòu)造函數(shù)生成實(shí)例osuper必須是子類構(gòu)造器的第一條語(yǔ)句1.10 對(duì)象的構(gòu)造函數(shù)小結(jié)o一個(gè)Java程序(包括小應(yīng)用程序)由若干個(gè)類組成,它們分布在由CLASSPATH指定的一個(gè)目錄中o一個(gè)Java程序中只能由一個(gè)主類,并且與文件同名.o目錄樹中每個(gè)子目錄中的類的集合對(duì)應(yīng)Java一個(gè)包(package),子目錄的層次與包的記法的層次對(duì)應(yīng)小結(jié)o名空間及訪問(wèn)規(guī)則o-package,class/object,member,局部變量o-public ,private,protected,default成員的可視性

42、描述成員的可視性描述public protected 缺省缺省 privateyesyesyesyesyesyesyesyesnoyes*nonoyesnonono同一類中同一類中同一包中同一包中不同包的不同包的子類中子類中非子類非子類也不同包也不同包小結(jié)o對(duì)象模型o-Java的類和對(duì)象(一般,抽象,接口)o-繼承機(jī)制(單繼承,多實(shí)現(xiàn))ostatic, import, final的含義和作用 小結(jié)o避免在類中使用太多的基本類型nprivate String senderName;nprivate String senderStreet;nprivate String senderCity;np

43、rivate String senderState;nprivate String senderZip;nprivate String receiverName;nprivate String receiverStreet;nprivate String receiverCity;nprivate String receiverState;nprivate String receiverZip;address senderaddress receiver第二章 異常o2.1 異常的概念o2.2 異常的分類o2.3 捕獲異常o2.4 聲明異常o2.5 拋出異常o2.6 創(chuàng)造自己的異常o2.7 小

44、結(jié)2.1 異常的概念o什么是異常? 異常實(shí)際上是程序中錯(cuò)誤導(dǎo)致中斷了正常的指令流的一種事件.o沒(méi)有處理錯(cuò)誤的程序: read-file openTheFile; determine its size; allocate that much memory; closeTheFile; 2.1 異常的概念p以常規(guī)方法處理錯(cuò)誤 openFiles; if (theFilesOpen) determine the lenth of the file; if (gotTheFileLength) allocate that much memory; if (gotEnoughMemory) read t

45、he file into memory; if (readFailed) errorCode=-1; else errorCode=-2; else errorCode=-3; else errorCode=-4 ; else errorCode=-5; 2.1 異常的概念o觀察前面的程序你會(huì)發(fā)現(xiàn)大部分精力花在出錯(cuò)處理上了.o只把能夠想到的錯(cuò)誤考慮到,對(duì)以外的情況無(wú)法處理o程序可讀性差o出錯(cuò)返回信息量太少2.1 異常的概念用異常的形式處理錯(cuò)誤read-File; try openTheFile; determine its size; allocate that much memory; cl

46、oseTheFile; ; catch(fileopenFailed) dosomething; catch(sizeDetermineFailed) dosomething; catch(memoryAllocateFailed) dosomething; catch(readFailed) dosomething; catch(fileCloseFailed) dosomething; 2.1 異常的概念o和傳統(tǒng)的方法比較異常的優(yōu)點(diǎn):1.把錯(cuò)誤代碼從常規(guī)代碼中分離出來(lái)2. 把錯(cuò)誤傳播給調(diào) 用堆棧3. 按錯(cuò)誤類型和 錯(cuò)誤差別分組4. 系統(tǒng)提供了對(duì)于一些無(wú)法預(yù)測(cè)的錯(cuò)誤的捕獲和處理5. 克服了傳

47、統(tǒng)方法的錯(cuò)誤信息有限的問(wèn)題method1method2method3method4產(chǎn)生異常傳 遞處理異常2.1 異常的概念class ExcepTest public void main(String args) int b=0; int a; try a=4/b; catch(ArithmeticException e) System.out.println(“divided by 0”); try URL url=new URL(http:/ e) badURL=true; repaint();2.2 異常的分類o異常是一個(gè)對(duì)象,它繼承自Throwable類,所有的Throwable類的子

48、孫類所產(chǎn)生的對(duì)象都是例外.oError:由Java虛擬機(jī)生成并拋出,Java程序不做處理.oRuntime Exception(被0除等系統(tǒng)錯(cuò)誤,數(shù)組下標(biāo)超范圍):由系統(tǒng)檢測(cè), 用戶的Java 程序可不做處理,系統(tǒng)將它們交給缺省的異常處理程序.oException(程序中的問(wèn)題,可預(yù)知的): Java編譯器要求Java程序必須捕獲或聲明所有的非運(yùn)行時(shí)異常othrow:用戶自己產(chǎn)生異常2.2 異常的分類ThrowableErrorExceptionExceptionRuntimeException缺省的異常缺省的異常處理程序處理程序由用戶捕獲或由用戶捕獲或聲明并處理聲明并處理不做處理不做處理用戶

49、自己產(chǎn)生的異常用戶自己產(chǎn)生的異常要處理要處理2.3 捕獲異常o捕獲并處理異常try /接受監(jiān)視的程序塊,在此區(qū)域內(nèi)發(fā)生 /的異常,由catch中指定的程序處理;catch(要處理的異常種類和標(biāo)識(shí)符) /處理異常;catch(要處理的異常種類和標(biāo)識(shí)符) /處理異常;2.3 捕獲異常o常見的異常n ArithmeticExceptionn ArrayIndexOutOfBandsExceptionn IOExceptionn FileNotFoundExceptionn NullPointerExceptionn NumberFormatExceptionn OutOfMemoryExceptio

50、n如果在使用能夠如果在使用能夠產(chǎn)生異常的方法產(chǎn)生異常的方法而沒(méi)有捕獲和處而沒(méi)有捕獲和處理,將不能通過(guò)理,將不能通過(guò)編譯編譯2.3 捕獲異常o例:編寫Java程序,包含三種異常算術(shù)異常, 字符串越界,數(shù)組越界o觀察輸出信息:每個(gè)異常對(duì)象可以直接給出信息2.3 捕獲異常class first_exceptionpublic static void main(String args) char c; int a,b=0;int array=new int7; String s=Hello; try a=1/b;catch(ArithmeticException ae) System.out.prin

51、tln(“Catch “+ae);try array8=0; catch(ArrayIndexOutOfBoundsException ai) System.out.println(“Catch “+ai);try c=s.charAt(8);catch(StringIndexOutOfBoundsException se) System.out.println(“Catch “+se);2.3 捕獲異常l一定會(huì)執(zhí)行的程序塊-finally異常處理的統(tǒng)一出口try /常規(guī)的代碼;catch() /處理異常 finally /不論發(fā)生什么異常(或者不發(fā)生任何異常),都要執(zhí)行的部分;2.3 捕獲異

52、常ofinally在文件處理時(shí)非常有用try 對(duì)文件進(jìn)行處理的程序;catch(IOException e) /對(duì)文件異常進(jìn)行處理;finally 不論是否發(fā)生異常,都關(guān)閉文件;2.4 聲明異常o一個(gè)方法不處理它產(chǎn)生的異常,而是沿著調(diào)用層次向上傳遞,由調(diào)用它的方法來(lái)處理這些異常,叫聲明異常.o聲明異常的方法o在產(chǎn)生異常的方法名后面加上要拋出(throws)的異常的列表void compute(int x)throws ArithmeticException returnType methodName(parameterlist) throws exceptionList2.4 聲明異常例:若因

53、某種原因不想在計(jì)算的方法中處理異常public method1() int x; try x=System.in.read(); compute(x); catch(IOException ioe) System.out.println(“read error”); catch(ArithmeticException e) System.out.println(“devided by 0”); public int compute(int x) throws ArithmeticException e) return z=100/x;2.4 聲明異常method1computer異常異常拋出拋

54、出處理處理2.4 聲明異常例:說(shuō)出程序執(zhí)行結(jié)果public class exception1 void Proc(int sel) throws ArithmeticException, ArrayIndexOutOfBoundsException System.out.println(“In Situation + sel ); if (sel=0) System.out.println(no Exception caught); return; else if(sel=1) int iArray=new int4; iArray10=3; 2.4 聲明異常public static voi

55、d main(String args) try Proc(0); Proc(1); catch(ArrayIndexOutOfBoundsException e) System.out.println(Catch+e); c:jview throwsExceptionc:jview throwsExceptionIn Situation 0In Situation 0no Exception caughtno Exception caughtIn Situation 1In Situation 1Catch Catch java.lang.ArrayIndexOutOfBoundsExcept

56、ion:10java.lang.ArrayIndexOutOfBoundsException:102.5 拋出異常l拋棄異常: 不是出錯(cuò)產(chǎn)生,而是人為地拋出othrow ThrowableObject;othrow new ArithmeticException();o例:編寫程序人為拋出(JavaThrow.prj) ArithmeticException, ArrayIndexOutOfBoundsException StringIndexOutOfBoundsExceptionA methodExceptionAnother methodthrowcaught2.5 拋出異常class

57、JavaThrowpublic static void main(String args)try throw new ArithmeticException();catch(ArithmeticException ae) System.out.println(ae); try throw new ArrayIndexOutOfBoundsException();catch(ArrayIndexOutOfBoundsException ai) System.out.println(ai); try throw new StringIndexOutOfBoundsException();catch

58、(StringIndexOutOfBoundsException si) System.out.println(si); 2.6 創(chuàng)造自己的異常o不是由Java系統(tǒng)監(jiān)測(cè)到的異常(下標(biāo)越界,被0-除等),而是由用戶自己定義的異常.o用戶定義的異常同樣要用try-catch捕獲,但必須由用戶自己拋出 throw new MyException.o異常是一個(gè)類,用戶定義的異常必須繼承自Throwable或Exception類,建議用Exception類.2.6 創(chuàng)造自己的異常o形如:class MyException extends Exception.; o例1 :計(jì)算兩個(gè)數(shù)之和,當(dāng)任意一個(gè)數(shù)超出

59、范圍時(shí),拋出自己的異常public class NumberRangeException extends Exception public NumberRangeException(String msg) super(msg); 2.6 創(chuàng)造自己的異常public boolean action(Event evt, Object arg)public boolean action(Event evt, Object arg) try try int answer = CalcAnswer(); int answer = CalcAnswer(); answerStr = String.valu

60、eOf(answer); answerStr = String.valueOf(answer); catch (NumberRangeException e) catch (NumberRangeException e) answerStr = e.getMessage(); answerStr = e.getMessage(); repaint(); repaint(); return true; return true; 2.6 創(chuàng)造自己的異常public int CalcAnswer() public int CalcAnswer() throws NumberRangeExceptionthrows Num

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論