產(chǎn)品庫存管理系統(tǒng)的對象設(shè)計(共145頁).ppt_第1頁
產(chǎn)品庫存管理系統(tǒng)的對象設(shè)計(共145頁).ppt_第2頁
產(chǎn)品庫存管理系統(tǒng)的對象設(shè)計(共145頁).ppt_第3頁
產(chǎn)品庫存管理系統(tǒng)的對象設(shè)計(共145頁).ppt_第4頁
產(chǎn)品庫存管理系統(tǒng)的對象設(shè)計(共145頁).ppt_第5頁
已閱讀5頁,還剩140頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、威威 海海 職職 業(yè)業(yè) 學(xué)學(xué) 院院情境3 產(chǎn)品庫存管理系統(tǒng)面向?qū)ο笤O(shè)計學(xué)習(xí)情境描述 要求根據(jù)第一個情境的需求分析結(jié)果,學(xué)要求根據(jù)第一個情境的需求分析結(jié)果,學(xué)生成立工程開發(fā)小組,劃分角色,推選工程經(jīng)生成立工程開發(fā)小組,劃分角色,推選工程經(jīng)理和理和CTOCTO首席技術(shù)師,程序員。經(jīng)過討論首席技術(shù)師,程序員。經(jīng)過討論給出產(chǎn)品庫存管理系統(tǒng)中的實體類:入庫單、給出產(chǎn)品庫存管理系統(tǒng)中的實體類:入庫單、出庫單、庫存和用戶類和控制類接口的詳細(xì)設(shè)出庫單、庫存和用戶類和控制類接口的詳細(xì)設(shè)計;利用情境計;利用情境2 2搭建好的環(huán)境,對每個類予以搭建好的環(huán)境,對每個類予以編程實現(xiàn)。編程實現(xiàn)。所需知識q類的定義與對象的

2、創(chuàng)立類的定義與對象的創(chuàng)立q構(gòu)造方法的作用及應(yīng)用構(gòu)造方法的作用及應(yīng)用q面向?qū)ο笕筇卣鳎悍庋b性、繼面向?qū)ο笕筇卣鳎悍庋b性、繼承性和多態(tài)性的承性和多態(tài)性的JavaJava語言實現(xiàn)語言實現(xiàn)q抽象類與接口的應(yīng)用抽象類與接口的應(yīng)用q包的創(chuàng)立與使用包的創(chuàng)立與使用q訪問控制符的應(yīng)用訪問控制符的應(yīng)用q異常處理異常處理重點及難點q構(gòu)造方法的作用及應(yīng)用構(gòu)造方法的作用及應(yīng)用q面向?qū)ο笕筇卣鳎悍庋b性、繼面向?qū)ο笕筇卣鳎悍庋b性、繼承性和多態(tài)性的承性和多態(tài)性的JavaJava語言實現(xiàn)語言實現(xiàn)q抽象類與接口的應(yīng)用抽象類與接口的應(yīng)用q異常處理異常處理能力目標(biāo)q培養(yǎng)學(xué)生面向?qū)ο蟮木幊棠芰培養(yǎng)學(xué)生良好的團隊合作意識及溝通

3、協(xié)調(diào)能力、接收新知識的能力 q培養(yǎng)學(xué)生分析問題、解決問題的能力、創(chuàng)新能力以及邏輯思維能力 任務(wù)一 用Java語言描述現(xiàn)實世界中的Person。p學(xué)生討論確定Person的特征 譬如:name-姓名,age-表示年齡,sex-表示性別等。p確定Person相關(guān)的行為 譬如:吃飯、睡覺等。用Java語言實現(xiàn)Person類復(fù)習(xí)引入面向?qū)ο笈c面向過程的區(qū)別?面向?qū)ο缶幊?面向?qū)ο缶幊淌擒浖O(shè)計與實現(xiàn)的有效方法,它將客觀世界中存在的事物看作對象,每個客觀事物都有自己的特征和行為。 對象的根本概念 變量變量方法方法在現(xiàn)實生活中在計算機程序中客觀世界的實體程序中對象對象具有兩方面的含義考慮從哪些方面描述對象

4、面向?qū)ο蟮母靖拍铑愂浅橄蟮?,對象是具體的q具有相同特征和行為的對象被抽象為類。q類是對象的模板,包括一個對象的所有數(shù)據(jù)和代碼。類的例如類的例如形狀類形狀類動物類動物類汽車類汽車類對象對對 象象面向?qū)ο缶幊痰暮诵臑橛嬎銠C應(yīng)用程序提供實用基礎(chǔ)完成特定任務(wù)表示現(xiàn)實世界中的實體“對象是存在的具體實體,具有明確定義的狀態(tài)和行為。對象是存在的具體實體,具有明確定義的狀態(tài)和行為。對象的例如收銀員對象顧客對象顧客姓名:朱麗葉年齡:28體重:52千克操作:購置商品狀態(tài)狀態(tài)姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單行為行為消息傳遞“消息指一個對象為執(zhí)行某項特定操作而向另一個消息指一個對象

5、為執(zhí)行某項特定操作而向另一個對象發(fā)送的請求對象發(fā)送的請求消息傳遞消息傳遞當(dāng)需要執(zhí)行一項特定操作時,通過向已為其定義此項操作的對象發(fā)送消息來請求對象之間通過傳遞消息實現(xiàn)相互通信類和對象的例如雇員雇員收銀員系統(tǒng)管理員倉庫管理員促銷員采購經(jīng)理面向?qū)ο蠹夹g(shù)的實現(xiàn)對象類實例化抽象計算機世界實體抽象數(shù)據(jù)類型現(xiàn)實世界抽象映射計算機邏輯的實現(xiàn)對象、類和實體的關(guān)系類是創(chuàng)立對象的模板,對象是類的實例類的根本概念 現(xiàn)實生活中的對象class Car int color; int name; int speed; void brake() void speedUp() void slowDown() 抽象數(shù)據(jù)類型程序

6、中的對象映射描述實現(xiàn)類定義類定義中必須要寫類名,應(yīng)該使用Java語言合法的標(biāo)識符來命名類名不能與java中已定義好的類名相同格式格式: 修飾符class 類名 extends 父類名 implements 接口名表 成員變量聲明 方法成員聲明 其中classclass、extendsextends和implementsimplements都是Java的關(guān)鍵字。類的聲類的聲明明類體類中的方法 6-1方法的定義方法的定義方法的名稱參數(shù)列表方法的主體方法返回的對象類型或原始類型方法體 若局部變量與類的成員變量同名,則類的成員變量被隱藏。 方法體是對方法的實現(xiàn),它包括局部變量的聲明以及所有合法的Jav

7、a指令。方法體中聲明的局部變量的作用域在該方法內(nèi)部。類的定義舉例class Car int color; int name; int speed; void brake() void speedUp() void slowDown() 類的實現(xiàn)任務(wù)一實現(xiàn)class PersonString name;int age;String sex;public void eat()System.out.println(Its delicious!); 【實戰(zhàn)】:定義一個名為Rectangle表示長方形的類,它包含double類型的長length和寬width兩個數(shù)據(jù)成員和設(shè)置長方形長寬值的方法setDi

8、m()、計算長方形面積的方法area()。 類的實現(xiàn)對象的創(chuàng)立實例化初始化對象的聲明對象的創(chuàng)建聲明 類名 對象名;聲明并不為對象分配內(nèi)存空間,而只是分配一個引用空間實例化 類名 對象名 = new 類名()例:Person p=new Person(); 運算符new為對象分配內(nèi)存空間,它調(diào)用對象的構(gòu)造方法,返回引用初始化另外執(zhí)行構(gòu)造方法,可進行初始化 當(dāng)一個變量被創(chuàng)立時,會對其中各種類型的成員變量自動按下表進行初始化賦值。對象的使用訪問對象成員的一般形式為: 對象名對象名. .成員變量名成員變量名 對象名對象名. .成員方法名成員方法名()() 運算符.在這里稱為成員運算符創(chuàng)立對象舉例cla

9、ss TestPersonpublic static void main(String args)Person p1=new Person();=Tom;p1.age=12;p1.sex=male;p1.eat(); 按照前面設(shè)計Person類來充當(dāng)生產(chǎn)車間,創(chuàng)立Person對象任務(wù)二 通過構(gòu)造方法,初始化Person類的實例,為其成員變量賦初值。構(gòu)造方法 在Java中,任何變量在被使用前都必須先設(shè)置初值。Java提供了為類的成員變量賦初值的專門功能:構(gòu)造方法。構(gòu)造方法的特點q構(gòu)造方法名與類名相同。q構(gòu)造方法不返回任何值,也沒有返回類型。q每一個類可以有零個或多個重載的構(gòu)造方法。

10、假設(shè)沒有為一個類顯式的定義構(gòu)造方法,那么當(dāng)創(chuàng)立類對象時,編譯器將自動為它創(chuàng)立一個沒有參數(shù)的默認(rèn)構(gòu)造方法. q構(gòu)造方法只能在創(chuàng)立對象時通過new關(guān)鍵字來自動調(diào)用。注意:注意:一旦我們自己定義了構(gòu)造方法,系統(tǒng)將不再為我們提供默認(rèn)的不帶參數(shù)的構(gòu)造方法 。class PersonString name;int age;String sex;public Person(String s1)name = s1;public Person(String s1,int x)name = s1;age = x;任務(wù)二實現(xiàn)public Person(String s1,int x,String s2)name=

11、s1;age = x;sex = s2;public void eat()System.out.println(Its delicious!); class TestPersonpublic static void main(String args)Person p1=new Person(Tom);Person p2=new Person(John,20);Person p3=new Person(Bob,22,male);System.out.println(+p1.age+p1.sex);System.out.println(+p2.age+p2.sex);S

12、ystem.out.println(+p3.age+p3.sex);通過構(gòu)造方法賦初值This引用句柄q構(gòu)造方法的形式參數(shù)與類的成員變量名相同q在構(gòu)造方法中調(diào)用其他重載的構(gòu)造方法,用this(參數(shù)列表)的形式自主學(xué)習(xí)內(nèi)部類的定義和使用。自主學(xué)習(xí)內(nèi)部類的定義和使用。面向?qū)ο蟮母咎卣鞣庋b性、繼承性、多態(tài)性是面向?qū)ο蟮娜齻€主要特性。特征特征描述描述封裝性封裝性通過提供一個或多個公有通過提供一個或多個公有(publicpublic)方法,實現(xiàn)對該類)方法,實現(xiàn)對該類的私有成員變量的訪問和修改的私有成員變量的訪問和修改 繼承性繼承性通過通過extendsextends關(guān)鍵字實現(xiàn)子類繼關(guān)鍵

13、字實現(xiàn)子類繼承父類的所有非私有成員承父類的所有非私有成員 多態(tài)性多態(tài)性通過方法重載和方法重寫通過方法重載和方法重寫 實現(xiàn)實現(xiàn)方法的多態(tài)性方法的多態(tài)性封裝性的引入class PersonString name;int age;String sex;public void eat()System.out.println(Its delicious!); class TestPerson public static void main(String args) Person p1=new Person(); =Tom; p1.age=-12;/非法的值非法的值 p1.sex=male;

14、System.out.println(“p1的年齡的年齡是:是:+p1.age);通過實例啟發(fā)學(xué)生思考為什么引入封裝性?通過實例啟發(fā)學(xué)生思考為什么引入封裝性?封裝性的實現(xiàn)私有數(shù)據(jù)公有方法外部世界所謂封裝,就是信息隱藏所謂封裝,就是信息隱藏, ,隱藏對象的實現(xiàn)細(xì)節(jié),隱藏對象的實現(xiàn)細(xì)節(jié),不讓用戶看到不讓用戶看到封裝的例如 3-1接口 采購經(jīng)理羅杰斯先生法拉力公司.迪斯尼汽車公司.市場經(jīng)理雪莉女士 要求 封裝的例如 3-2有選擇地提供數(shù)據(jù)法拉力公司迪斯尼汽車公司公共電話號碼電子郵箱產(chǎn)品種類私有備件的制造方法備件庫存?zhèn)浼闹圃斐杀竟搽娫捥柎a電子郵箱汽車種類私有汽車的組裝方法汽車庫存汽車的組裝成本封裝

15、的例如 3-3 實體法拉力公司實體迪斯尼汽車公司 Auti Ltd.Buto Ltd.屬性電話號碼電子郵箱產(chǎn)品種類現(xiàn)有存貨數(shù)量雇員詳情所需物料詳情屬性電話號碼電子郵箱汽車種類汽車規(guī)格雇員詳情庫存詳情經(jīng)銷商詳情方法接收訂單備件的制造方法計算備件的制造成本計算利潤率方法發(fā)出訂單汽車的組裝方法計算汽車的組裝成本計算工資發(fā)出訂單編制必要報告設(shè)置器和訪問器方法設(shè)置私有成員變量值的方法稱為設(shè)置器方法,通常為:public void setX (類型 x)this.x=x; 訪問私有成員變量值的方法稱為訪問器方法,通常為:public 類型 getX() return x;封裝舉例class Person

16、private int age; public void setAge(int i)if(i130)return; age = i; public int getAge() return age; 將其設(shè)為私有的方法設(shè)為公有封裝的好處封裝的優(yōu)點可進行數(shù)據(jù)檢查便于修改,增強代碼的可維護性隱藏類的實現(xiàn)細(xì)節(jié)任務(wù)三定義Person類的子類Student類繼承性q類繼承是指一個類可以繼承其他類的非私有成員,實現(xiàn)代碼復(fù)用。q被繼承的類稱為父類,繼承父類后產(chǎn)生的類稱為子類。繼承父父 類類 子類子類 父類父類/ /子類子類是相對的是相對的Cow類Lion類Tiger類類Animals類Carnivorous類

17、Herbivorous類Coat類繼承的實現(xiàn)class SubClass extends SuperClassJava中的繼承是通過extends關(guān)鍵字來實現(xiàn)的。關(guān)鍵字任務(wù)三實現(xiàn)class Student extends Person String school;public void study() System.out.println(Studding); public static void main(String args) Person p=new Person(); =Tom; p.age=30; p.getInfo(); Student s=new Student()

18、; =John; s.age=16; s.school=“清華大學(xué); s.getInfo(); s.study(); 繼承的特點繼承的特點具有層次結(jié)構(gòu)子類繼承了父類的非私有屬性和方法Object是所有類的超類注意注意:在Java語言中,只允許單繼承。繼承的優(yōu)點繼承的優(yōu)點代碼的可重用性父類的屬性和方法可用于子類設(shè)計應(yīng)用程序變得更加簡單可以輕松地自定義子類構(gòu)造方法的繼承構(gòu)造方法不能繼承,但子類在創(chuàng)立對象時要對繼承來自父構(gòu)造方法不能繼承,但子類在創(chuàng)立對象時要對繼承來自父類的成員進行初始化,因此,在創(chuàng)立子類時除了執(zhí)行子類類的成員進行初始化,因此,在創(chuàng)立子類時除了執(zhí)行子類的構(gòu)造方法外,還需要

19、調(diào)用父類的構(gòu)造方法,具體遵循原的構(gòu)造方法外,還需要調(diào)用父類的構(gòu)造方法,具體遵循原那么如下那么如下: : p當(dāng)子類未定義構(gòu)造方法時,創(chuàng)立對象時將無條件地調(diào)用父類的無參構(gòu)造方法; p對于父類的含參數(shù)構(gòu)造方法,子類可以在自己構(gòu)造方法中使用super調(diào)用它,但super調(diào)用語句必須是子類構(gòu)造方法中的第一個可執(zhí)行語句; p子類在自己的構(gòu)造方法中如果沒有用super明確調(diào)用父類的構(gòu)造方法,那么在創(chuàng)立對象時,將自動先執(zhí)行父類的無參構(gòu)造方法,然后再執(zhí)行自己定義的構(gòu)造方法。任務(wù)四 對上例中Student 類繼承了父類的所有非私有方法進行重寫 多態(tài)性 方法重寫實現(xiàn)的方法重寫實現(xiàn)的動態(tài)多態(tài)性動態(tài)多態(tài)性運行時多態(tài)運行

20、時多態(tài) 方法重載實現(xiàn)方法重載實現(xiàn)的靜態(tài)多態(tài)性的靜態(tài)多態(tài)性編譯時多態(tài)編譯時多態(tài) 多態(tài)性方法重寫 方法重寫方法重寫子類和父類的方法具有相同的名稱和類型用子類對象調(diào)用子類中的重寫方法super.methodname() 用于調(diào)用父類中的方法class Rectangle int length; int width; Rectangle(int len , int wid) length = len; width = wid; /* 計算矩形的周長.*/ void getPerimeter() (“矩形的周長為 + (2 * (length + width); 方法重寫class Square ext

21、ends Rectangle Square(int len) length = len; /* 計算周長.*/ void getPerimeter() (“正方形的周長為 + (4 * length); public static void main(String arg) Rectangle rectObj = new Rectangle(10, 15); rectObj.getPerimeter(); Rectangle sqObj= new Square(15); sqObj.getPerimeter(); 調(diào)用父類方法調(diào)用子類方法任務(wù)四實現(xiàn)class Person public Str

22、ing name; public int age; public void getInfo() System.out.println(name); System.out.println(age); public void eat()System.out.println(Its delicious!);class Student extends Person String school; public void study() System.out.println(Studding);System.out.println(Studding); public void getInfo() publ

23、ic void getInfo() System.out.println(name); System.out.println(name); System.out.println(age); System.out.println(age); System.out.println(school); System.out.println(school); public static void main(String public static void main(String args)args) Person p=new Person();Person p=new Person();

24、=Tom;=Tom; p.age=30;p.age=30; p.getInfo();p.getInfo(); Student s=new Student();Student s=new Student(); =John; =John; s.age=16; s.age=16; s.school= s.school=塔山小學(xué)塔山小學(xué); s.getInfo(); s.getInfo(); s.study(); s.study(); 多態(tài)性【實戰(zhàn)】:通過分析,編程實現(xiàn)上圖成員方法覆蓋應(yīng)注意的問題q覆蓋方法的方法名、返回類型和參數(shù)列表必須與它所覆蓋的方法相同q覆蓋方法

25、不能比它所覆蓋的方法訪問性更低q覆蓋方法不能比它所覆蓋的方法拋出更多的異常成員變量的覆蓋 假設(shè)子類聲明了與父類同名的變量,那么父類的變量被隱藏起來,直接使用的是子類的變量,但父類的變量仍占據(jù)空間,可通過super或父類名來訪問。 程序運行結(jié)果:Subclass : 200 Superclass : 100成員變量的覆蓋class Aclass A int x = 100; int x = 100; class B extends Aclass B extends A int x = 200; int x = 200; void print() void print() System.out.p

26、rintln(Subclass:+ x); System.out.println(Subclass:+ x); System.out.println(Superclass:+ System.out.println(Superclass:+ super.x); super.x); public static void main(String args) public static void main(String args) (new B().print(); (new B().print(); 成員變量的覆蓋成員變量的覆蓋類對象之間的類型轉(zhuǎn)換父類對象和子類對象的轉(zhuǎn)換需要注意以下原那么:q子類對

27、象可以被視為是其父類的一個對象,反之那么不可。q假設(shè)一個方法的形式參數(shù)定義的是父類的對象,那么調(diào)用該方法的實際參數(shù)可以使用子類對象。q假設(shè)父類對象引用指向的實際是一個子類對象,那么這個父類對象的引用可以用強制類型轉(zhuǎn)換轉(zhuǎn)化成子類對象的引用。類變量 static 修飾符我們在Person類中增加一個成員變量國籍,并假設(shè)所有的人都來自中國,該如何實現(xiàn)?思考?類變量 country=Chinaname=“John”age=15name=“rose”age=14name=“Tom”age=16static靜態(tài)變量或類變量靜態(tài)變量的訪問:類名.變量名類變量的應(yīng)用class Count public sta

28、tic void main(String args)User u1=new User();u1.login();User u2=new User();u2.login();class Userstatic int count=0;void login()count+;(你是第+count+位訪問者); 類方法 static修飾符static修飾符修飾的方法叫靜態(tài)方法 目的:使方法獨立于類的實例,使用類去訪問類方法 規(guī)規(guī) 則則可以調(diào)用其他靜態(tài)方法必須訪問靜態(tài)數(shù)據(jù)不能使用 super 或 this 關(guān)鍵字調(diào)用靜態(tài)方法的語法為: classname.methodname( );類方法的應(yīng)用publi

29、c class IsPrimepublic static boolean prime(int x)for(int k=2;k=Math.sqrt(x);k+)if(x%k=0)return false;return true;Class TestIsPrimepublic static void main(String args) for(int m=10;m name.indexOf() (“該電子郵件地址有效該電子郵件地址有效); else (“該電子郵件地址無效該電子郵件地址無效); 提取字符串方法方法方法說明說明public char charAt(int index) 此方法用于從指

30、定位置提取單個字符,該位置由索引指定,索引中的值必須為非負(fù)public String substring(int index) 此方法用于提取從位置索引開始的字符串部分public String substring(int beginindex, int endindex) 此方法用于提取 beginindex 和 endindex 位置之間的字符串部分public String concat(String str) 此方法用于連接兩個字符串,并新建一個包含調(diào)用字符串的字符串對象public String replace(char old, char new) 此方法用于將調(diào)用字符串中出現(xiàn)某個

31、字符的所有位置都替換為另一個字符public String trim() 此方法用于返回一個前后不含任何空格的調(diào)用字符串的副本提取字符串方法方法說明說明public char charAt(int index) 此方法用于從指定位置提取單個字符,該位置由索引指定,索引中的值必須為非負(fù)。public String substring(int index) 此方法用于提取從位置索引開始的字符串部分。public String substring(int beginindex, int endindex) 此方法用于提取 beginindex 和 endindex 位置之間的字符串部分。public

32、 String concat(String str) 此方法用于連接兩個字符串,并新建一個包含調(diào)用字符串的 String 對象。public String replace(char old, char new) 此方法用于將調(diào)用字符串中出現(xiàn)某個字符的所有位置都替換為另一個字符。public String trim() 此方法用于返回一個前后不含任何空格的調(diào)用字符串的副本。.char ch;ch = orange.charAt(3); .它將從 index(3) 中提取單個字符串“n并將其存儲在變量 ch 中提取字符串舉例 public class StringMethods public st

33、atic void main(String args) String s = Java is a + platform independent language; String s1 = Hello world ; String s2 = Hello; System.out.println(s); System.out.println(index of t = + s.indexOf(t); System.out.println(last index of t = +s.lastIndexOf(t); System.out.println(index of(t, 10) = +s.indexO

34、f(t, 10); System.out.println(s1.substring(3, 8); System.out.println(s2.concat(World); System.out.println(s2.replace(l, w); System.out.println(s1.trim(); 任務(wù)七實現(xiàn)public class GetFilenameprivate String fullPath;private final char pathSepatator=;public GetFilename(String fname)fullPath=fname;public String

35、 getName()int pos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)return fullPath;elsereturn fullPath.substring(pos+1);public String getPath()int pos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)return fullPath;elsereturn fullPath.substring(0,pos);public static void main(String args)GetFilename fn=ne

36、w GetFilename(F:avamyexamplea.java);System.out.println(fn.getName();System.out.println(fn.getPath();更改字符大小寫方法Hello使用使用 toUpperCase( ) 方法方法HELLOHELLO使用使用 toLowerCase( ) 方法方法hello語法public String toUpperCase();語法Public String toLowerCase();更改字符大小寫方法舉例 public class StringTest public static void main(Str

37、ing args) String name = new String(George); (“姓名是 + name); int length = name.length(); (“姓名的長度為 + length + “ 個字符); (“姓名用大寫形式表示為: ); String nameUppercase = name.toUpperCase(); System.out.println(nameUppercase); 任務(wù)八 判斷一個字符串是否為回文,即將一個字符串進行反轉(zhuǎn),得到的字符串與源串相同:例如原始字符串為“aba, 逆轉(zhuǎn)后的字符串也為“aba。StringBuffer 類構(gòu)造方法構(gòu)造方

38、法說明說明public StringBuffer()保留保留 16 個字符的空間個字符的空間public StringBuffer (int length)設(shè)置緩存器大小設(shè)置緩存器大小publicStringBuffer(Stringvalue)接收字符串參數(shù),用來設(shè)置初始內(nèi)容,接收字符串參數(shù),用來設(shè)置初始內(nèi)容,并在不重新分配的情況下保留并在不重新分配的情況下保留 16 個字符個字符的空間的空間q StringBuffer 用于表示可以修改的字符串q 使用連接運算符 (+) 的字符串會自動創(chuàng)立字符串緩沖對象StringBuffer 類的方法方法方法說明說明StringBuffer insert

39、(String s)在指定位置插入指定的字符串在指定位置插入指定的字符串int length( )確定確定 StringBuffer 對象的長度對象的長度int capacity() 返回當(dāng)前容量返回當(dāng)前容量 void setCharAt(int pos, char ch)使用使用 ch 指定的新值設(shè)置指定的新值設(shè)置 pos 指定的位置上的字符指定的位置上的字符String toString( )轉(zhuǎn)換為字符串形式轉(zhuǎn)換為字符串形式StringBuffer reverse()將此字符序列用其反轉(zhuǎn)形式取代將此字符序列用其反轉(zhuǎn)形式取代 StringBuffer delete(int start, in

40、t end)刪除調(diào)用對象中從刪除調(diào)用對象中從 start 位置開始直到位置開始直到 end 指定的索引指定的索引 1 位置的字符序列位置的字符序列StringBuffer deleteCharAt(int pos)刪除刪除 pos 指定的索引處的字符指定的索引處的字符StringBuffer replace(int start, int end, String s)使用一組字符替換另一組字符。將用替換字符串從使用一組字符替換另一組字符。將用替換字符串從 start 指定的位置開始替換,直到指定的位置開始替換,直到 end 指定的位置結(jié)束指定的位置結(jié)束不變性String類類創(chuàng)立后直接修改直接修改

41、不變性的概念解決方法解決方法StringBuffer 類String 的對等類表示可增加和可編寫字符的可變序列將字符插入到字符串中間或附加到字符串末尾不變性舉例public class StringBuf public static void main(String args) StringBuffer buf = new StringBuffer(Java); buf.append(“ Guide Ver1/); buf.append(3); int index = 5; buf.insert(index, Student ); index = 23; buf.setCharAt(index

42、, .); int start = 24; int end = 25; buf.replace(start, end, 4); String s = buf.toString(); /轉(zhuǎn)換為字符串轉(zhuǎn)換為字符串 System.out.println(s); 任務(wù)八實現(xiàn)public class StringReversepublic static void main(String args)String s=I am a Chinese;int len=s.length();StringBuffer dest=new StringBuffer(len);for(int i=len-1;i=0;i-

43、)dest.append(s.charAt(i);System.out.println(dest.toString();main方法的參數(shù)qmain方法的形參為String類的數(shù)組參數(shù)args,args可以用來接收J(rèn)ava命令行傳送給Java應(yīng)用程序的數(shù)據(jù)。例如: java HelloEcho How are you? 123q假設(shè)要將包含多個空格的單詞作為一個字符串,可用引號括起來。例如:q java HelloEcho How are you? 123main方法的參數(shù)舉例class CommandLine public static void main(String args) for(

44、int i=0; iargs.length; i+) System.out.println(args + i + : + argsi); 顯示所有命令行參數(shù)Java異常處理任務(wù)九public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result = operand1 / operand2; return result; public static void main(String args) ExceptionRaised obj =

45、 new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); 異常情況異異 常常程序突然終止并將控制交給操作系統(tǒng)在運行時發(fā)生的錯誤在運行時發(fā)生的錯誤 什么是異常q在程序運行過程中發(fā)生的、會打斷程序正常執(zhí)行的事件稱為異常Exception,也稱為例外。例如,零用作除數(shù)產(chǎn)生算術(shù)異常ArithmeticException、 在指定的磁盤上沒有要翻開的文件產(chǎn)生文件未找到異常 FileNotFoundException 數(shù)組下標(biāo)越界產(chǎn)生數(shù)組下標(biāo)越界異常 ArrayIndexOutOfBounds

46、Exception等常見異常異常類的層次 Object Throwable Error Exception RuntimeException IOException AWTError SQLException 為內(nèi)部錯誤,因此在正常情況下不期望用戶的程序捕獲它們Java虛擬機在運行時生成的例外,由系統(tǒng)檢測, 用戶可不做處理,系統(tǒng)將它們交給缺省的異常處理程序程序中可預(yù)知的問題,可能會帶來意想不到的結(jié)果,Java程序必須捕獲或聲明所有的非運行時異常異常處理機制異常處理機制 捕獲異常聲明拋出異常throwsTry-catch消極的消極的處理方處理方式式積極的積極的處理方處理方式式捕獲異常q捕獲異常是

47、通過try-catch-finally語句實現(xiàn)的。 tryfinallycatch要監(jiān)控的程序語句包含在此塊中要監(jiān)控的程序語句包含在此塊中以合理的方式以合理的方式捕獲和處理異常捕獲和處理異常釋放資源等釋放資源等try 和 catch 塊執(zhí)行 catch 后程序繼續(xù)正常運行程序控制 引發(fā)代碼塊trycatch異常異常單單 元元任務(wù)九的解決方案一public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result=0; try result

48、 = operand1 / operand2; catch (Exception e) (發(fā)生異常:發(fā)生異常: + e.toString(); e.printStackTrace(); return result; 指明catch可以捕獲并處理的異常類型調(diào)用異常類的方法異常類的常用方法實戰(zhàn) 閱讀以下程序代碼,分析程序可能產(chǎn)生的異常情況,捕獲并處理異常。public class ExceptionDemo int array=1,2,3,4,5,6,7,8,9,0; public void exceptest(int j) for (int i=0;ij;i+) System.out.print

49、ln(array+i+=+arrayi); public static void main(String args) ExceptionDemo ex=new ExceptionDemo(); ex.exceptest(11); 多重 catch 塊2-1q一段代碼可能會生成多個異常q當(dāng)引發(fā)異常時,按順序查看每個 catch 語句,并執(zhí)行第一個類型與異常類型匹配的語句q執(zhí)行其中的一條 catch 語句之后,其他的 catch 語句將被忽略try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) 多重 catch 塊2-2t

50、ry . catch(Exception e) catch(ArrayIndexOutOfBoundsException e) q使用多重 catch 語句時,異常子類一定要位于異常父類之前。多重 catch 塊例如class ExceptionCode public void calculate() try int num = 0; int num1 = 42 / num; int c = 1,2,3,4 ; c4 = 99; catch (Exception e) (父類異常父類異常 catch 子句子句); catch (ArithmeticException ae) / 錯誤錯誤 不能

51、到達(dá)的代碼不能到達(dá)的代碼 (這個子類的父類是這個子類的父類是exception 類類,且且不能到達(dá)不能到達(dá)); class UnreachableCode class UnreachableCode public static void main(String public static void main(String args) args) ExceptionCode obj = new ExceptionCode obj = new ExceptionCode();ExceptionCode(); obj.calculate(); obj.calculate(); finally 塊tr

52、ytry、catch catch 和和 finally finally 塊的執(zhí)行流程塊的執(zhí)行流程vfinally子句可以保證,無論try塊中是否拋出異常,finally塊中的語句都會被執(zhí)行到,這樣可以對程序的狀態(tài)作統(tǒng)一的管理。 vfinally語句對增強程序的魯棒性非常重要。無異常異常異常處理塊的一般形式try / 要監(jiān)控錯誤的代碼塊 catch (Exception e) / Exception e 的異常處理程序 finally / 在 try 結(jié)束前要執(zhí)行的代碼塊finally塊例如public class SystemException public static void main(

53、String args) int a = 68; int b = 0; try System.out.println(a / b); / 0用作了除數(shù)用作了除數(shù) catch(ArithmeticException e) (“0用作了除數(shù)用作了除數(shù)); return; finally (“程序結(jié)束程序結(jié)束); 思考:如果沒有finally語句,程序運行的結(jié)果有何不同?try-catch-finally應(yīng)注意的問題q 每個try語句至少有一個catch語句對應(yīng),catch語句的排列順序應(yīng)該從特殊到一般。q 可以用一個catch語句處理多個異常類型,這時它的異常類型參數(shù)應(yīng)該是多個異常類型的父類。q try-cacth-finally語句中間不能插入其他語句聲明拋出異常處理異常處理異??赡軙?dǎo)致異常防止被調(diào)用的方法出現(xiàn)異常并處理異常type calledmethod-name(parameter-list) throws exception-list / body of methodtype callingmethod-name try / statements calledm

溫馨提示

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

最新文檔

評論

0/150

提交評論