第08章 内部类与异常

合集下载

第六章 内部类与异常类

第六章 内部类与异常类

嵌套try-catch-finally语句
Java语言的try-catch-finally语句可以嵌套,即
在try块中可以包含另外的try-catch-finally语句。
【示例程序c11_3.java】 使用嵌套的try-catch-finally语句自行处理异常。
public class c11_3 { static int a,b,c; public static void main(String args[ ]) { try { a=10; b=0; try { c=a/b; System.out.println("a/b = " + c); } catch (IndexOutOfBoundsException E) { System.out.println("捕捉超出索引异常 ..."); } finally { System.out.println("嵌套内层的 finally区块 "); } } catch(ArithmeticException E) { System.out.println("捕捉数学运算异常: b="+b); } finally { System.out.println("嵌套外层的 finally区块 "); if(b == 0) System.out.println("程序执行发生异常 !"); else System.out.println("程序正常执行完毕 !"); } } }
例子
class China { final String nationalAnthem="义勇军进行曲"; Beijing beijing; China() { beijing=new Beijing(); } String getSong() { return nationalAnthem; } class Beijing //内部类 { String name="北京"; void speak() { System.out.println("我们是"+name+" 我们的国歌是:"+getSong()); } } } public class Example4_30 { public static void main(String args[]) { China china=new China(); china.beijing.speak(); } }

Java开发基础PPT课件

Java开发基础PPT课件
运算相关注意事项
使用JDK库实现常用算法及函数 数值类型的自动转换规则 强制类型转换及截位 枚举类型的使用
字符串
字符串
代码点与代码单元 字符子串与拼接 相等的比较
注意事项
编码转换方法 子串下标计算 拼接的性能 String 方法 intern() 的应用
注释
注释
单行注释 多行注释 文档注释
–32,768 to 32,767
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
1 byte
–128 to 127
Type float double
Storage Requirement 4 bytes
8 bytes
Range
approximately ±3.40282347E+38F (6–7 significant decimal digits)
大纲
☞ 对象构造顺序
方法参数传递:按值调用 类设计基本原则
对象构造顺序
对象构造顺序
类装载时,按类声明中出现的次序执行静态初始化块或静态初始化 语句。
对象构造时: 所有数据域初始化为默认值 按类声明中出现的次序执行初始化块或初始化语句。 如果构造器第一行调用了第二个构造器,则跳转到第二个构造器 中执行,直到返回。 执行这个构造器的主体部分。
Java开发基础
目录
☞ 第1章 Java体系结构
第2章 基本程序结构设计 第3章 对象与类 第4章 继承 第5章 接口与内部类 第6章 事件处理 第7章 异常与调试 第8章 流与文件
Java体系结构
Java体系结构包括如下四大类技术:
Java程序设计语言 Java class文件格式 Java API Java 虚拟机

第八讲 常见错误及异常处理

第八讲 常见错误及异常处理


当程序发生异常时, 当程序发生异常时,会生成某个异常类的对 象。该异常对象中包含了异常的类型和出现异常 时程序的运行状态以及对该异常的详细描述, 时程序的运行态以及对该异常的详细描述,并 将交由Java运行系统来处理。 Java运行系统来处理 将交由Java运行系统来处理。
例:用Java异常机制处理错误 异常机制处理错误 01:public class TestException : 02:{ : 03: public static void main(String[] args) : 04: { : 05: try : 06: { : 07: int reslut=new Test().devide(5,0); : 08: System.out.println("The reslut is "+reslut); : 09: } :
Java异常处理 异常处理
清华大学继续教育学院 IT教育培训中心 教育培训中心
常见错误和异常处理
本章主要介绍编程中常见的错误,以及在程序运行过程中出现 错误或者异常现象时,Java语言的处理机制和方法,包括异 常的概念、异常的处理方法等内容。
• 异常的概念 异常是程序执行期间发生的错误。 异常是程序执行期间发生的错误。 异常通常分为三种类型: 异常通常分为三种类型: 第一类是Java虚拟机由于某些内部错误产生 第一类是 虚拟机由于某些内部错误产生 的异常,这类异常不在用户程序的控制之内, 的异常,这类异常不在用户程序的控制之内,用 户不需要处理这类异常; 户不需要处理这类异常; 第二类是标准异常, 第二类是标准异常,这类异常通常是由程序 代码中的错误产生的,例如被0除 代码中的错误产生的,例如被 除、数组下标越界 这是需要用户程序处理的异常; 等。这是需要用户程序处理的异常; 第三类是用户根据需要在程序中自定义的异 常。

Java开发基础 PPT课件

Java开发基础 PPT课件

大纲
接口与抽象类的选择
☞ 克隆及其注意事项
接口与回调 内部类、局部类、匿名类 JDK的Proxy与CGLib的动态代理区别
克隆及其注意事项
浅克隆与深克隆
默认实现是浅克隆(本地方法实现)(java.util.AbstractMap默 认实现是浅克隆)
如果原始对象与浅克隆对象共享的子对象是不可变的,则不 会产生负面问题。
反射
允许程序在运行时透过Reflection APIs取得任何一个已知名称的class 的内部信息,并可于运行时改变fields内容或唤起 methods。
可动态获取的内容包括
modifiers(诸如public, static ) superclass(例如Object) interfaces(例如Cloneable fields和methods等
的属性 Java 中所有的对象都继承至 ng.Object ,因此都拥有
toString() , equals() ,wait() 等方法
继承的约束
不能实现多继承 父类提供了参数构造函数,子类必须实现 子类不能降低父类方法的可见域 子类不能抛出比父类构造函数或方法更多的异常 子类不能扩展父类的 final 方法
象类不应该依赖于其细节,细节。 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方

类设计基本原则(续)
包设计的基本原则
包内聚性原则(包粒度) 重用发布等价原则(REP):重用的粒度就是发布的粒度。 共同重用原则(CRP):一个包中的所有类应该是共同重用的。 如果重用了包中的一个类,那么就要重用包中的所有类。 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应 该是共同封闭的。一个变化若对一个包产生影响,则将对该包中 的所有类产生影响,而对于其它的包不造成任何影响。 考虑可重用性与可开发性的平衡。

内部类

内部类
3
成员内部类
成员内部类,声明为类成员的非静态类。
class OuterClass { class InnerClass {...} }
内部类的声明不带有static关键字。它可以访问外部类中的 任何成员。反过来,外部类也可以访问内部类的任何成员。 在能够调用内部类的方法,以及为其数据字段赋值之前,父 类必须首先创建内部类的实例。 语法示例: MemberInnerClassTest.java 应用示例:TalkingClockTest.java
内部类
北京理工大学计算机学院 金旭亮
什么叫内部类(inner class)?
其定义直接包容于另一个类(或一方法)内部的 类。 内部类可看成是外部类的成员,其地位等同于类 中的其他成员。 内部类编译以后,每个内部类都会产生一 个.class文件,其文件名通常具有以下格式:源自外部类名$内部类名.class
匿名内部类对象可以访问外部类的成员。 语法示例:AnonymousInnerClassTest.java
6
匿名内部类的使用场景
多用于创建一个实现了某接口的对象或派生自某 抽象基类的对象 用匿名内部类重写前面的定时调用示例: TalkingClockTest2.java 实现键盘和鼠标事件驱动示例:Inventory.java
2
静态内部类
一个声明为static的内部类。
class TopClass { static class NestedClass{...} }
静态内部类不能访问其外部类的对象的实例数据, 但可以访问其静态成员(包容字段与方法)。 语法示例: StaticInnerClassTest.java 应用示例:MinMax.java
7
4
本地内部类

异常和异常类的概念.doc

异常和异常类的概念.doc

异常和异常类的概念
程序编译通过后,并不意味着运行时就能得到正确的结果。

很可能由于编程时考虑不周或运行时遇到一些特殊情况(如:除法运算时除数为0,访问数组时下标越界,要打开的文件不存在等等),结果出现中断程序正常运行的情况。

Java把这类导致程序中断运行的错误称为异常(英文:exception,意思:例外),Java有一系列机制来捕获、处理异常。

Java有一个著名的观点:“万物皆对象”,因此,也把异常当作对象来处理(异常是异常类的对象),当发生异常时创建异常对象。

常见的异常类都位于ng包中,例如:
ArithmeticException:除数为0时的算术异常
NullPointerException:没有给对象分配内存空间,而又去访问对象的空指针异常
FileNotFoundException:找不到文件的异常
ArrayIndexOutOfBoundsException:数组元素下标越界异常
NegativeArraySizeException:数组长度为负数异常
NumberFormatException:数据格式不正确异常ClassNotFoundException:找不到相应类的异常。

Java从入门到精通(第6版)

Java从入门到精通(第6版)

第16章反射与注解
16.1反射 16.2 Annotation注解功能 16.3实践与练习
第17章数据库操作
17.1数据库基础 17.2 JDBC概述 17.3 JDBC中常用的类和接口 17.4数据库操作 17.5实践与练习
第18章 Swing程序设计
18.1 Swing概述 18.2 Swing常用窗体 18.3常用布局管理器 18.4常用面板 18.5文字标签组件与图标 18.6按钮组件 18.7列表组件 18.8文本组件 18.9表格组件
第19章 Java绘图
19.1 Java绘图类 19.2绘制图形 19.3绘图颜色与画笔属性 19.4绘制文本 19.5显示图片 19.6图像处理 19.7实践与练习
第20章多线程
20.1线程简介 20.2创建线程 20.3线程的生命周期 20.4操作线程的方法 20.5线程的优先级 20.6线程同步 20.7实践与练习
Java从入门到精通(第6版)
读书笔记模板
01 思维导图
03 读书笔记 05 目录分析
目录
02 内容摘要 04 精彩摘录 06 作者介绍
思维导图
本书关键字分析思维导图
语言
实例
实践 类
数据库
对象
概述
第版

程序 设计
基础
注释
第章
接口
方法
类型
结构
文本
内容摘要
内容摘要
《Java从入门到精通(第6版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细讲解了 使用Java语言进行程序开发需要掌握的知识。全书分为23章,内容包括初识Java,熟悉Eclipse开发工具,Java 语言基础,流程控制,数组,类和对象,继承、多态、抽象类与接口,包和内部类,异常处理,字符串,常用类 库,集合类,枚举类型与泛型,lambda表达式与流处理,I/O(输入/输出),反射与注释,数据库操作,Swing 程序设计,Java绘图,多线程,网络通信,奔跑吧小恐龙,MR人脸识别打卡系统。书中所有知识都结合具体实例 进行讲解,涉及的程序代码都给出了详细的注释,可以使读者轻松领会Java程序开发的精髓,快速提高开发技能。

Java面向对象程序设计第6章内部类与异常类Meili精品PPT课件

Java面向对象程序设计第6章内部类与异常类Meili精品PPT课件
•在抛出的方法定义后加上 throws Exception
•功能:在调用方法和可能产生的异常的被调 用方法之间建立起系统处理异常所需的联系
void f() throws TooBig,TooSmall,OldStyle{ // body of f()
}
TestDiv (写一个方法,throws 异常)
内部类例
public class China{ private String song="义勇军进行曲"; public void test(){}
class Beijing{ String name="北京"; void speak(){ System.out.println("Our capital is: "+name+",Our national song is :"+song);}} public static void main(String[] args) { China c= new China(); c.new Beijing().speak();}}
和接口有关的匿名类
Java允许直接用接口名和一个类体创建一个匿名对象, 此类体被认为是实现了Computable接口的类去掉类声 明后的类体,称作匿名类。
下列代码就是用实现了Computable接口的类(匿 名类)创建对象:
new Computable() { 实现接口的匿名类的类体 }
6.3 异常类
6.2 匿名类
匿名内部类:子类去掉类声明的类体 优点: 使代码更加简洁、紧凑,模块化程度更高。 匿名内部类两种实现方式:
✓继承一个类,重写其方法; ✓实现一个接口(可以是多个),实现其方法。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章 内部类与异常类
8.1 内部类
在java中有时候会需要只定义了一两个方法的类或者
接口,该类也只被某一个类调用(实现)。 此时,我们可以使用内部类。
内部类:在一个类中定义的另一个类
外嵌类:包含内部类的类称为内部类的外嵌类。 外嵌类的成员变量在内部类中仍然有效,内部类中的
方法也可以调用外嵌类中的方法。
表明try部分可能发生的异常,这些子类乊间不能有父子 关系,否则保留一个含有父类参数的catch即可。
8.3.2 自定义异常类
通过扩展Exception类定义自己的异常类,然后根据
程序的需要来规定哪些方法产生这样的异常。
一个方法在声明时可以使用throws关键字声明要产生
的若干个异常,并在该方法的方法体中具体给出产生 异常的操作,即用相应的异常类创建对象,并使用 throw关键字抛出该异常对象,导致该方法结束执行。
8.3.1 try~catch语句
Java使用try~catch语句来处理异常 将可能出现的异常操作放在try~catch语句的try 部分 将发生异常后的处理放在catch部分
当try部分中的某个方法调用发生异常后,try部分
将立刻结束执行,而转向执行相应的catch部分
try~catch语句可以由几个catch组成,分别处理
内部类还可以定义在方法体内 public class Hapiness{
interface Smiler{ public void smile(); }
public static void main(String[] args){ class Happy implements Smiler{ public void smile(){ System.out.println(":-}"); } }
其中booleanExpression必须是求值为boolean型的表
达式;messageException可以是求值为字符串的表达 式。
8.4断言
assert booleanExpression;
booleanExpression=false,程序从断言语句处停止执行
booleanExpression=true,程序从断言语句处继续执行。
如果方法的传递参数是一个接口,此时可以利用匿名
类作为参数传递给该方法。 例如
Void f(Computable x)//参数x的类型为接口
在调用f方法时,可以传递一个匿名类给参数x:
f(new Computable (){……})
示例8-3演示了接口有关的匿名类的用法
注意
单纯的嵌套类一般不建议使用!但它在java核心类中
8.2.1与子类有关的匿名类
如果没有显示声明一个类的子类,却又想用这个子
类来创建对象,该怎么办?
Java中可以直接用一个类的类体来创建一个子类
对象
该类体被认为是一个子类去掉类声明以后的类体,
称为一个匿名类
8.2.1与子类有关的匿名类
匿名类就是一个子类,由于无名可用,所以不可能用
匿名类声明对象,但却可以直接用匿名类创建一个对 象 例如:Bank是类,则以下代码就是用Bank的一个子 类(匿名类)创建对象
程序必须在try~catch块语句中调用能发生异常的方法,
其中catch的作用就是捕获throw方法抛出的异常对象
8.4断言
断言语句在调试代码阶段非常有用,断言语句一般用
于程序不准备通过捕获异常来处理的错误 使用关键字assert声明一条断言语句,断言语句有以 下两种栺式: assert booleanExpression; assert booleanExpression:messageException;
发生的相应异常
8.3.1 try~catch语句
try~catch语句的栺式如下:
try { 包含可能发生异常的语句 } catch(ExceptionSubClass1 e) { …} catch(ExceptionSubClass2 e) { …}
各个catch参数中的异常类都是Exception的某个子类,
都存在,如接口Map中的Entry,我们应该了解并能解读 这种方法.
匿名类相对而言有用得多,在解耦合和事件回调注册中
很常见,大家应该对它的运用融会贯通.
用得好都是优点,用得不好都是缺点。
8.3 异常类
所谓异常就是程序运行时可能出现一些错误
Java的异常出现在方法调用过程中,即在方法调用过
New Bank() { 匿名类的类体; } Class 匿名类 extends Bank {定义}
匿名类对象 a= new 匿名类()
8.2.1与子类有关的匿名类
匿名类可以继承父类的方法也可以重写父类的方法

使用匿名类时,必然是在某个类中直接用匿名类创建对
象,因此匿名类一定是内部类,匿名类可以访问外嵌类 中的成员变量和方法
程中抛出异常对象,终止当前方法的继续执行,同时 导致程序运行出现异常,并等待处理 例如,流对象在调用read方法读取不存在的文件时, 会抛出异常对象:IOException,该对象可以通过调 用以下方法得到或输出有关异常信息
Public String getMessage(); Public void printStackTrace(); Public String toString();
的实例名.
8.2 匿名类
// 定义类 Public class Runner implements Runnable{ public void run(){ // do sth } }
// 创建实例 Runner runner=new Runner();
Runnable runner=new Runnable(){ public void run(){ // Run statememnt } }
assert booleanExpression:messageException;
booleanExpression=false,程序从断言语句处停止执行,
并输出messageException表达式的值,提示用户出现了 怎样的问题;
若看不到错误信息,可能是因为java的编译器关闭了断
言语句,可以用 java -ea Example8_6 来启用断言语 句
匿名类的类体中不可以声明static成员变量和static方法
8.2.1与子类有关的匿名类
由于匿名类是一个子类,但没有类名,所以在用匿名类
创建对象时,要直接使用父类的构造方法
尽管匿名类创建的对象没有经过类声明步骤,但匿名对
象的引用可以传递给一个匹配的参数,匿名类的常用的 方式是向方法的参数传值。
8.2.2 和接口有关的匿名类
假设Computable是一个接口,Java允许直接用接口名
和一个类体创建一个匿名对象,此类体被认为是实现了 Computable接口的类去掉类声明后的类体,称作与接 口有关的匿名类。如:
new Computable() { 实现接口的匿名类的类体 };
8.2.2 和接口有关的匿名类
Happy happy=new Happy(); happy.smile(); }
}
8.2 匿名类
有时候,内部类声明只为在类里面用它来创建一个对
象(只用一次),因而,对很多情况而言,这个类有 没有名字,或名字叫什么无关紧要。
可有可无的东西,干脆不要!
为了简洁开发,类名使用匿名,程序员关心的只是它
8.1 内部类
内部类的类体中不可以声明类变量和类方法。外嵌类的
类体中可以用内部类声明对象,作为外嵌类的成员。 内部类仅供它的外嵌类使用,其他类不可以用某个类的 内部类声明对象 例如:某种类型的农场饲养了一种牛,但不希望其他农 场饲养,则,可以将这种牛作为该农场的内部类。(例 8-1)
8.1 内部类
相关文档
最新文档