產品庫存管理系統面向對象設計_第1頁
產品庫存管理系統面向對象設計_第2頁
產品庫存管理系統面向對象設計_第3頁
產品庫存管理系統面向對象設計_第4頁
產品庫存管理系統面向對象設計_第5頁
已閱讀5頁,還剩140頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

產品庫存管理系統面向對象設計現在是1頁\一共有145頁\編輯于星期四學習情境描述要求根據第一個情境的需求分析結果,學生成立項目開發(fā)小組,劃分角色,推選項目經理和CTO(首席技術師),程序員。經過討論給出產品庫存管理系統中的實體類:入庫單、出庫單、庫存和用戶類和控制類接口的詳細設計;利用情境2搭建好的環(huán)境,對每個類予以編程實現?,F在是2頁\一共有145頁\編輯于星期四所需知識類的定義與對象的創(chuàng)建構造方法的作用及應用面向對象三大特征:封裝性、繼承性和多態(tài)性的Java語言實現抽象類與接口的應用包的創(chuàng)建與使用訪問控制符的應用異常處理現在是3頁\一共有145頁\編輯于星期四重點及難點構造方法的作用及應用面向對象三大特征:封裝性、繼承性和多態(tài)性的Java語言實現抽象類與接口的應用異常處理現在是4頁\一共有145頁\編輯于星期四能力目標培養(yǎng)學生面向對象的編程能力培養(yǎng)學生良好的團隊合作意識及溝通協調能力、接收新知識的能力培養(yǎng)學生分析問題、解決問題的能力、創(chuàng)新能力以及邏輯思維能力

現在是5頁\一共有145頁\編輯于星期四任務一用Java語言描述現實世界中的Person。學生討論確定Person的特征

譬如:name-姓名,age-表示年齡,sex-表示性別等。確定Person相關的行為

譬如:吃飯、睡覺等。用Java語言實現Person類現在是6頁\一共有145頁\編輯于星期四復習引入面向對象與面向過程的區(qū)別?現在是7頁\一共有145頁\編輯于星期四面向對象編程面向對象編程是軟件設計與實現的有效方法,它將客觀世界中存在的事物看作對象,每個客觀事物都有自己的特征和行為?,F在是8頁\一共有145頁\編輯于星期四對象的基本概念 變量方法在現實生活中在計算機程序中客觀世界的實體程序中對象對象具有兩方面的含義(考慮從哪些方面描述對象)現在是9頁\一共有145頁\編輯于星期四面向對象的基本概念類是抽象的,對象是具體的具有相同特征和行為的對象被抽象為類。類是對象的模板,包括一個對象的所有數據和代碼。類的示例形狀類動物類汽車類現在是10頁\一共有145頁\編輯于星期四對象對

象面向對象編程的核心為計算機應用程序提供實用基礎完成特定任務表示現實世界中的實體“對象是存在的具體實體,具有明確定義的狀態(tài)和行為?!爆F在是11頁\一共有145頁\編輯于星期四對象的示例收銀員對象顧客對象顧客姓名:朱麗葉年齡:28體重:52千克操作:購買商品狀態(tài)姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單行為現在是12頁\一共有145頁\編輯于星期四消息傳遞“消息指一個對象為執(zhí)行某項特定操作而向另一個對象發(fā)送的請求”消息傳遞當需要執(zhí)行一項特定操作時,通過向已為其定義此項操作的對象發(fā)送消息來請求對象之間通過傳遞消息實現相互通信現在是13頁\一共有145頁\編輯于星期四類和對象的示例雇員收銀員系統管理員倉庫管理員促銷員采購經理現在是14頁\一共有145頁\編輯于星期四面向對象技術的實現對象類實例化抽象計算機世界實體抽象數據類型現實世界抽象映射計算機邏輯的實現對象、類和實體的關系類是創(chuàng)建對象的模板,對象是類的實例現在是15頁\一共有145頁\編輯于星期四類的基本概念現實生活中的對象classCar{intcolor;intname;intspeed;

voidbrake(){…}voidspeedUp(){…}voidslowDown(){…}}抽象數據類型程序中的對象映射描述實現現在是16頁\一共有145頁\編輯于星期四類定義類定義中必須要寫類名,應該使用Java語言合法的標識符來命名類名不能與java中已定義好的類名相同格式:[修飾符]class類名[extends父類名][implements接口名表] {

成員變量聲明方法成員聲明}

其中class、extends和implements都是Java的關鍵字。類的聲明類體現在是17頁\一共有145頁\編輯于星期四類中的方法6-1方法的定義方法的名稱參數列表方法的主體方法返回的對象類型或原始類型現在是18頁\一共有145頁\編輯于星期四方法體若局部變量與類的成員變量同名,則類的成員變量被隱藏。方法體是對方法的實現,它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法內部?,F在是19頁\一共有145頁\編輯于星期四類的定義舉例classCar{intcolor;intname;intspeed;

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

現在是20頁\一共有145頁\編輯于星期四類的實現任務一實現classPerson{ Stringname; intage; Stringsex; publicvoideat() { System.out.println("It'sdelicious!"); }}現在是21頁\一共有145頁\編輯于星期四【實戰(zhàn)】:定義一個名為Rectangle表示長方形的類,它包含double類型的長length和寬width兩個數據成員和設置長方形長寬值的方法setDim()、計算長方形面積的方法area()。

類的實現現在是22頁\一共有145頁\編輯于星期四對象的創(chuàng)建實例化初始化對象的聲明對象的創(chuàng)建現在是23頁\一共有145頁\編輯于星期四聲明類名對象名;聲明并不為對象分配內存空間,而只是分配一個引用空間現在是24頁\一共有145頁\編輯于星期四實例化類名對象名=new類名()例:Personp=newPerson();運算符new為對象分配內存空間,它調用對象的構造方法,返回引用現在是25頁\一共有145頁\編輯于星期四初始化另外執(zhí)行構造方法,可進行初始化當一個變量被創(chuàng)建時,會對其中各種類型的成員變量自動按下表進行初始化賦值。現在是26頁\一共有145頁\編輯于星期四對象的使用訪問對象成員的一般形式為:對象名.成員變量名對象名.成員方法名()

運算符”.”在這里稱為成員運算符現在是27頁\一共有145頁\編輯于星期四創(chuàng)建對象舉例classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson(); ="Tom"; p1.age=12; p1.sex="male"; p1.eat(); }}按照前面設計Person類來充當生產車間,創(chuàng)建Person對象現在是28頁\一共有145頁\編輯于星期四任務二通過構造方法,初始化Person類的實例,為其成員變量賦初值?,F在是29頁\一共有145頁\編輯于星期四構造方法在Java中,任何變量在被使用前都必須先設置初值。Java提供了為類的成員變量賦初值的專門功能:構造方法?,F在是30頁\一共有145頁\編輯于星期四構造方法的特點構造方法名與類名相同。構造方法不返回任何值,也沒有返回類型。每一個類可以有零個或多個重載的構造方法。若沒有為一個類顯式的定義構造方法,則當創(chuàng)建類對象時,編譯器將自動為它創(chuàng)建一個沒有參數的默認構造方法.構造方法只能在創(chuàng)建對象時通過new關鍵字來自動調用。注意:一旦我們自己定義了構造方法,系統將不再為我們提供默認的不帶參數的構造方法?,F在是31頁\一共有145頁\編輯于星期四classPerson{ Stringname; intage; Stringsex; publicPerson(Strings1) { name=s1; } publicPerson(Strings1,intx) { name=s1; age=x; }任務二實現publicPerson(Strings1,intx,Strings2) { name=s1; age=x; sex=s2; } publicvoideat() { System.out.println("It'sdelicious!"); }}

classTestPerson{ publicstaticvoidmain(String[]args) { Personp1=newPerson("Tom"); Personp2=newPerson("John",20); Personp3=newPerson("Bob",22,"male"); System.out.println(+p1.age+p1.sex); System.out.println(+p2.age+p2.sex); System.out.println(+p3.age+p3.sex); }}通過構造方法賦初值現在是32頁\一共有145頁\編輯于星期四This引用句柄構造方法的形式參數與類的成員變量名相同在構造方法中調用其他重載的構造方法,用this(參數列表)的形式自主學習內部類的定義和使用?,F在是33頁\一共有145頁\編輯于星期四面向對象的基本特征封裝性、繼承性、多態(tài)性是面向對象的三個主要特性。特征描述封裝性通過提供一個或多個公有(public)方法,實現對該類的私有成員變量的訪問和修改繼承性通過extends關鍵字實現子類繼承父類的所有非私有成員多態(tài)性通過方法重載和方法重寫實現方法的多態(tài)性現在是34頁\一共有145頁\編輯于星期四封裝性的引入classPerson{ Stringname; intage; Stringsex; publicvoideat() { System.out.println("It'sdelicious!"); }}

classTestPerson{publicstaticvoidmain(String[]args) { Personp1=newPerson(); ="Tom";

p1.age=-12;//非法的值 p1.sex="male"; System.out.println(“p1的年齡是:”+p1.age); }}通過實例啟發(fā)學生思考為什么引入封裝性?現在是35頁\一共有145頁\編輯于星期四封裝性的實現私有數據公有方法外部世界所謂封裝,就是信息隱藏,隱藏對象的實現細節(jié),不讓用戶看到現在是36頁\一共有145頁\編輯于星期四封裝的示例3-1接口

采購經理羅杰斯先生法拉力公司.迪斯尼汽車公司.市場經理雪莉女士

要求現在是37頁\一共有145頁\編輯于星期四

封裝的示例3-2有選擇地提供數據法拉力公司迪斯尼汽車公司公共電話號碼電子郵箱產品種類私有備件的制造方法備件庫存?zhèn)浼闹圃斐杀竟搽娫捥柎a電子郵箱汽車種類私有汽車的組裝方法汽車庫存汽車的組裝成本現在是38頁\一共有145頁\編輯于星期四封裝的示例3-3

實體法拉力公司實體迪斯尼汽車公司

AutiLtd.ButoLtd.屬性電話號碼電子郵箱產品種類現有存貨數量雇員詳情所需物料詳情屬性電話號碼電子郵箱汽車種類汽車規(guī)格雇員詳情庫存詳情經銷商詳情方法接收訂單備件的制造方法計算備件的制造成本計算利潤率方法發(fā)出訂單汽車的組裝方法計算汽車的組裝成本計算工資發(fā)出訂單編制必要報告現在是39頁\一共有145頁\編輯于星期四設置器和訪問器方法設置私有成員變量值的方法稱為設置器方法,通常為:publicvoidsetX(類型x){this.x=x; }訪問私有成員變量值的方法稱為訪問器方法,通常為:public類型getX() {returnx; }現在是40頁\一共有145頁\編輯于星期四封裝舉例classPerson{

privateintage; publicvoidsetAge(inti) { if(i<0||i>130) return; age=i; } publicintgetAge() { returnage; }}將其設為私有的方法設為公有現在是41頁\一共有145頁\編輯于星期四封裝的好處封裝的優(yōu)點可進行數據檢查便于修改,增強代碼的可維護性隱藏類的實現細節(jié)現在是42頁\一共有145頁\編輯于星期四任務三定義Person類的子類Student類現在是43頁\一共有145頁\編輯于星期四繼承性類繼承是指一個類可以繼承其他類的非私有成員,實現代碼復用。被繼承的類稱為父類,繼承父類后產生的類稱為子類?,F在是44頁\一共有145頁\編輯于星期四繼承父類

子類父類/子類是相對的Cow類Lion類Tiger類Animals類Carnivorous類Herbivorous類Coat類現在是45頁\一共有145頁\編輯于星期四繼承的實現classSubClassextendsSuperClass{……}Java中的繼承是通過extends關鍵字來實現的。關鍵字現在是46頁\一共有145頁\編輯于星期四任務三實現classStudentextendsPerson{Stringschool; publicvoidstudy(){ System.out.println("Studding");}publicstaticvoidmain(String[]args){ Personp=newPerson(); ="Tom"; p.age=30; p.getInfo(); Students=newStudent();="John";s.age=16;s.school=“清華大學”;s.getInfo();s.study();}}

現在是47頁\一共有145頁\編輯于星期四繼承的特點繼承的特點具有層次結構子類繼承了父類的非私有屬性和方法Object是所有類的超類注意:在Java語言中,只允許單繼承?,F在是48頁\一共有145頁\編輯于星期四繼承的優(yōu)點繼承的優(yōu)點代碼的可重用性父類的屬性和方法可用于子類設計應用程序變得更加簡單可以輕松地自定義子類現在是49頁\一共有145頁\編輯于星期四構造方法的繼承構造方法不能繼承,但子類在創(chuàng)建對象時要對繼承來自父類的成員進行初始化,因此,在創(chuàng)建子類時除了執(zhí)行子類的構造方法外,還需要調用父類的構造方法,具體遵循原則如下:

當子類未定義構造方法時,創(chuàng)建對象時將無條件地調用父類的無參構造方法;對于父類的含參數構造方法,子類可以在自己構造方法中使用super調用它,但super調用語句必須是子類構造方法中的第一個可執(zhí)行語句;子類在自己的構造方法中如果沒有用super明確調用父類的構造方法,則在創(chuàng)建對象時,將自動先執(zhí)行父類的無參構造方法,然后再執(zhí)行自己定義的構造方法?,F在是50頁\一共有145頁\編輯于星期四任務四

對上例中Student類繼承了父類的所有非私有方法進行重寫現在是51頁\一共有145頁\編輯于星期四多態(tài)性方法重寫實現的動態(tài)多態(tài)性(運行時多態(tài))

方法重載實現的靜態(tài)多態(tài)性(編譯時多態(tài))

多態(tài)性現在是52頁\一共有145頁\編輯于星期四方法重寫方法重寫子類和父類的方法具有相同的名稱和類型用子類對象調用子類中的重寫方法super.methodname()用于調用父類中的方法現在是53頁\一共有145頁\編輯于星期四classRectangle{

intlength;

intwidth;Rectangle(intlen,intwid){length=len;width=wid;}/*計算矩形的周長.*/voidgetPerimeter(){(“矩形的周長為"+(2*(length+width)));}}方法重寫classSquareextendsRectangle{Square(intlen){length=len;}/*計算周長.*/voidgetPerimeter(){(“正方形的周長為"+(4*length));}}publicstaticvoidmain(String[]arg){RectanglerectObj=newRectangle(10,15);rectObj.getPerimeter();RectanglesqObj=newSquare(15);sqObj.getPerimeter();}調用父類方法調用子類方法現在是54頁\一共有145頁\編輯于星期四任務四實現classPerson{publicStringname;publicintage; publicvoidgetInfo(){ System.out.println(name); System.out.println(age); } publicvoideat() { System.out.println("It'sdelicious!"); }}classStudentextendsPerson{Stringschool;publicvoidstudy(){

System.out.println("Studding");}publicvoidgetInfo(){ System.out.println(name); System.out.println(age); System.out.println(school); }publicstaticvoidmain(String[]args){ Personp=newPerson(); ="Tom"; p.age=30; p.getInfo(); Students=newStudent();="John";s.age=16;s.school="塔山小學";s.getInfo();s.study();}}現在是55頁\一共有145頁\編輯于星期四多態(tài)性【實戰(zhàn)】:通過分析,編程實現上圖現在是56頁\一共有145頁\編輯于星期四成員方法覆蓋應注意的問題覆蓋方法的方法名、返回類型和參數列表必須與它所覆蓋的方法相同覆蓋方法不能比它所覆蓋的方法訪問性更低覆蓋方法不能比它所覆蓋的方法拋出更多的異常現在是57頁\一共有145頁\編輯于星期四成員變量的覆蓋若子類聲明了與父類同名的變量,則父類的變量被隱藏起來,直接使用的是子類的變量,但父類的變量仍占據空間,可通過super或父類名來訪問。

現在是58頁\一共有145頁\編輯于星期四程序運行結果:Subclass:200Superclass:100成員變量的覆蓋classA{intx=100;}classBextendsA{intx=200;voidprint(){System.out.println("Subclass:"+x);System.out.println("Superclass:"+super.x);}publicstaticvoidmain(Stringargs[]){(newB()).print();}}成員變量的覆蓋現在是59頁\一共有145頁\編輯于星期四類對象之間的類型轉換父類對象和子類對象的轉換需要注意以下原則:子類對象可以被視為是其父類的一個對象,反之則不可。若一個方法的形式參數定義的是父類的對象,則調用該方法的實際參數可以使用子類對象。若父類對象引用指向的實際是一個子類對象,則這個父類對象的引用可以用強制類型轉換轉化成子類對象的引用。現在是60頁\一共有145頁\編輯于星期四類變量—static修飾符我們在Person類中增加一個成員變量國籍,并假設所有的人都來自中國,該如何實現?思考?現在是61頁\一共有145頁\編輯于星期四類變量

country=Chinaname=“John”age=15……name=“rose”age=14……name=“Tom”age=16……static靜態(tài)變量或類變量靜態(tài)變量的訪問:類名.變量名現在是62頁\一共有145頁\編輯于星期四類變量的應用classCount{ publicstaticvoidmain(Stringargs[]) { Useru1=newUser(); u1.login(); Useru2=newUser(); u2.login(); }}classUser{ staticintcount=0; voidlogin() { count++; ("你是第"+count+"位訪問者"); } }現在是63頁\一共有145頁\編輯于星期四類方法—static修飾符static修飾符修飾的方法叫靜態(tài)方法

目的:使方法獨立于類的實例,使用類去訪問現在是64頁\一共有145頁\編輯于星期四類方法

規(guī)則可以調用其他靜態(tài)方法必須訪問靜態(tài)數據不能使用

super

或this關鍵字調用靜態(tài)方法的語法為:

classname.methodname();現在是65頁\一共有145頁\編輯于星期四類方法的應用publicclassIsPrime{ publicstaticbooleanprime(intx) { for(intk=2;k<=Math.sqrt(x);k++) { if(x%k==0) returnfalse; } returntrue; } ClassTestIsPrime publicstaticvoidmain(Stringargs[]) { for(intm=10;m<=100;m++) { if(IsPrime.prime(m)) System.out.println(m+“是素數。"); }}}現在是66頁\一共有145頁\編輯于星期四類方法的應用為什么main()方法要用static來修飾?思考?現在是67頁\一共有145頁\編輯于星期四final修飾符

final類不能被繼承子類不能重寫方法變量只能被賦值一次現在是68頁\一共有145頁\編輯于星期四任務五思考:怎樣用一個方法實現兩種體積的計算編程實現計算圓柱體和長方體的體積現在是69頁\一共有145頁\編輯于星期四抽象類由abstract修飾的方法叫抽象方法,抽象方法沒有方法體;包含抽象方法的類叫抽象類,由abstract修飾。抽象方法必須聲明在抽象類中。抽象方法語法:abstracttypemethod_name(parameter_list);聲明抽象類語法:

abstractclass{……}使用:父類中的某些抽象不包含任何邏輯,并需要在子類中重寫,子類提供這種抽象方法的實現細節(jié)現在是70頁\一共有145頁\編輯于星期四任務五實現abstractclassShape{...........doublelength;doublewidth;doubleheight;doubleradius;...........abstractdoublevol();}classCircleextendsShape{*計算圓柱體的體積.

...........doublevol(){returnMath.PI*radius*radius*height;}}classRectangleextendsShape{*計算長方體的體積............doublevol(){returnlength*width*height;}}現在是71頁\一共有145頁\編輯于星期四抽象類

abstract抽象類不能被實例化構造方法、static和private方法不能是抽象的父類的抽象方法往往在子類中實現

抽象類可以具有指向子類對象的對象引用現在是72頁\一共有145頁\編輯于星期四任務六通過接口計算邊長分別為3和4的長方形面積

現在是73頁\一共有145頁\編輯于星期四接口

接口是一種抽象類,只包含抽象方法及常量接口可以實現多態(tài),支持多重繼承變量默認是public、static、final的,方法默認為public、abstract的現在是74頁\一共有145頁\編輯于星期四接口的定義publicinterfaceMyinterface{ intcompute(intx,inty); }使用interface關鍵字定義一個接口:現在是75頁\一共有145頁\編輯于星期四接口的實現publiccalssMyclassimplementsMyinterface{

public

intcompute(intx,inty) { returnx+y; }}publiccalssYourclassimplementsMyinterface{

public

intcompute(intx,inty) { returnx*y; }}

注意:若實現接口的類不是抽象類,則在該類的定義部分必須實現指定接口的所有抽象方法。現在是76頁\一共有145頁\編輯于星期四接口的繼承接口可以通過關鍵字extends繼承其他接口例如:InterfaceB{……}InterfaceAextendsB{……}現在是77頁\一共有145頁\編輯于星期四interfaceA{Stringa="在接口A中";voidshowA();}interfaceBextendsA{Stringb="在接口B中";voidshowB();}classInterfaceABCimplementsC{publicvoidshowA(){System.out.println(a);}publicvoidshowB(){ System.out.println(b);}}

接口的繼承舉例程序運行結果:在接口A中在接口B中現在是78頁\一共有145頁\編輯于星期四

publicclassUseInterface1{publicstaticvoidmain(Stringargs[]){intx=5,y=10;Myinterfaceo;Myclassmy=newMyclass();o=my;System.out.println("xy的和=“+pute(x,y));Yourclassyou=newYourClass();o=you;System.out.println(“xy的積="+pute(x,y));}}接口類型的使用接口可以作為一種引用類型來使用現在是79頁\一共有145頁\編輯于星期四接口的優(yōu)點接口的使用使得方法的描述說明和方法功能的分開,有助于降低程序的復雜性,使程序設計靈活,便于擴充修改。這也是Java面向對象程序設計方法中多態(tài)特性的體現?,F在是80頁\一共有145頁\編輯于星期四任務六實現interfaceIrect{ doublew=3,l=4; voidcompute();}定義接口classCrectimplementsIrect{ publicvoidcompute(){ ("邊長分別為3和4的長方形面積為:"+w*l); }}

定義實現接口的類classInterfaceDemo{ publicstaticvoidmain(Stringargs[]){ Crectr=newCrect(); pute(); }}定義主類創(chuàng)建接口對象現在是81頁\一共有145頁\編輯于星期四綜合實戰(zhàn)(1)根據要求實現Circle類:①成員變量:radius—半徑②成員方法:Circle()—構造方法,將半徑置0Circle(doubler)—構造方法,將半徑初始化為rdoublegetRadius()—獲取圓的半徑doublegetPerimeter()—獲取圓的周長doublegetArea()—獲取圓的面積voiddisp()—將圓的半徑、周長和面積輸出到屏幕(2)通過繼承Circle類,派生圓柱體類Cylinder:①成員變量:height—高②成員方法:Cylinder(doubler,doubleh)—構造方法,初始化半徑和高doublegetHeight()—獲取圓柱體的高doublegetVol()—獲取圓柱體體積voiddispVol()—將圓柱體體積輸出到屏幕現在是82頁\一共有145頁\編輯于星期四包包將類和接口有機地組織成層次結構,與具體的文件系統的目錄樹結構層次一致。包允許將類組合成較小的單元,使其易于找到和使用相應的類文件。有助于避免命名沖突。包允許在更廣的范圍內保護類、數據和方法。現在是83頁\一共有145頁\編輯于星期四創(chuàng)建包package[包名1[.包名2[.[...]]]]語法格式如下:注意:在Java程序中,package語句必須是程序的第一條非空格、非注釋語句?,F在是84頁\一共有145頁\編輯于星期四創(chuàng)建包舉例packagemypackage;publicclassPerson{publicStringname;publicintage; publicvoidgetInfo(){ System.out.println(name); System.out.println(age); } publicvoideat() { System.out.println("It'sdelicious!"); }}聲明包現在是85頁\一共有145頁\編輯于星期四導入包1、使用import語句import包名.標識符;

import包名.*;2、直接使用包ap=new();現在是86頁\一共有145頁\編輯于星期四導入包舉例packageyourpackage;importmypackage.Person;classStudentextendsPerson{Stringschool; publicvoidstudy(){ System.out.println("Studding");}publicstaticvoidmain(String[]args){ Students=newStudent();="John";s.age=16;s.school="清華大學";s.getInfo();s.study();}}導入包現在是87頁\一共有145頁\編輯于星期四訪問修飾符訪問修飾符訪問修飾符privateprotectedpublic默認現在是88頁\一共有145頁\編輯于星期四訪問修飾符該類或非該類均可訪問public只有該類可以訪問private相同數據包中的類可以訪問默認該類及其子類的成員可以訪問,同一個包中的類也可訪問protected現在是89頁\一共有145頁\編輯于星期四訪問修飾符位置private默認protectedpublic同一個類是是是是同一個包內的類否是是是不同包內的子類否否是是不同包并且不是子類否否否是現在是90頁\一共有145頁\編輯于星期四訪問修飾符的使用【實戰(zhàn)】通過對任務六的Person類和Student類設置包和訪問修飾符,掌握訪問修飾符的使用現在是91頁\一共有145頁\編輯于星期四包裝類Java語言中專門提供了包裝類,將基本類型包裝成類。與基本類型對應的包裝類有Byte、Short、Integer、Long、Character、Float、Double、Boolean和Void,可以完成一些數據的轉換。通過通過查看JDK幫助文檔自主學習現在是92頁\一共有145頁\編輯于星期四任務七從一個代表帶有路徑的文件名中分離出文件名和路徑現在是93頁\一共有145頁\編輯于星期四類String字符串定義可以用字符串常量直接初始化一個String對象

Strings="HelloWorld";通過構造方法構造方法說明String()它將創(chuàng)建一個空字符串 String(Stringvalue)它將新建一個字符串作為指定字符串的副本String(char[]value)它將根據字符數組構造一個新字符串String(byte[]value)它將通過轉換指定的字節(jié)數組新建一個字符串現在是94頁\一共有145頁\編輯于星期四String構造方法的使用舉例

Strings,s1,s2,s3,s4,s5,s6,s7;bytebyteArray[]={(byte)'J',(byte)'a',(byte)'v',(byte)'a'};CharcharArray[]={'程','序','設','計'};StringBuffersb=newStringBuffer("歡迎");;s=newString("Hello!");s1=newString();s2=newString(s);s3=newString(sb);s4=newString(charArray,2,2);s5=newString(byteArray,0);s6=newString(charArray);s7=newString(byteArray,0,0,1);

現在是95頁\一共有145頁\編輯于星期四字符串長度由length()

方法確定語法publicintlength();返回字符串中的字符數String的常用方法—字符串長度Stringname="JohnSmith";(name.length());現在是96頁\一共有145頁\編輯于星期四String的常用方法—字符串比較字符串1字符串2字符串1字符串2由equals()方法確定檢查組成字符串內容的字符同一個對象用==運算符檢查檢查字符串是否指向同一個或不同的對象現在是97頁\一共有145頁\編輯于星期四

publicclassStringCompare{ publicstaticvoidmain(String[]args) { Strings1="abc"; Strings2="abc"; Stringt1=newString("abc"); Stringt2=newString("abc"); System.out.println(s1==s2); System.out.println(s1.equals(s2)); System.out.println(t1==t2); System.out.println(t1.equals(t2)); }}字符串比較舉例程序運行結果如下:truetruefalsetrue思考:為什么?Java在編譯時對字符串常量的存儲有一個優(yōu)化處理策略,相同字符串常量只存儲一份

現在是98頁\一共有145頁\編輯于星期四字符串比較方法方法說明booleanequalsIgnoreCase(Stringvalue)此方法比較兩個字符串,忽略大小寫形式intcompareTo(Stringvalue)按字母順序比較兩個字符串。如果兩個字符串相等,則返回0;如果字符串在該值之前,則返回值小于0;如果字符串在該值之后,則返回值大于0booleanstartsWith(Stringvalue)檢查一個字符串是否以另一個字符串開始。booleanendsWith(Stringvalue)檢查一個字符串是否以另一個字符串結束?,F在是99頁\一共有145頁\編輯于星期四搜索字符串字符串1情形1:indexOf(character)方法找到第一個匹配索引

0123情形2:如果沒有找到匹配,則返回-1返回找到的第一個匹配的位置索引現在是100頁\一共有145頁\編輯于星期四搜索字符串舉例publicclassSearchString{ publicstaticvoidmain(String[]args){ Stringname="JohnSmith@123.com"; System.out.println(“EmailID是:"+name); (“@的索引是:"+name.indexOf('@')); (“.的索引是:"+name.indexOf('.')); if(name.indexOf('.')>name.indexOf('@')){ (“該電子郵件地址有效"); }else{ (“該電子郵件地址無效"); } }}現在是101頁\一共有145頁\編輯于星期四提取字符串方法方法說明publiccharcharAt(intindex)此方法用于從指定位置提取單個字符,該位置由索引指定,索引中的值必須為非負publicStringsubstring(intindex)此方法用于提取從位置索引開始的字符串部分publicStringsubstring(intbeginindex,intendindex)此方法用于提取beginindex和endindex位置之間的字符串部分publicStringconcat(Stringstr)此方法用于連接兩個字符串,并新建一個包含調用字符串的字符串對象publicStringreplace(charold,charnew)此方法用于將調用字符串中出現某個字符的所有位置都替換為另一個字符publicStringtrim()此方法用于返回一個前后不含任何空格的調用字符串的副本現在是102頁\一共有145頁\編輯于星期四提取字符串方法說明publiccharcharAt(intindex)此方法用于從指定位置提取單個字符,該位置由索引指定,索引中的值必須為非負。publicStringsubstring(intindex)此方法用于提取從位置索引開始的字符串部分。publicStringsubstring(intbeginindex,intendindex)此方法用于提取beginindex和endindex位置之間的字符串部分。publicStringconcat(Stringstr)此方法用于連接兩個字符串,并新建一個包含調用字符串的String對象。publicStringreplace(charold,charnew)此方法用于將調用字符串中出現某個字符的所有位置都替換為另一個字符。publicStringtrim()此方法用于返回一個前后不含任何空格的調用字符串的副本。...charch;ch="orange".charAt(3);...它將從index(3)中提取單個字符串“n”并將其存儲在變量ch中現在是103頁\一共有145頁\編輯于星期四提取字符串舉例

publicclassStringMethods{ publicstaticvoidmain(String[]args){ Strings="Javaisa"+"platformindependentlanguage"; Strings1="Helloworld"; Strings2="Hello"; System.out.println(s); System.out.println("indexoft="+s.indexOf('t')); System.out.println("lastindexoft="+s.lastIndexOf('t')); System.out.println("indexof(t,10)="+s.indexOf('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()); }}現在是104頁\一共有145頁\編輯于星期四任務七實現publicclassGetFilename{ privateStringfullPath; privatefinalcharpathSepatator='\\'; publicGetFilename(Stringfname){ fullPath=fname; } publicStringgetName(){ intpos=fullPath.lastIndexOf(pathSepatator); if(pos==-1) { returnfullPath; } else { returnfullPath.substring(pos+1); } }publicStringgetPath(){ intpos=fullPath.lastIndexOf(pathSepatator); if(pos==-1){ returnfullPath; } else{ returnfullPath.substring(0,pos); } } publicstaticvoidmain(String[]args){ GetFilenamefn=newGetFilename("F:\\ava\\myexample\\a.java"); System.out.println(fn.getName()); System.out.println(fn.getPath()); }}現在是105頁\一共有145頁\編輯于星期四更改字符大小寫方法Hello使用toUpperCase()方法HELLOHELLO使用toLowerCase()方法hello語法publicStringtoUpperCase();語法PublicStringtoLowerCase();現在是106頁\一共有145頁\編輯于星期四更改字符大小寫方法舉例

publicclassStringTest{ publicstaticvoidmain(String[]args){ Stringname=newString("George"); (“姓名是"+name); intlength=name.length(); (“姓名的長度為”+length+“個字符"); (“姓名用大寫形式表示為:"); StringnameUppercase=name.toUpperCase(); System.out.println(nameUppercase);}}現在是107頁\一共有145頁\編輯于星期四任務八判斷一個字符串是否為回文,即將一個字符串進行反轉,得到的字符串與源串相同:例如原始字符串為“aba”,逆轉后的字符串也為“aba”?,F在是108頁\一共有145頁\編輯于星期四StringBuffer類構造方法說明publicStringBuffer()保留16個字符的空間publicStringBuffer(intlength)設置緩存器大小publicStringBuffer(Stringvalue)接收字符串參數,用來設置初始內容,并在不重新分配的情況下保留16個字符的空間StringBuffer用于表示可以修改的字符串使用連接運算符(+)的字符串會自動創(chuàng)建字符串緩沖對象現在是109頁\一共有145頁\編輯于星期四StringBuffer類的方法方法說明StringBufferinsert(Strings)在指定位置插入指定的字符串intlength()確定StringBuffer對象的長度intcapacity()返回當前容量voidsetCharAt(intpos,charch)使用ch指定的新值設置pos指定的位置上的字符StringtoString()轉換為字符串形式StringBufferreverse()將此字符序列用其反轉形式取代

StringBufferdelete(intstart,intend)刪除調用對象中從start位置開始直到end指定的索引–1位置的字符序列StringBufferdeleteCharAt(intpos)刪除pos指定的索引處的字符StringBufferreplace(intstart,intend,Strings)使用一組字符替換另一組字符。將用替換字符串從start指定的位置開始替換,直到end指定的位置結束現在是110頁\一共有145頁\編輯于星期四不變性String類創(chuàng)建后直接修改不變性的概念解決方法StringBuffer類String的對等類表示可增加和可編寫字符的可變序列將字符插入到字符串中間或附加到字符串末尾現在是111頁\一共有145頁\編輯于星期四不變性舉例publicclassStringBuf{ publicstaticvoidmain(String[]args){ StringBufferbuf=newStringBuffer("Java");

buf.append(“GuideVer1/”); buf.append(3); intindex=5;

buf.insert(index,"Student");

index=23;

buf.setCharAt(index,'.');

intstart=24; intend=25;

buf.replace(start,end,"4");

Strings=buf.toString();//轉換為字符串 System.out.println(s); }}現在是112頁\一共有145頁\編輯于星期四任務八實現publicclassStringReverse{ publicstaticvoidmain(String[]args) { Strings="IamaChinese"; intlen=s.length(); StringBufferdest=newStringBuffer(len); for(inti=len-1;i>=0;i--) { dest.append(s.charAt(i)); } System.out.println(dest.toString()); }}現在是113頁\一共有145頁\編輯于星期四main方法的參數main方法的形參為String類的數組參數args,args可以用來接收Java命令行傳送給Java應用程序的數據。例如:

javaHelloEchoHowareyou?123若要將包含多個空格的單詞作為一個字符串,可用引號括起來。例如:

javaHelloEcho"Howareyou?"123現在是114頁\一共有145頁\編輯于星期四main方法的參數舉例classCommandLine{publicstaticvoidmain(Stringargs[]){for(inti=0;i<args.length;i++)System.out.println("args["+i+"]:"+args[i]);}}顯示所有命令行參數現在是115頁\一共有145頁\編輯于星期四Java異常處理任務九publicclassExceptionRaised{publicExceptionRaised(){}publicintcalculate(intoperand1,intoperand2){intresult=operand1/operand2;returnresult;}publicstaticvoidmain(String[]args){ExceptionRaisedobj=newExceptionRaised();intresult=obj.calculate(9,0);System.out.println(result);}}OS異常情況異常程序突然終止并將控制交給操作系統在運行時發(fā)生的錯誤

現在是116頁\一共有145頁\編輯于星期四什么是異常在程序運行過程中發(fā)生的、會打斷程序正常執(zhí)行的事件稱為異常(Exception),也稱為例外。例如,零用作除數(產生算術異常ArithmeticException)、在指定的磁盤上沒有要打開的文件(產生文件未找到異常FileNotFoundException)數組下標越界(產生數組下標越界異常ArrayIndexOutOfBoundsException)等常見異常現在是117頁\一共有145頁\編輯于星期四異常類的層次為內部錯誤,因此在正常情況下不期望用戶的程序捕獲它們Java虛擬機在運行時生成的例外,由系統檢測,用戶可不做處理,系統將它們交給缺省的異常處理程序程序中可預知的問題,可能會帶來意想不到的結果,Java程序必須捕獲或聲明所有的非運行時異?,F在是118頁\一共有145頁\編輯于星期四異常處理機制

捕獲異常聲明拋出異常throwsTry-catch消極的處理方式積極的處理方式現在是119頁\一共有145頁\編輯于星期四捕獲異常捕獲異常是通過try-catch-finally語句實現的。

tryfinallycatch要監(jiān)控的程序語句包含在此塊中以合理的方式捕獲和處理異常釋放資源等現在是120頁\一共有145頁\編輯于星期四try和catch塊執(zhí)行catch后程序繼續(xù)正常運行程序控制引發(fā)代碼塊trycatch異常單元現在是121頁\一共有145頁\編輯于星期四任務九的解決方案一publicclassExceptionRaised{publicExceptionRaised(){}publicintcalculate(intoperand1,intoperand2){intresult=0;try{ result=operand1/operand2;

}catch(Exceptione){("發(fā)生異常:"+e.toString());e.printStackTrace();}returnresult;

}}指明catch可以捕獲并處理的異常類型調用異常類的方法現在是122頁\一共有145頁\編輯于星期四異常類的常用方法現在是123頁\一共有145頁\編輯于星期四實戰(zhàn)閱讀下列程序代碼,分析程序可能產生的異常情況,捕獲并處理異常。publicclassExceptionDemo{intarray[]={1,2,3,4,5,6,7,8,9,0}; publicvoidexceptest(intj) { for(inti=0;i<j;i++) {System.out.println("array["+i+"]="+array[i]);} } publicstaticvoidmain(Stringargs[]) {ExceptionDemoex=newExceptionDemo();ex.exceptest(11);}}

現在是124頁\一共有145頁\編輯于星期四多重catch塊2-1一段代碼可能會生成多個異常當引發(fā)異常時,按順序查看每個catch語句,并執(zhí)行第一個類型與異常類型匹配的語句執(zhí)行其中的一條catch語句之后,其他的catch語句將被忽略try{…….}catch(ArrayIndexOutOfBoundsExceptione){……}catch(Exceptione){……}現在是125頁\一共有145頁\編輯于星期四多重catch塊2-2try{…...}catch(Exceptione){……}catch(ArrayIndexOutOfBoundsExceptione){……}

×使用多重catch語句時,異常子類一定要位于異常父類之前?,F在是126頁\一共有145頁\編輯于星期四多重catch塊示例classExceptionCode{publicvoidcalculate(){try{intnum=0;intnum1=42/num;intc[]={1,2,3,4};c[4]=99;}catch(Exceptione){("父類異常

catch子句");}catch(ArithmeticExceptionae){//錯誤

–不能到達的代碼

("這個子類的父類是exception類,且不能到達");}}}classUnreachableCode{publicstaticvoidmain(String[]args){ExceptionCodeobj=newExceptionCode();obj.calculate();}}現在是127頁\一共有145頁\編輯于星期四finally塊try、catch和finally塊的執(zhí)行流程finally子句可以保證,無論try塊中是否拋出異常,finally塊中的語句都會被執(zhí)行到,這樣可以對程序的狀態(tài)作統一的管理。finally語句對增強程序的魯棒性非常重要。try塊finally塊catch塊無異常異?,F在是128頁\一共有145頁\編輯于星期四異常處理塊的一般形式try{ //要監(jiān)控錯誤的代碼塊}catch(Exceptione){ //Exceptione

的異常處理程序}finally{ //在try結束前要執(zhí)行的代碼塊}現在是129頁\一共有145頁\編輯于星期四finally塊示例publicclassSystemException{publicstaticvoidmain(Stringargs[]){inta=68;

溫馨提示

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

評論

0/150

提交評論