版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、情境3 產品庫存管理系統(tǒng)面向對象設計,學習情境描述,要求根據(jù)第一個情境的需求分析結果,學生成立項目開發(fā)小組,劃分角色,推選項目經(jīng)理和CTO(首席技術師),程序員。經(jīng)過討論給出產品庫存管理系統(tǒng)中的實體類:入庫單、出庫單、庫存和用戶類和控制類接口的詳細設計;利用情境2搭建好的環(huán)境,對每個類予以編程實現(xiàn)。,所需知識,類的定義與對象的創(chuàng)建 構造方法的作用及應用 面向對象三大特征:封裝性、繼承性和多態(tài)性的Java語言實現(xiàn) 抽象類與接口的應用 包的創(chuàng)建與使用 訪問控制符的應用 異常處理,重點及難點,構造方法的作用及應用 面向對象三大特征:封裝性、繼承性和多態(tài)性的Java語言實現(xiàn) 抽象類與接口的應用 異常處
2、理,能力目標,培養(yǎng)學生面向對象的編程能力 培養(yǎng)學生良好的團隊合作意識及溝通協(xié)調能力、接收新知識的能力 培養(yǎng)學生分析問題、解決問題的能力、創(chuàng)新能力以及邏輯思維能力,任務一,用Java語言描述現(xiàn)實世界中的Person。,學生討論確定Person的特征 譬如:name-姓名,age-表示年齡,sex-表示性別等。 確定Person相關的行為 譬如:吃飯、睡覺等。,用Java語言實現(xiàn)Person類,復習引入,面向對象與面向過程的區(qū)別?,面向對象編程,面向對象編程是軟件設計與實現(xiàn)的有效方法,它將客觀世界中存在的事物看作對象,每個客觀事物都有自己的特征和行為。,對象的基本概念,變量,方法,客觀世界的實體,
3、程序中對象,對象具有兩方面的含義(考慮從哪些方面描述對象),面向對象的基本概念,類是抽象的,對象是具體的,具有相同特征和行為的對象被抽象為類。 類是對象的模板,包括一個對象的所有數(shù)據(jù)和代碼。,類的示例,形狀類,動物類,汽車類,對象,“對象是存在的具體實體,具有明確定義的狀態(tài)和行為?!?對象的示例,收銀員對象,顧客對象,顧客 姓名:朱麗葉 年齡:28 體重:52千克 操作: 購買商品,狀態(tài),姓名:布蘭尼 職銜:收銀員 年齡:35 體重:60千克 操作: 收款 打印帳單,行為,消息傳遞,“消息指一個對象為執(zhí)行某項特定操作而向另一個 對象發(fā)送的請求”,類和對象的示例,雇員,收銀員,系統(tǒng)管理員,倉庫管
4、理員,面向對象技術的實現(xiàn),對象、類和實體的關系,類是創(chuàng)建對象的模板,對象是類的實例,類的基本概念,現(xiàn)實生活中的對象,class Car int color; int name; int speed; void brake() void speedUp() void slowDown() ,抽象數(shù)據(jù)類型,程序中的對象,映 射,描述,實 現(xiàn),類定義,類定義中必須要寫類名,應該使用Java語言合法的標識符來命名 類名不能與java中已定義好的類名相同,格式: 修飾符class 類名 extends 父類名 implements 接口名表 成員變量聲明 方法成員聲明 ,其中class、extends和
5、implements都是Java的關鍵字。,類中的方法 6-1,方法的名稱,參數(shù)列表,方法的主體,方法返回的對象類 型或原始類型,方法體,若局部變量與類的成員變量同名, 則類的成員變量被隱藏。,方法體是對方法的實現(xiàn),它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法內部。,類的定義舉例,class Car int color; int name; int speed; void brake() void speedUp() void slowDown() ,類的實現(xiàn),任務一實現(xiàn),class Person String name; int age; Strin
6、g sex; public void eat() System.out.println(Its delicious!); ,【實戰(zhàn)】:定義一個名為Rectangle表示長方形的類,它包含double類型的長length和寬width兩個數(shù)據(jù)成員和設置長方形長寬值的方法setDim()、計算長方形面積的方法area()。,類的實現(xiàn),對象的創(chuàng)建,聲明,類名 對象名;,聲明并不為對象分配內存空間,而 只是分配一個引用空間,實例化,類名 對象名 = new 類名(),例:Person p=new Person();,運算符new為對象分配內存空間,它調用對象的構造方法,返回引用,初始化,另外執(zhí)行構造方
7、法,可進行初始化,當一個變量被創(chuàng)建時,會對其中各種類型的成員變量自動按下表進行初始化賦值。,對象的使用,訪問對象成員的一般形式為: 對象名.成員變量名 對象名.成員方法名(),運算符”.”在這里稱為成員運算符,創(chuàng)建對象舉例,class TestPerson public static void main(String args) Person p1=new Person(); =Tom; p1.age=12; p1.sex=male; p1.eat(); ,按照前面設計Person類來充當生產車間,創(chuàng)建Person對象,任務二,通過構造方法,初始化Person類的實例,為其成員變
8、量賦初值。,構造方法,在Java中,任何變量在被使用前都必須先設置初值。Java提供了為類的成員變量賦初值的專門功能:構造方法。,構造方法的特點,構造方法名與類名相同。 構造方法不返回任何值,也沒有返回類型。 每一個類可以有零個或多個重載的構造方法。若沒有為一個類顯式的定義構造方法,則當創(chuàng)建類對象時,編譯器將自動為它創(chuàng)建一個沒有參數(shù)的默認構造方法. 構造方法只能在創(chuàng)建對象時通過new關鍵字來自動調用。,注意:一旦我們自己定義了構造方法,系統(tǒng)將不再為我們提供默認的不帶參數(shù)的構造方法 。,class Person String name; int age; String sex; public P
9、erson(String s1) name = s1; public Person(String s1,int x) name = s1; age = x; ,任務二實現(xiàn),public Person(String s1,int x,String s2) name= s1; age = x; sex = s2; public void eat() System.out.println(Its delicious!); ,class TestPerson public static void main(String args) Person p1=new Person(Tom); Person p
10、2=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); System.out.println(+p3.age+p3.sex); ,通過構造方法賦初值,This引用句柄,構造方法的形式參數(shù)與類的成員變量名相同 在構造方法中調用其他重載的構造方法,用this(參數(shù)列表)的形式,自主學習內部類的定義和使用。,面向對象的基本特征,封裝性、繼承性、多態(tài)性是面向對
11、象的三個主要特性。,封裝性的引入,class Person String 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;System.out.println(“p1的年齡是:”+p1.age); ,通過實例啟發(fā)學生思考為什么引入封裝性?,封裝
12、性的實現(xiàn),外部世界,所謂封裝,就是信息隱藏,隱藏對象的實現(xiàn)細節(jié), 不讓用戶看到,封裝的示例 3-1,接口,采購經(jīng)理,羅杰斯先生,法拉力公司,.,迪斯尼汽車公司,.,市場經(jīng)理,雪莉女士,要求,封裝的示例 3-2,有選擇地提供數(shù)據(jù),法拉力公司,迪斯尼汽車公司,封裝的示例 3-3,實體法拉力公司,實體迪斯尼汽車公司,Auti Ltd,.,Buto Ltd,.,設置器和訪問器方法,封裝舉例,class Person private int age; public void setAge(int i) if(i130) return; age = i; public int getAge() retur
13、n age; ,將其設為私有的,方法設為公有,封裝的好處,任務三,定義Person類的子類Student類,繼承性,類繼承是指一個類可以繼承其他類的非私有成員,實現(xiàn)代碼復用。 被繼承的類稱為父類,繼承父類后產生的類稱為子類。,繼承,父 類,子類,繼承的實現(xiàn),class SubClass extends SuperClass ,Java中的繼承是通過extends關鍵字來實現(xiàn)的。,關鍵字,任務三實現(xiàn),class Student extends Person String school; public void study() System.out.println(Studding); publi
14、c static void main(String args) Person p=new Person(); =Tom; p.age=30; p.getInfo(); Student s=new Student(); =John; s.age=16; s.school=“清華大學”; s.getInfo(); s.study(); ,繼承的特點,注意:在Java語言中,只允許單繼承。,繼承的優(yōu)點,構造方法的繼承,構造方法不能繼承,但子類在創(chuàng)建對象時要對繼承來自父類的成員進行初始化,因此,在創(chuàng)建子類時除了執(zhí)行子類的構造方法外,還需要調用父類的構造方法,具體遵循原則如下:,
15、當子類未定義構造方法時,創(chuàng)建對象時將無條件地調用父類的無參構造方法; 對于父類的含參數(shù)構造方法,子類可以在自己構造方法中使用super調用它,但super調用語句必須是子類構造方法中的第一個可執(zhí)行語句; 子類在自己的構造方法中如果沒有用super明確調用父類的構造方法,則在創(chuàng)建對象時,將自動先執(zhí)行父類的無參構造方法,然后再執(zhí)行自己定義的構造方法。,任務四,對上例中Student 類繼承了父類的所有非私有方法進行重寫,多態(tài)性,方法重寫實現(xiàn)的 動態(tài)多態(tài)性 (運行時多態(tài)),方法重載實現(xiàn) 的靜態(tài)多態(tài)性 (編譯時多態(tài)),多態(tài)性,方法重寫,class Rectangle int length; int w
16、idth; Rectangle(int len , int wid) length = len; width = wid; /* 計算矩形的周長.*/ void getPerimeter() System.out.println(“矩形的周長為 + (2 * (length + width); ,方法重寫,class Square extends Rectangle Square(int len) length = len; /* 計算周長.*/ void getPerimeter() System.out.println(“正方形的周長為 + (4 * length); ,public st
17、atic void main(String arg) Rectangle rectObj = new Rectangle(10, 15); rectObj.getPerimeter(); Rectangle sqObj= new Square(15); sqObj.getPerimeter(); ,調用父類方法,調用子類方法,任務四實現(xiàn),class Person public String name; public int age; public void getInfo() System.out.println(name); System.out.println(age); public v
18、oid eat() System.out.println(Its delicious!); class Student extends Person String school; public void study() ,System.out.println(Studding); public void getInfo() System.out.println(name); System.out.println(age); System.out.println(school); public static void main(String args) Person p=new Person()
19、; =Tom; p.age=30; p.getInfo(); Student s=new Student(); =John; s.age=16; s.school=塔山小學; s.getInfo(); s.study(); ,多態(tài)性,【實戰(zhàn)】:通過分析,編程實現(xiàn)上圖,成員方法覆蓋應注意的問題,覆蓋方法的方法名、返回類型和參數(shù)列表必須與它所覆蓋的方法相同 覆蓋方法不能比它所覆蓋的方法訪問性更低 覆蓋方法不能比它所覆蓋的方法拋出更多的異常,成員變量的覆蓋,若子類聲明了與父類同名的變量,則父類的變量被隱藏起來,直接使用的是子類的變量,但父類的變量仍占據(jù)空間,可通過super或
20、父類名來訪問。,程序運行結果: Subclass : 200 Superclass : 100,成員變量的覆蓋,class A int x = 100; class B extends A int x = 200; void print() System.out.println(Subclass:+ x); System.out.println(Superclass:+ super.x); public static void main(String args) (new B().print(); ,成員變量的覆蓋,類對象之間的類型轉換,父類對象和子類對象的轉換需要注意以下原則:,子類對象可以
21、被視為是其父類的一個對象,反之則不可。 若一個方法的形式參數(shù)定義的是父類的對象,則調用該方法的實際參數(shù)可以使用子類對象。 若父類對象引用指向的實際是一個子類對象,則這個父類對象的引用可以用強制類型轉換轉化成子類對象的引用。,類變量 static 修飾符,我們在Person類中增加一個成員變量國籍, 并假設所有的人都來自中國,該如何實現(xiàn)?,思考?,類變量,country=China,static,靜態(tài)變量或類變量,靜態(tài)變量的訪問:類名.變量名,類變量的應用,class Count public static void main(String args) User u1=new User(); u
22、1.login(); User u2=new User(); u2.login(); ,class User static int count=0; void login() count+;System.out.println(你是第+count+位訪問者); ,類方法 static修飾符,static修飾符修飾的方法叫靜態(tài)方法,目的:使方法獨立于類的實例,使用類去訪問,類方法,調用靜態(tài)方法的語法為: classname.methodname( );,類方法的應用,public class IsPrime public static boolean prime(int x) for(int k
23、=2;k=Math.sqrt(x);k+) if(x%k=0) return false; return true; ,Class TestIsPrime public static void main(String args) for(int m=10;m=100;m+) if(IsPrime.prime(m) System.out.println(m+“是素 數(shù)。); ,類方法的應用,為什么main()方法要用static來修飾?,思考?,final 修飾符,任務五,思考:怎樣用一個方法實現(xiàn)兩種體積的計算,編程實現(xiàn)計算圓柱體和長方體的體積,抽象類,由abstract修飾的方法叫抽象方法,抽
24、象方法沒有方法體;包含抽象方法的類叫抽象類,由abstract修飾。 抽象方法必須聲明在抽象類中。 抽象方法語法: abstract type method_name(parameter_list); 聲明抽象類語法: abstract class 使用:父類中的某些抽象不包含任何邏輯,并需要在子類中重寫,子類提供這種抽象方法的實現(xiàn)細節(jié),任務五實現(xiàn),abstract class Shape . . . . . . . . . . . double length; double width; double height; double radius; . . . . . . . . . . .
25、abstract double vol(); ,class Circle extends Shape * 計算圓柱體的體積. . . . . . . . . . . . double vol() return Math.PI*radius*radius*height; ,class Rectangle extends Shape * 計算長方體的體積. . . . . . . . . . . . double vol() return length * width*height; ,抽象類,抽象類可以具有指向子類對象的對象引用,任務六,通過接口計算邊長分別為3和4的長方形面積,接口,接口的定義
26、,public interface Myinterface int compute(int x, int y); ,使用interface關鍵字定義一個接口:,接口的實現(xiàn),public calss Myclass implements Myinterface public int compute(int x, int y) return x+y; ,public calss Yourclass implements Myinterface public int compute(int x, int y) return x*y; ,注意:若實現(xiàn)接口的類不是抽象類,則在該類的定義部分必須實現(xiàn)指定接
27、口的所有抽象方法。,接口的繼承,接口可以通過關鍵字extends繼承其他接口 例如:Interface B Interface A extends B ,interface A String a = 在接口A中; void showA(); interface B extends A String b = 在接口B中; void showB(); class InterfaceABC implements C public void showA() System.out.println(a); public void showB() System.out.println(b); ,接口的繼承舉
28、例,程序運行結果: 在接口A中 在接口B中,public class UseInterface1 public static void main(String args) int x = 5,y=10; Myinterface o; Myclass my = new Myclass(); o = my; System.out.println(xy的和=“ + pute(x,y); Yourclass you = new YourClass(); o = you; System.out.println(“xy的積= + pute(x,y); ,接口類型的使用,接口可以作為一種引用類型來使用,接口
29、的優(yōu)點,接口的使用使得方法的描述說明和方法功能的分開,有助于降低程序的復雜性,使程序設計靈活,便于擴充修改。這也是Java面向對象程序設計方法中多態(tài)特性的體現(xiàn)。,任務六實現(xiàn),interface Irect double w=3,l=4; void compute(); ,定義接口,class Crect implements Irectpublic void compute() System.out.println(邊長分別為3和4的長方形面積為:+w*l); ,定義實現(xiàn)接口的類,class InterfaceDemo public static void main(String args)
30、Crect r = new Crect(); pute(); ,定義主類 創(chuàng)建接口對象,綜合實戰(zhàn),(1)根據(jù)要求實現(xiàn)Circle類: 成員變量:radius半徑 成員方法:Circle()構造方法,將半徑置0 Circle(double r )構造方法,將半徑初始化為r double getRadius()獲取圓的半徑 double getPerimeter()獲取圓的周長 double getArea()獲取圓的面積 void disp()將圓的半徑、周長和面積輸出到屏幕 (2)通過繼承Circle類,派生圓柱體類Cylinder: 成員變量:height高 成員方法:Cylinder(do
31、uble r,double h) 構造方法,初始化半徑和高 double getHeight()獲取圓柱體的高 double getVol()獲取圓柱體體積 void dispVol()將圓柱體體積輸出到屏幕,包,包將類和接口有機地組織成層次結構,與具體的文件系統(tǒng)的目錄樹結構層次一致。 包允許將類組合成較小的單元,使其易于找到和使用相應的類文件。 有助于避免命名沖突。 包允許在更廣的范圍內保護類、數(shù)據(jù)和方法。,創(chuàng)建包,package 包名1.包名2.,語法格式如下:,注意:在Java程序中,package語句必須是程序的第一條非空格、非注釋語句。,創(chuàng)建包舉例,package mypackage
32、; public class Person public String name; public int age; public void getInfo() System.out.println(name); System.out.println(age); public void eat() System.out.println(Its delicious!); ,導入包,1、使用import語句 import 包名.標識符; import 包名.*;,2、直接使用包 java.applet.Applet ap = new java.applet.Applet();,導入包舉例,packa
33、ge yourpackage; import mypackage.Person; class Student extends Person String school; public void study() System.out.println(Studding); public static void main(String args) Student s=new Student(); =John; s.age=16; s.school=清華大學; s.getInfo(); s.study(); ,訪問修飾符,訪問修飾符,訪問修飾符,訪問修飾符,訪問修飾符的使用,【實戰(zhàn)】通過對
34、任務六的Person類和Student類設置包和訪問修飾符,掌握訪問修飾符的使用,包裝類,Java語言中專門提供了包裝類,將基本類型包裝成類。與基本類型對應的包裝類有Byte 、Short 、Integer 、Long 、Character 、Float 、Double 、Boolean 和Void ,可以完成一些數(shù)據(jù)的轉換。,通過通過查看JDK幫助文檔自主學習,任務七,從一個代表帶有路徑的文件名中分離出文件名和路徑,類String字符串定義,可以用字符串常量直接初始化一個String對象 String s = Hello World ; 通過構造方法,String構造方法的使用舉例,Stri
35、ng s,s1,s2,s3,s4,s5,s6,s7; byte byteArray =(byte)J,(byte)a,(byte)v,(byte)a; Char charArray = 程,序,設,計; StringBuffer sb = new StringBuffer(歡迎); s = new String(Hello!); s1 = new String(); s2 = new String(s); s3 = new String(sb); s4 = new String(charArray,2,2); s5 = new String(byteArray,0); s6 = new Str
36、ing(charArray); s7 = new String(byteArray,0,0,1);,字符串,長度,由 length() 方法確定,語法,public int length();,返回字符串中的字符數(shù),String的常用方法字符串長度,String name = John Smith; System.out.println (name.length();,String的常用方法字符串比較,字符串 1,字符串 2,字符串 1,字符串 2,由 equals() 方法確定,檢查組成字符串內容的字符,同一個對象,用 = 運算符檢查,檢查字符串是否指向同一個或不同的對象,public cl
37、ass StringCompare public static void main(String args) String s1=abc; String s2=abc; String t1=new String(abc); String t2=new String(abc); System.out.println(s1=s2); System.out.println(s1.equals(s2); System.out.println(t1=t2); System.out.println(t1.equals(t2); ,字符串比較舉例,程序運行結果如下: true true false true
38、,思考:為什么?,Java在編譯時對字符串常量的存儲有一個優(yōu)化處理策略,相同字符串常量只存儲一份,字符串比較方法,搜索字符串,搜索字符串舉例,public class SearchString public static void main(String args) String name = JohnS; System.out.println(“Email ID 是: + name); System.out.println(“ 的索引是: + name.indexOf(); System.out.println(“. 的索引是: + name.indexOf(.); if (name.ind
39、exOf(.) name.indexOf() System.out.println(“該電子郵件地址有效); else System.out.println(“該電子郵件地址無效); ,提取字符串方法,提取字符串,. char ch; ch = orange.charAt(3); .,它將從 index(3) 中提取單個字符串 “n”并將其存儲在變量 ch 中,提取字符串舉例,public class StringMethods public static void main(String args) String s = Java is a + platform independent la
40、nguage; 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.indexOf(t, 10); System.out.println(s1.substring(3, 8); System.out.println(s2.con
41、cat(World); System.out.println(s2.replace(l, w); System.out.println(s1.trim(); ,任務七實現(xiàn),public class GetFilename private String fullPath; private final char pathSepatator=; public GetFilename(String fname) fullPath=fname; public String getName() int pos=fullPath.lastIndexOf(pathSepatator); if(pos=-1)
42、return fullPath; else return fullPath.substring(pos+1); ,public String getPath() int pos=fullPath.lastIndexOf(pathSepatator); if(pos=-1) return fullPath; else return fullPath.substring(0,pos); public static void main(String args) GetFilename fn=new GetFilename(F:avamyexamplea.java); System.out.print
43、ln(fn.getName(); System.out.println(fn.getPath(); ,更改字符大小寫方法,Hello,使用 toUpperCase( ) 方法,HELLO,HELLO,使用 toLowerCase( ) 方法,hello,語法,public String toUpperCase();,語法,Public String toLowerCase();,更改字符大小寫方法舉例,public class StringTest public static void main(String args) String name = new String(George); Sy
44、stem.out.println(“姓名是 + name); int length = name.length(); System.out.println(“姓名的長度為 ” + length + “ 個字符); System.out.println(“姓名用大寫形式表示為: ); String nameUppercase = name.toUpperCase(); System.out.println(nameUppercase); ,任務八,判斷一個字符串是否為回文,即將一個字符串進行反轉,得到的字符串與源串相同:例如原始字符串為“aba”, 逆轉后的字符串也為“aba”。,StringB
45、uffer 類,StringBuffer 用于表示可以修改的字符串 使用連接運算符 (+) 的字符串會自動創(chuàng)建字符串緩沖對象,StringBuffer 類的方法,不變性,String類,創(chuàng)建后,直接修改,不變性的概念,解決方法,StringBuffer 類,String 的對等類,表示可增加和可編 寫字符的可變序列,將字符插入到字符串中間 或附加到字符串末尾,不變性舉例,public class StringBuf public static void main(String args) StringBuffer buf = new StringBuffer(Java); buf.append
46、(“ Guide Ver1/”); buf.append(3); int index = 5; buf.insert(index, Student ); index = 23; buf.setCharAt(index, .); int start = 24; int end = 25; buf.replace(start, end, 4); String s = buf.toString(); /轉換為字符串 System.out.println(s); ,任務八實現(xiàn),public class StringReverse public static void main(String args)
47、 String s=I am a Chinese; int len=s.length(); StringBuffer dest=new StringBuffer(len); for(int i=len-1;i=0;i-) dest.append(s.charAt(i); System.out.println(dest.toString(); ,main方法的參數(shù),main方法的形參為String類的數(shù)組參數(shù)args,args可以用來接收Java命令行傳送給Java應用程序的數(shù)據(jù)。例如: java HelloEcho How are you? 123,若要將包含多個空格的單詞作為一個字符串,可用
48、引號括起來。例如: java HelloEcho How are you? 123,main方法的參數(shù)舉例,class CommandLine public static void main(String args) for(int i=0; iargs.length; i+) System.out.println(args + i + : + argsi); ,顯示所有命令行參數(shù),Java異常處理,任務九,public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int
49、operand2) int result = operand1 / operand2; return result; public static void main(String args) ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); ,異常情況,異 常,程序突然終止并將控制交給操作系統(tǒng),在運行時發(fā)生的錯誤,什么是異常,在程序運行過程中發(fā)生的、會打斷程序正常執(zhí)行的事件稱為異常(Exception),也稱為例外。,例如,零用作除
50、數(shù)(產生算術異常ArithmeticException)、 在指定的磁盤上沒有要打開的文件(產生文件未找到異常 FileNotFoundException) 數(shù)組下標越界(產生數(shù)組下標越界異常 ArrayIndexOutOfBoundsException)等,常見 異常,異常類的層次,為內部錯誤,因此在正常情況下不期望用戶的程序捕獲它們,Java虛擬機在運行時生成的例 外,由系統(tǒng)檢測, 用戶可不做處 理,系統(tǒng)將它們交給缺省的異常 處理程序,程序中可預知的問題,可能會帶來意想不到的結果,Java程序必須捕獲或聲明所有的非運行時異常,異常處理機制,捕獲異常,聲明拋出異常,throws,Try-ca
51、tch,消極的處理方式,積極的處理方式,捕獲異常,捕獲異常是通過try-catch-finally語句實現(xiàn)的。,try,finally,catch,try 和 catch 塊,try,catch,異常,單 元,任務九的解決方案一,public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result=0; try result = operand1 / operand2; catch (Exception e) System.err.pr
52、intln(發(fā)生異常: + e.toString(); e.printStackTrace(); return result; ,指明catch可以捕獲并處理的異常類型,調用異常類的方法,異常類的常用方法,實戰(zhà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.println(array+i+=+arrayi); public static voi
53、d main(String args) ExceptionDemo ex=new ExceptionDemo(); ex.exceptest(11); ,多重 catch 塊2-1,一段代碼可能會生成多個異常 當引發(fā)異常時,按順序查看每個 catch 語句,并執(zhí)行第一個類型與異常類型匹配的語句 執(zhí)行其中的一條 catch 語句之后,其他的 catch 語句將被忽略,try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) ,多重 catch 塊2-2,try . catch(Exception e) catch(Array
54、IndexOutOfBoundsException e) ,使用多重 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) System.out.println(父類異常 catch 子句); catch (ArithmeticException ae) / 錯誤 不能到達的代碼 System.out.printl
55、n(這個子類的父類是exception 類,且不能到達); ,class UnreachableCode public static void main(String args) ExceptionCode obj = new ExceptionCode(); obj.calculate(); ,finally 塊,try、catch 和 finally 塊的執(zhí)行流程,finally子句可以保證,無論try塊中是否拋出異常,finally塊中的語句都會被執(zhí)行到,這樣可以對程序的狀態(tài)作統(tǒng)一的管理。 finally語句對增強程序的魯棒性非常重要。,try 塊,finally 塊,catch 塊,無
56、異常,異常,異常處理塊的一般形式,try / 要監(jiān)控錯誤的代碼塊 catch (Exception e) / Exception e 的異常處理程序 finally / 在 try 結束前要執(zhí)行的代碼塊 ,finally塊示例,public class SystemException public static void main(String args) int a = 68; int b = 0; try System.out.println(a / b); / 0用作了除數(shù) catch(ArithmeticException e) System.out.println (“0用作了除數(shù)”); return; fi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年七年級歷史下冊 第16課 明朝的科技、建筑與文學說課稿 新人教版
- 2025瓷磚買賣合同
- Unit 3 Family Matters Understanding ideas Like Father,Like Son 說課稿 -2024-2025學年高中英語外研版(2019)必修第一冊
- 2024-2025學年高中語文 第三課 第4節(jié) 咬文嚼字-消滅錯別字說課稿2 新人教版選修《語言文字應用》
- 21 古詩三首 第一課時 說課稿-2024-2025學年統(tǒng)編版語文四年級上冊
- 2025購銷合同范本
- 森林安全監(jiān)管方案
- 企業(yè)派駐合同范例
- 網(wǎng)狀吊索拱橋施工方案
- 黔東南綠化草坪施工方案
- 2024.8.1十七個崗位安全操作規(guī)程手冊(值得借鑒)
- 中學生手機使用管理協(xié)議書
- 給排水科學與工程基礎知識單選題100道及答案解析
- 2024年土地變更調查培訓
- 2024年全國外貿單證員鑒定理論試題庫(含答案)
- 新版中國食物成分表
- DB11∕T 446-2015 建筑施工測量技術規(guī)程
- 運輸車輛掛靠協(xié)議書(15篇)
- 完整版:美制螺紋尺寸對照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- 醫(yī)院醫(yī)療質量管理制度完整版
- 粵劇課程設計
評論
0/150
提交評論