版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、威威 海海 职职 业业 学学 院院 情境3 产品库存管理系统面 向对象设计 学习情境描述 要求根据第一个情境的需求分析结果,学要求根据第一个情境的需求分析结果,学 生成立项目开发小组,划分角色,推选项目经生成立项目开发小组,划分角色,推选项目经 理和理和CTOCTO(首席技术师),程序员。经过讨论(首席技术师),程序员。经过讨论 给出产品库存管理系统中的实体类:入库单、给出产品库存管理系统中的实体类:入库单、 出库单、库存和用户类和控制类接口的详细设出库单、库存和用户类和控制类接口的详细设 计;利用情境计;利用情境2 2搭建好的环境,对每个类予以搭建好的环境,对每个类予以 编程实现。编程实现。
2、 所需知识 q类的定义与对象的创建类的定义与对象的创建 q构造方法的作用及应用构造方法的作用及应用 q面向对象三大特征:封装性、继面向对象三大特征:封装性、继 承性和多态性的承性和多态性的JavaJava语言实现语言实现 q抽象类与接口的应用抽象类与接口的应用 q包的创建与使用包的创建与使用 q访问控制符的应用访问控制符的应用 q异常处理异常处理 重点及难点 q构造方法的作用及应用构造方法的作用及应用 q面向对象三大特征:封装性、继面向对象三大特征:封装性、继 承性和多态性的承性和多态性的JavaJava语言实现语言实现 q抽象类与接口的应用抽象类与接口的应用 q异常处理异常处理 能力目标 q
3、培养学生面向对象的编程能力 q培养学生良好的团队合作意识及沟 通协调能力、接收新知识的能力 q培养学生分析问题、解决问题的能 力、创新能力以及逻辑思维能力 任务一 用Java语言描述现实世界中的Person。 p学生讨论确定Person的特征 譬如:name-姓名,age-表示年龄,sex-表 示性别等。 p确定Person相关的行为 譬如:吃饭、睡觉等。 用Java语言实现Person类 复习引入 面向对象与面向过程 的区别? 面向对象编程 面向对象编程是软件设计与实现 的有效方法,它将客观世界中存在 的事物看作对象,每个客观事物都 有自己的特征和行为。 对象的基本概念 变量变量 方法方法
4、在现实生活中在计算机程序中 客观世界的实体程序中对象 对象具有两方面的含义(考虑从哪些方面描述对象) 面向对象的基本概念 类是抽象的,对象是具体的 q具有相同特征和行为的对象被抽象为类。 q类是对象的模板,包括一个对象的所有数 据和代码。 类的示例类的示例 形状类形状类 动物类动物类 汽车类汽车类 对象 对对 象象 面向对象编程的核心 为计算机应用程序 提供实用基础 完成特定任务 表示现实世界中的实体 “对象是存在的具体实体,具有明确定义的状态和行为。对象是存在的具体实体,具有明确定义的状态和行为。” 对象的示例 收银员对象顾客对象 顾客 姓名:朱丽叶 年龄:28 体重:52千克 操作: 购买
5、商品 状态状态 姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克 操作: 收款 打印帐单 行为行为 消息传递 “消息指一个对象为执行某项特定操作而向另一个消息指一个对象为执行某项特定操作而向另一个 对象发送的请求对象发送的请求” 消息传递消息传递 当需要执行一项特定操作时, 通过向已为其定义此项操作 的对象发送消息来请求 对象之间通过传递消息 实现相互通信 类和对象的示例 雇员雇员 收银员系统管理员仓库管理员促销员采购经理 面向对象技术的实现 对象 类 实例化抽象 计算机世界 实体 抽象数据类型 现实世界 抽象 映射 计算机逻辑的实现 对象、类和实体的关系 类是创建对象的模板,对象是类的
6、实例 类的基本概念 现实生活中的对象 class Car int color; int name; int speed; void brake() void speedUp() void slowDown() 抽象数据类型 程序中的对象 映 射 描述 实 现 类定义 类定义中必须要写类名,应该使用Java语言合法的标识符来命名 类名不能与java中已定义好的类名相同 格式格式: 修饰符class 类名 extends 父类名 implements 接口名表 成员变量声明 方法成员声明 其中classclass、extendsextends和implementsimplements都是Java的
7、关键字。 类的声类的声 明明 类体 类中的方法 6-1 方法的定义方法的定义 方法的名称 参数列表 方法的主体 方法返回的对象类 型或原始类型 方法体 若局部变量与类的成员变量同名, 则类的成员变量被隐藏。 方法体是对方法的实现,它包括 局部变量的声明以及所有合法的 Java指令。方法体中声明的局部 变量的作用域在该方法内部。 类的定义举例 class Car int color; int name; int speed; void brake() void speedUp() void slowDown() 类的实现 任务一实现 class Person String name; int a
8、ge; String sex; public void eat() System.out.println(Its delicious!); 【实战】:定义一个名为Rectangle表示 长方形的类,它包含double类型的长 length和宽width两个数据成员和设置长 方形长宽值的方法setDim()、计算长方 形面积的方法area()。 类的实现 对象的创建 实例化初始化 对象的声明 对象的创建 声明 类名 对象名; 声明并不为对象分配内存空间,而 只是分配一个引用空间 实例化 类名 对象名 = new 类名() 例:Person p=new Person(); 运算符new为对象分配内
9、 存空间,它调用对象的构 造方法,返回引用 初始化 另外执行构造方法,可进行初始化 当一个变量被创建时,会对其中各种类型 的成员变量自动按下表进行初始化赋值。 对象的使用 访问对象成员的一般形式为: 对象名对象名. .成员变量名成员变量名 对象名对象名. .成员方法名成员方法名()() 运算符”.”在这里称为成员运算符 创建对象举例 class TestPerson public static void main(String args) Person p1=new Person(); =Tom; p1.age=12; p1.sex=male; p1.eat(); 按照前面设计P
10、erson类来充当生产车间,创建 Person对象 任务二 通过构造方法,初始化 Person类的实例,为其成 员变量赋初值。 构造方法 在Java中,任何变量在被使用前 都必须先设置初值。Java提供了 为类的成员变量赋初值的专门功 能:构造方法。 构造方法的特点 q构造方法名与类名相同。 q构造方法不返回任何值,也没有返回类型。 q每一个类可以有零个或多个重载的构造方法。 若没有为一个类显式的定义构造方法,则当创 建类对象时,编译器将自动为它创建一个没有 参数的默认构造方法. q构造方法只能在创建对象时通过new关键字 来自动调用。 注意:注意:一旦我们自己定义了构造方法,系统将不再为 我
11、们提供默认的不带参数的构造方法 。 class Person String name; int age; String sex; public Person(String s1) name = s1; public Person(String s1,int x) name = s1; age = x; 任务二实现 public Person(String s1,int x,String s2) name= s1; age = x; sex = s2; public void eat() System.out.println(Its delicious!); class TestPerson p
12、ublic 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); System.out.println(+p3.age+p3.sex); 通过构造方 法赋初值 This引用句柄 q构造方法的形式参数与类的成员变 量名相同
13、q在构造方法中调用其他重载的构造 方法,用this(参数列表)的形式 自主学习内部类的定义和使用。自主学习内部类的定义和使用。 面向对象的基本特征 封装性、继承性、多态性是面向 对象的三个主要特性。 特征特征描述描述 封装性封装性 通过提供一个或多个公有通过提供一个或多个公有 (publicpublic)方法,实现对该类)方法,实现对该类 的私有成员变量的访问和修改的私有成员变量的访问和修改 继承性继承性 通过通过extendsextends关键字实现子类继关键字实现子类继 承父类的所有非私有成员承父类的所有非私有成员 多态性多态性 通过方法重载和方法重写通过方法重载和方法重写 实现实现 方法
14、的多态性方法的多态性 封装性的引入 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); 通过实例启发学生思考为什
15、么引入封装性?通过实例启发学生思考为什么引入封装性? 封装性的实现 私有数据 公有方法 外部世 界 所谓封装,就是信息隐藏所谓封装,就是信息隐藏, ,隐藏对象的实现细节,隐藏对象的实现细节, 不让用户看到不让用户看到 封装的示例 3-1 接口 采购经理 罗杰斯先生 法拉力公司 . 迪斯尼汽车公司 . 市场经理 雪莉女士 要求 封装的示例 3-2 有选择地提供数据 法拉力公司迪斯尼汽车公司 公共 电话号码 电子邮箱 产品种类 私有 备件的制造方法 备件库存 备件的制造成本 公共 电话号码 电子邮箱 汽车种类 私有 汽车的组装方法 汽车库存 汽车的组装成本 封装的示例 3-3 实体法拉力公司实体迪
16、斯尼汽车公司 Auti Ltd.Buto Ltd. 属性 电话号码 电子邮箱 产品种类 现有存货数量 雇员详情 所需物料详情 属性 电话号码 电子邮箱 汽车种类 汽车规格 雇员详情 库存详情 经销商详情 方法 接收订单 备件的制造方法 计算备件的制造成本 计算利润率 方法 发出订单 汽车的组装方法 计算汽车的组装成本 计算工资 发出订单 编制必要报告 设置器和访问器方法 设置私有成员变量值的方法称为设置器方法,通常为: public void setX (类型 x) this.x=x; 访问私有成员变量值的方法称为访问器方法,通常为: public 类型 getX() return x; 封装
17、举例 class Person private int age; public void setAge(int i) if(i130) return; age = i; public int getAge() return age; 将其设为私有 的 方法设为公有 封装的好处 封装的优点 可进行数据检查 便于修改,增强代 码的可维护性 隐藏类的实现细节 任务三 定义Person类的子类 Student类 继承性 q类继承是指一个类可以继承其他类 的非私有成员,实现代码复用。 q被继承的类称为父类,继承父类后 产生的类称为子类。 继承 父父 类类 子类子类 父类父类/ /子类子类 是相对的是相对
18、的 Cow 类 Lion 类 Tiger 类类 Animals 类 Carnivorous 类 Herbivorous 类 Coat 类 继承的实现 class SubClass extends SuperClass Java中的继承是通过extends关键字来实现的。 关键字 任务三实现 class Student extends Person String school; public void study() System.out.println(Studding); 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(); 继承的特点 继承的特点 具有层次结构 子类继承了父类的 非私有属性和方法 Object是所有类的超类 注意注意:在Java语言中,只允许单继承。 继承的优点 继承的优点 代码的可重用性 父类的属性和方 法可用于子类 设计应用程序变 得更加简单 可以轻松地自定义 子类 构造方法的继承 构造方法不能继承,但子类在创建对象时要对继承来自父构造方法不能继承,
20、但子类在创建对象时要对继承来自父 类的成员进行初始化,因此,在创建子类时除了执行子类类的成员进行初始化,因此,在创建子类时除了执行子类 的构造方法外,还需要调用父类的构造方法,具体遵循原的构造方法外,还需要调用父类的构造方法,具体遵循原 则如下则如下: : p当子类未定义构造方法时,创建对象时将无条件地调用父类的无参 构造方法; p对于父类的含参数构造方法,子类可以在自己构造方法中使用 super调用它,但super调用语句必须是子类构造方法中的第一个可执 行语句; p子类在自己的构造方法中如果没有用super明确调用父类的构造方 法,则在创建对象时,将自动先执行父类的无参构造方法,然后再执
21、行自己定义的构造方法。 任务四 对上例中Student 类 继承了父类的所有非 私有方法进行重写 多态性 方法重写实现的方法重写实现的 动态多态性动态多态性 (运行时多态)(运行时多态) 方法重载实现方法重载实现 的静态多态性的静态多态性 (编译时多态)(编译时多态) 多态性 方法重写 方法重写方法重写 子类和父类的方法具 有相同的名称和类型 用子类对象调用子类 中的重写方法 super.methodname() 用 于调用父类中的方法 class Rectangle int length; int width; Rectangle(int len , int wid) length = le
22、n; 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 static void main(String arg) Rectangle rectObj = n
23、ew Rectangle(10, 15); rectObj.getPerimeter(); Rectangle sqObj= new Square(15); sqObj.getPerimeter(); 调用父类方法 调用子类方法 任务四实现 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!); cla
24、ss Student extends Person String school; public void study() System.out.println(Studding);System.out.println(Studding); public void getInfo() public void getInfo() System.out.println(name); System.out.println(name); System.out.println(age); System.out.println(age); System.out.println(school); System
25、.out.println(school); public static void main(String public static void main(String args)args) Person p=new Person();Person p=new Person(); =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
26、; s.school= s.school=塔山小学塔山小学; s.getInfo(); s.getInfo(); s.study(); s.study(); 多态性 【实战】:通过分析,编程实现上图 成员方法覆盖应注意的问题 q覆盖方法的方法名、返回类型和参 数列表必须与它所覆盖的方法相同 q覆盖方法不能比它所覆盖的方法访 问性更低 q覆盖方法不能比它所覆盖的方法抛 出更多的异常 成员变量的覆盖 若子类声明了与父类同名的变量,则 父类的变量被隐藏起来,直接使用的 是子类的变量,但父类的变量仍占据 空间,可通过super或父类名来访问。 程序运行结果: Subclass : 200 Superc
27、lass : 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.println(Subclass:+ x); System.out.println(Subclass:+ x); System.out.println(Superclass:+ System.out.println(Superclass:+ super.x); super.x); p
28、ublic static void main(String args) public static void main(String args) (new B().print(); (new B().print(); 成员变量的覆盖成员变量的覆盖 类对象之间的类型转换 父类对象和子类对象的转换需要注意以下原则: q子类对象可以被视为是其父类的一个对象, 反之则不可。 q若一个方法的形式参数定义的是父类的对 象,则调用该方法的实际参数可以使用子 类对象。 q若父类对象引用指向的实际是一个子类对 象,则这个父类对象的引用可以用强制类 型转换转化成子类对象的引用。 类变量 static 修饰符 我们
29、在Person类中增加一个成员变量国籍, 并假设所有的人都来自中国,该如何实现? 思考? 类变量 country=China name=“Joh n” age=15 name=“rose” age=14 name=“Tom” age=16 static 静态变量或类变量 静态变量的访问:类名.变量名 类变量的应用 class Count public static void main(String args) User u1=new User(); u1.login(); User u2=new User(); u2.login(); class User static int count=0
30、; void login() count+; System.out.printl n(你是第+count+位 访问者); 类方法 static修饰符 static修饰符修饰的方法叫静态方法 目的:使方法独立于类的实例,使用类去访问 类方法 规规 则则 可以调用其他静态方法必须访问静态数据 不能使用 super 或 this 关键字 调用静态方法的语法为: classname.methodname( ); 类方法的应用 public class IsPrime public static boolean prime(int x) for(int k=2;k=Math.sqrt(x);k+) if
31、(x%k=0) return false; return true; Class TestIsPrime public static void main(String args) for(int m=10;m name.indexOf() System.out.println(“该电子邮件地址有效该电子邮件地址有效 ); else System.out.println(“该电子邮件地址无效该电子邮件地址无效 ); 提取字符串方法 方法方法说明说明 public char charAt(int index) 此方法用于从指定位置提取单个字符,该位置 由索引指定,索引中的值必须为非负 public
32、 String substring(int index) 此方法用于提取从位置索引开始的字符串部分 public String substring(int beginindex, int endindex) 此方法用于提取 beginindex 和 endindex 位置 之间的字符串部分 public String concat(String str) 此方法用于连接两个字符串,并新建一个包含 调用字符串的字符串对象 public String replace(char old, char new) 此方法用于将调用字符串中出现某个字符的所 有位置都替换为另一个字符 public Strin
33、g trim() 此方法用于返回一个前后不含任何空格的调用 字符串的副本 提取字符串 方法方法说明说明 public char charAt(int index) 此方法用于从指定位置提取单个字符,该位置 由索引指定,索引中的值必须为非负。 public String substring(int index) 此方法用于提取从位置索引开始的字符串部分。 public String substring(int beginindex, int endindex) 此方法用于提取 beginindex 和 endindex 位置 之间的字符串部分。 public String concat(Stri
34、ng str) 此方法用于连接两个字符串,并新建一个包含 调用字符串的 String 对象。 public String replace(char old, char new) 此方法用于将调用字符串中出现某个字符的所 有位置都替换为另一个字符。 public String trim() 此方法用于返回一个前后不含任何空格的调用 字符串的副本。 . char ch; ch = orange.charAt(3); . 它将从 index(3) 中提取单个字符串 “n”并将其存储在变量 ch 中 提取字符串举例 public class StringMethods public static vo
35、id 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.indexOf(t, 10
36、); 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(); 任务七实现 public class GetFilename private String fullPath; private final char pathSepatator=; public GetFilename(String fname) fullPath=fname; public String
37、getName() int pos=fullPath.lastIndexOf(pathSepatator); if(pos=-1) 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) GetFi
38、lename fn=new GetFilename(F:avamyexamplea.java); System.out.println(fn.getName(); System.out.println(fn.getPath(); 更改字符大小写方法 Hello 使用使用 toUpperCase( ) 方法方法 HELLO HELLO 使用使用 toLowerCase( ) 方法方法hello 语法 public String toUpperCase(); 语法 Public String toLowerCase(); 更改字符大小写方法举例 public class StringTest pu
39、blic static void main(String args) String name = new String(George); System.out.println(“姓名是姓名是 + name); int length = name.length(); System.out.println(“姓名的长度为姓名的长度为 ” + length + “ 个字符个字符); System.out.println(“姓名用大写形式表示为姓名用大写形式表示为: ); String nameUppercase = name.toUpperCase(); System.out.println(nam
40、eUppercase); 任务八 判断一个字符串是否为 回文,即将一个字符串进 行反转,得到的字符串与 源串相同:例如原始字符 串为“aba”, 逆转后的 字符串也为“aba”。 StringBuffer 类 构造方法构造方法说明说明 public StringBuffer()保留保留 16 个字符的空间个字符的空间 public StringBuffer (int length)设置缓存器大小设置缓存器大小 public StringBuffer(Stringvalue) 接收字符串参数,用来设置初始内容,接收字符串参数,用来设置初始内容, 并在不重新分配的情况下保留并在不重新分配的情况下保
41、留 16 个字符个字符 的空间的空间 q StringBuffer 用于表示可以修改的字符串 q 使用连接运算符 (+) 的字符串会自动创建字符串缓冲对象 StringBuffer 类的方法 方法方法说明说明 StringBuffer insert(String s)在指定位置插入指定的字符串在指定位置插入指定的字符串 int length( )确定确定 StringBuffer 对象的长度对象的长度 int capacity() 返回当前容量返回当前容量 void setCharAt(int pos, char ch)使用使用 ch 指定的新值设置指定的新值设置 pos 指定的位置上的字符指
42、定的位置上的字符 String toString( )转换为字符串形式转换为字符串形式 StringBuffer reverse() 将此字符序列用其反转形式取代将此字符序列用其反转形式取代 StringBuffer delete(int start, int end) 删除调用对象中从删除调用对象中从 start 位置开始直到位置开始直到 end 指定的索引指定的索引 1 位置的字符序列位置的字符序列 StringBuffer deleteCharAt(int pos) 删除删除 pos 指定的索引处的字符指定的索引处的字符 StringBuffer replace(int start, i
43、nt end, String s) 使用一组字符替换另一组字符。将用替换字符串从使用一组字符替换另一组字符。将用替换字符串从 start 指定的位置开始替换,直到指定的位置开始替换,直到 end 指定的位置结束指定的位置结束 不变性 String类类 创建后 直接修改直接修改 不变性的概念 解决方法解决方法 StringBuffer 类 String 的对等类 表示可增加和可编 写字符的可变序列 将字符插入到字符串中间 或附加到字符串末尾 不变性举例 public class StringBuf public static void main(String args) StringBuffer
44、 buf = new StringBuffer(Java); buf.append(“ 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); 任务八实现 public class Stri
45、ngReverse public 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-) dest.append(s.charAt(i); System.out.println(dest.toString(); main方法的参数 qmain方法的形参为String类的数组参数 args,args可以用来接收Java命令行传 送给Java应用程序的数据。例如: java H
46、elloEcho How are you? 123 q若要将包含多个空格的单词作为一个字符 串,可用引号括起来。例如: java HelloEcho How are you? 123 main方法的参数举例 class CommandLine public static void main(String args) for(int i=0; iargs.length; i+) System.out.println(args + i + : + argsi); 显示所有命令行参数 Java异常处理 任务九 public class ExceptionRaised public Exception
47、Raised() public int calculate( int operand1, int 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); 异常情况 异异 常常 程序突然终止并将控制交 给操作系统 在运行时发生的错误在运行时发生的错误
48、什么是异常 q在程序运行过程中发生的、会打断程序正常执行 的事件称为异常(Exception),也称为例外。 例如,零用作除数(产生算术异常ArithmeticException)、 在指定的磁盘上没有要打开的文件(产生文件未找到异常 FileNotFoundException) 数组下标越界(产生数组下标越界异常 ArrayIndexOutOfBoundsException)等 常见 异常 异常类的层次 Object Throwable Error Exception RuntimeException IOException AWTError SQLException 为内部错误,因此在 正
49、常情况下不期望用 户的程序捕获它们 Java虚拟机在运行时生成的例 外,由系统检测, 用户可不做处 理,系统将它们交给缺省的异常 处理程序 程序中可预知的问题,可能会带来 意想不到的结果,Java程序必须捕 获或声明所有的非运行时异常 异常处理机制异常处理机制 捕获异常 声明抛出异常 throws Try-catch 消极的消极的 处理方处理方 式式 积极的积极的 处理方处理方 式式 捕获异常 q捕获异常是通过try-catch-finally语句实现的。 try finallycatch 要监控的程序语句包含在此块中要监控的程序语句包含在此块中 以合理的方式以合理的方式 捕获和处理异常捕获和
50、处理异常 释放资源等释放资源等 try 和 catch 块 执行 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.println(发生异常:发生异常: + e.t
51、oString(); e.printStackTrace(); return result; 指明catch可以 捕获并处理的 异常类型 调用异常 类的方法 异常类的常用方法 实战 阅读下列程序代码,分析程序可能产生的异常情 况,捕获并处理异常。 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 void main(String
52、args) ExceptionDemo ex=new ExceptionDemo(); ex.exceptest(11); 多重 catch 块2-1 q一段代码可能会生成多个异常 q当引发异常时,按顺序查看每个 catch 语句,并 执行第一个类型与异常类型匹配的语句 q执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略 try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) 多重 catch 块2-2 try . catch(Exception e) catch(ArrayIndexOutOfBo
53、undsException 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) System.out.println(父类异常父类异常 catch 子句子句); catch (ArithmeticException ae) / 错误错误 不能到达的代码不能到达的代码 System.out.pr
54、intln(这个子类的父类这个子类的父类 是是exception 类类,且不能到达且不能到达); 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 块 trytry、c
55、atch catch 和和 finally finally 块的执行流程块的执行流程 vfinally子句可以保证,无 论try块中是否抛出异常, finally块中的语句都会被执 行到,这样可以对程序的状 态作统一的管理。 vfinally语句对增强程序的 鲁棒性非常重要。 无异常 异常 异常处理块的一般形式 try / 要监控错误的代码块 catch (Exception e) / Exception e 的异常处理程序 finally / 在 try 结束前要执行的代码块 finally块示例 public class SystemException public static void
56、 main(String args) int a = 68; int b = 0; try System.out.println(a / b); / 0用作了除数用作了除数 catch(ArithmeticException e) System.out.println (“0用作了除数用作了除数”); return; finally System.out.println(“程序结束程序结束”); 思考:如果没有 finally语句,程 序运行的结果有 何不同? try-catch-finally应注意的问题 q 每个try语句至少有一个catch语句对应, catch语句的排列顺序应该从特殊到
57、一般。 q 可以用一个catch语句处理多个异常类型,这时 它的异常类型参数应该是多个异常类型的父类。 q try-cacth-finally语句中间不能插入其他语句 声明抛出异常 处理异常 处理异常 可能会导致异常 防止被调用的方法出现 异常并处理异常 type calledmethod-name (parameter-list) throws exception-list / body of method type callingmethod-name try / statements calledmethod-name(); catch(Exception e) /statements 被调用的方法被
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备维护助理工作总结
- XXX电子科技有限公司员工安全手册(安全操作规程)
- 2025-2030全球汽车主动夜视系统行业调研及趋势分析报告
- 2025年全球及中国台式振动台行业头部企业市场占有率及排名调研报告
- 2025-2030全球监视雷达系统行业调研及趋势分析报告
- 2025-2030全球碳纳米粉行业调研及趋势分析报告
- 2025年全球及中国三重四级杆液质联用仪行业头部企业市场占有率及排名调研报告
- 2025-2030全球DRM数字版权保护技术行业调研及趋势分析报告
- 2025年全球及中国细胞活力检测试剂盒行业头部企业市场占有率及排名调研报告
- 2025-2030全球可重复使用垫料气囊行业调研及趋势分析报告
- 走新型城镇化道路-实现湘潭城乡一体化发展
- 江苏中国中煤能源集团有限公司江苏分公司2025届高校毕业生第二次招聘6人笔试历年参考题库附带答案详解
- 【语文】第23课《“蛟龙”探海》课件 2024-2025学年统编版语文七年级下册
- 2024版冷水机组安装合同
- 北师版七年级数学下册第二章测试题及答案
- GB/T 21369-2024火力发电企业能源计量器具配备和管理要求
- 2025年全体员工安全意识及安全知识培训
- 2025警察公安派出所年终总结工作汇报
- 机动车检测站新换版20241124质量管理手册
- 智研咨询发布-2025年中国少儿编程行业市场竞争格局、行业政策及需求规模预测报告
- 湘教版七年级上册数学期末考试试卷带答案
评论
0/150
提交评论