Download presentation
Presentation is loading. Please wait.
Published byΒλάσιος Αντωνιάδης Modified 6年之前
1
继承性 2、继承 为什么会有继承? 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”
建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减) 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝” 树型结构(层次化结构) 根(基类)
2
Case Study :Beetle.java
初始化和类的装载 Case Study :Beetle.java 输出: static Insect.x1 initialized static Beetle.x2 initialized Beetle constructor i = 9, j = 0 Beetle.k initialized k = 63 j = 39
3
3、多态性 表现在继承中方法的重写 子类从父类继承(extends扩展)而来 多个子类同属一个父类,所有子类有相同的父类 继承父类的方法
在不同的子类中有不同的表现形式
4
3、多态性在继承中的表现
5
3 多态 3.1 覆盖 3.2 向上类型转换 3.3 绑定 早绑定 vs 晚绑定 静态联编 vs 动态联编
6
3.1 覆盖Override 定义:子类的方法覆盖了父类的方法 相同的方法签名 方法名称 输入参数表
7
多态 什么是多态? 多态(Polymorphism),即多种状态,指程序运行时,依据对象所属 类,引发对应类的方法,从而有不同的行为
实现机制 多态的由向上类型转换和动态绑定机制结合完成
8
3.2 向上转型
9
Case Study: Shapes.java
Method call binding 早绑定 vs. 晚绑定(动态/运行时刻) Case Study: Shapes.java Java中所有的绑定都是晚绑定,除了final的方法.
10
final : This cannot be changed final for data final for methods
final for a class
11
Case Study: FinalData.java
只能被赋值一次的变量 Case Study: FinalData.java
12
有两种 final 方法: private is final. 在方法上加一把锁,防止继承者改变它的意义。
Final methods 有两种 final 方法: 在方法上加一把锁,防止继承者改变它的意义。 编译器把对该方法的调用变成 inline 调用。 private is final.
13
Final classes是不允许被继承的。 试讨论:
Final fields in a final class? Final methods in a final class?
14
一个类的作用仅仅是表达接口,而不是具体的实现细节 抽象的方法是不完全的,它只是一个申明,没有方法体.
抽象类和抽象方法 一个类的作用仅仅是表达接口,而不是具体的实现细节 抽象的方法是不完全的,它只是一个申明,没有方法体. 包含一个抽象方法的类被称作抽象类,抽象类必须要用abstract声明. 不能制造抽象类的对象. 从抽象类继承的类必须override所有的抽象方法,否则它自己成为一个抽象类. 可以申明一个抽象类但是里面没有一个抽象方法. Case : Shapes2.java
15
抽象类与接口
16
接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议 接口中的变量都是常量 定义
接口是对abstract类的进一步扩展 接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议 接口中的变量都是常量 定义 一个类符合某个或一组接口,利用implements class 类名 implements 接口1, 接口2 …… { … … … } [public] interface 接口名 { 成员变量; 方法声明; }
17
实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。
An class implements an interface to have the interface. 实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。 所有实现interface中的方法必须被申明为public. Interface可以从多个interface得到继承,但是不能继承类. 一个类可以实现多个interface.
18
但在实现接口方法的类中,修饰符为public
4、接口方法 interface Figure { double half=0.5,pi= ; void parameter(); void area(); } class Circle implements Figure { double x, y, r; Circle(double u, double v, double m) { x=u; y=v; r=m; } public void parameter() { System.out.println(x+“ “+y+“ “+r); } public void area() { System.out.println(pi*r*r); } } 无修饰 但在实现接口方法的类中,修饰符为public class Triangle implements Figure { double b, h; Triangle (double u, double v) { b = u; h = v; } public void parameter() { System.out.println(b + “ “ + h); public void area() { System.out.println(half*h*b); } Triangle t = new Triangle(2, 3); Circle c = new Circle(4, 5, 6); Figure[] f = {t, c}; for (int i =0; i < f.length; i++) { f[i].parameter(); f[i].area(); }
19
练习 1、关于被私有访问控制符private修饰的成员变量,以下说法正确的是
(B)可以被两种类访问和引用:该类本身、该类的所有子类 (C)只能被该类自身所访问和修改 (D)只能被同一个包中的类访问 2、下列代码是否存在问题? public class Test { long a[] = new long[10]; public static void main ( String arg[] ) System.out.println ( a[6] ); }
20
练习 3、下面哪个函数是public void example(){...}的重载函数( )
(A)public double example2(int m){...} (B)public int example(){...} (C)public void example2(){...} (D)public int example ( int m, float f){...} 4、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法? 5、一个Java类可以有多个父类? 6、接口里的方法必须全部都声明成abstract? 7、最终类不能派生子类,最终方法不能被重载? 8、在Java程序中,通过类的定义只能实现__________重继承,但通过接口的定义可以实现_________重继承关系。 9、______方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类或接口之中定义。______方法是不能被当前类的子类重新定义的方法。
21
练习 10、写出执行结果
22
练习 11、设计一java个程序,表达三种读物:小说、杂志、课本,每种读物有相同的属性,如页数、价格等,针对相同的属性建立一个父类,也有不同的属性,如杂志都有出版周期,而课本有适合对象(读者)。写一个测试类的main()来产生一些列随机的读物,并输出它们的信息(使用多态,参考课本程序)。
23
2018/12/3 Java语言程序设计-安全与异常 教师:段鹏飞
24
本章内容 异常 异常机制 异常声明 运行时刻系统异常
25
在进行程序设计时,错误的产生是不可避免的 如何处理错误? 把错误交给谁去处理? 程序又该如何从错误中恢复?
异常的概念 在进行程序设计时,错误的产生是不可避免的 如何处理错误? 把错误交给谁去处理? 程序又该如何从错误中恢复? 这是任何程序设计语言都要解决的问题
26
! OS 什么是异常? 在运行时发生的错误 异常情况 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 = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); 异常情况 ! 异 常 程序突然终止并将控制交给操作系统 OS
27
异常分类
28
4、运行时系统异常/错误 Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类 Error(错误)表示运行应用程序中较严重问题,与代码无关,如JVM(Java 虚拟机)出错等。 Exception(异常)是应用程序中可能的可预测、可恢复问题 RuntimeException 类表示常用操作引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界等。
29
为什么要学习异常? 异常是时时刻刻存在的 总有一些问题是编译时刻预计不到的 能否很好地处理运行时刻的异常情况是一个程序健康的标志 用户都知道软件没有不出错的,所以要把运行错误报告给用户,而不是试图隐藏 异常信息对于程序的改进至关重要
30
传统错误处理
31
Java的Exception机制处理 使用异常机制,读、写和调试代码变得清晰。它把处理错误的代码和正常的代码分开。
32
2、异常机制
33
异常发生时,程序不能继续执行,会抛(throw)出一个异常。
2、异常机制 异常发生时,程序不能继续执行,会抛(throw)出一个异常。 一个异常对象建立起来了。 当前运行的路径被停止,异常对象被弹出(eject)。 异常处理机制接管,开始寻找一个合适的地方来继续执行。
34
2、异常机制 可执行程序语句 引发的异常 语句 1 ! 语句 2 停止 throw 异常 异常处理程序 语句 3
35
异常处理机制 消极的处理方式 积极的处理方式 Try-catch throws 捕获异常 声明抛出异常
36
在异常被抛出的过程中, 任何方法都可以捕获异常并进行相应的处理。
异常传递机制 在异常被抛出的过程中, 任何方法都可以捕获异常并进行相应的处理。 f() g() ... main()
37
如果所有的方法都选择了抛出此异常, 最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。
异常传递机制 如果所有的方法都选择了抛出此异常, 最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。 g() ... f() main()
38
2、异常机制
39
2、异常机制
40
按catch先后顺序,一旦匹配,不再执行后面的catch
匹配异常不需要精确匹配 按catch先后顺序,一旦匹配,不再执行后面的catch
41
捕获所有异常 如何捕获所有异常? catch (Exception e){}
42
练习 Test类有如下方法f(int a, int b),写一个main方法调用其并进行异常处理 class Test{ void f(int a, int b){ int c = a / b; }
43
Throwable 具有两个子类,它们是 异常类的层次结构 Exception:处理用户程序应当捕获的异常情况
Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 Object Throwable Exception Error SQLException RuntimeException AWTError … ThreadDeath ArithmeticException NullPointerException NumberFormatException …
44
异 常 说 明 Java异常类 Exception 异常层次结构的根类 RuntimeException
许多 java.lang 异常的基类 ArithmeticException 算术错误情形,如以零作除数 IllegalArgumentException 方法接收到非法参数 ArrayIndexOutOfBoundException 数组大小小于或大于实际的数组大小 NullPointerException 尝试访问 null 对象成员 ClassNotFoundException 不能加载所需的类 NumberFormatException 数字转化格式异常,比如字符串到 float 型数字的转换无效 IOException I/O 异常的根类 FileNotFoundException 找不到文件 EOFException 文件结束 InterruptedException 线程中断
45
3、finally
46
try 块 catch 块 finally 块 2.3、finally 块 try、catch 和 finally 块的执行流程 异常
无异常 catch 块 finally 块
47
异常处理块的一般形式 try{ // 要监控错误的代码块 methodGeneratingException(); } catch (Exception e) { // Exception e 的异常处理程序 } finally{ // 在 try 结束前要执行的代码块 cleanup(); }
48
2.3、finally
49
如果我们定义了一个方法,该方法有可能出现异常,我们有义务告知别人,在使用该方法时进行异常处理。
3、异常声明 如果我们定义了一个方法,该方法有可能出现异常,我们有义务告知别人,在使用该方法时进行异常处理。
50
总结 异常是运行时发生的错误 可以使用 try、catch、throw、throws 和 finally 来管理 Java 异常处理。要监控的程序语句包含在 try 块内catch 块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在 finally 块中 要手动引发异常,使用关键字 throw。任何被抛到方法外部的异常都必须用 throws 子句指定 自定义异常的编写和使用
51
练习 1、关于try...catch...finally结构,描述正确的是哪项?__________
A. 必须包含多个catch B. 只能有一个catch C. finally必须有 D. 可以没有catch 2、运行下面程序时,会产生什么异常?_________。 public class X7_1_4 { public static void main(String[] args) { int x = 0; int y = 5/x; int[] z = {1,2,3,4}; int p = z[4]; } A. ArithmeticException B. NumberFormatException C. ArrayIndexOutOfBoundsException D. IOException
52
2018/12/3 谢谢
Similar presentations