第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 匿名类
匿名内部类:子类去掉类声明的类体 优点: 使代码更加简洁、紧凑,模块化程度更高。 匿名内部类两种实现方式:
✓继承一个类,重写其方法; ✓实现一个接口(可以是多个),实现其方法。

JAVA基础资料 day08面向对象-内部类、异常

JAVA基础资料 day08面向对象-内部类、异常

1内部类1.1 内部类的概述将类定义在另一个类的内部则成为内部类。

其实就是类定义的位置发生了变化。

在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为成员内部类和局部内部类。

备注:内部类生产的class文件为“外部类$内部类”,为了标明该内部类是属于具体哪个外部类的。

1.2 成员内部类的访问方式1.内部类可以直接访问外部类的成员属性。

(孙悟空相当于内部类飞到牛魔王的肚子里面去)。

2.外部类需要访问内部类的成员属性时需要创建内部类的对象。

1.在外部类的成员函数中创建内部类的对象,通过内部类对象对象直接访问内部类的成员。

2.在其他类中直接创建内部类的对象。

Outer.Inner inner = new Outer().new Inner();外部类访问内部类的属性编译异常分析:外部类需要访问内部类的属性时,需要创建内部类的对象访问。

有A类和B类,当A类想要直接访问B类中的成员,而B类又需要建立A类的对象来A 类中的成员。

这时,就将A类定义成B类的内部类。

比喻:孙悟空和铁扇公主。

孙悟空到了公主肚子中,就成了内部类(其实是持有外部类的对象引用)。

疑问:什么时候使用内部类呢?当我们分析事物时,发现事物的内部还有具体的事物,这时则应该定义内部类了。

比如人体是一个类,人体有心脏,心脏的功能在直接访问人体的其他内容。

这时就将心脏定义在人体类中,作为内部类存在。

内部类的优势:成员内部类作为外部类的成员,那么可以访问外部类的任意成员。

1.3 成员内部类访问细节私有的成员内部类不能在其他类中直接创建内部类对象来访问。

如果内部类中包含有静态成员,那么java规定内部类必须声明为静态的访问静态内部类的形式:Outer.Inner in = new Outer.Inner();总结:成员内部类(成员属性、成员方法)特点:1.私有的成员内部类特点:不能在其他类中直接创建内部类对象来访问2.静态的成员内部类特点:如果内部类中包含有静态成员,那么java规定内部类必须声明为静的访问静态内部类的形式:Outer.Inner in = new Outer.Inner();疑问:目前打印的num是20,如果想打印10的话,应该怎么做?解答:这时候其实在show方法中已经存在了两个this对象,一个是外部类对象,一个是内部类对象,所以要在this前面加上类名标明对应的this。

内部类和异常

内部类和异常

第8章高级特性:内部类和异常一、本章知识点●知识点1:内部类成员内部类、静态内部类、匿名内部类、局部内部类外部类又叫Top class顶级类,通常必须是public的内部类的分类:成员内部类、静态内部类、匿名内部类、局部内部类包含在外部类中的不带static的内部类,叫成员内部类(跟随外部类实例对象)包含在外部类中static修饰的内部类,叫静态内部类(类似顶级类,仅仅是可见性有区别) 内部类的特点:内部类可以很好的实现隐藏,可以使用protected修饰、private修饰符;内部类可以直接访问外部类的所有成员,包括私有的成员;外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可访问。

重点:怎样在成员内部类(实例)方法中访问外部类(实例)对象?Outter.this.属性(方法)怎样在测试类中创建内部成员类对象?Inner inner = outer.new Inner();//需要导包,内部类在外部不可见匿名内部类: 当某个方法的参数是抽象类或者接口时,在调用处直接new这个抽象类或接口,使用局部重写方法实现的方式,称为匿名内部类,这类语法在Java/Android 中极其常见!(形参是普通父类,直接new一个匿名内部类局部重写普通父类的某个方法这种语法也存在,但不太多见)1.1.1【案例1:演示、讲解】成员内部类/*外部类中创建成员内部类测试成员内部类的访问*/public class OuterClass {private String name;private int id;//创建外部类方法public void show(){System.out.println("外部类对象的姓名:"+name+" 学号:"+id);}/*** 创建成员内部类*内部类中不能声明静态的方法和属性(静态常量除外)* 1.测试创建内部类对象* 2.测试内部类如何访问外部类的属性*/public class MemberInnerClass{private String name;private int id;/*** 创建成员内部类方法*/public void Innershow(){//2 测试外部类的属性System.out.println("外部类对象的姓名:"++" 学号:"+OuterClass.this.id);//访问外部类的方法OuterClass.this.show();//show(); //成员内部类可以直接访问外部类的属性和方法//外部类不能直接访问内部类的属性和方法,如果调用可以先创建对象System.out.println("成员内部类对象的姓名:"+name+" 学号:"+id);}}}1.1.2【案例2: 练习、讲解】静态内部类//测试静态内部类和外部类在上面案例中加入静态内部类public static class StaCalss{private String name="zhangsan";private int id=10;public void staShow(){System.out.println("静态内部类对象的姓名:"+name+" 学号:"+id);//静态内部类不能访问外部类非静态的成员//外部类访问静态内部类非静态的成员通过对象.属性(方法)System.out.println(OuterClass.score);}}//测试类里加入OuterClass.StaCalss osc=new OuterClass.StaCalss();osc.staShow();1.1.3【案例3: 练习、讲解】局部内部类//在第一个例题中加入方法方法测试类中oc.showInner();public void showInner(){final int score1=5;System.out.println("外部类对象的姓名:"+name+" 学号:"+id);class PInner{private String name="zhngsi";private int id;public void showPInner(){System.out.println(name);//局部内部类只能访问其方法中声明的常量System.out.println(score1);//访问外部类的属性System.out.println("外部类对象的姓名:" + + " 学号:" + OuterClass.this.id);}}1.1.3【案例4:、讲解】匿名内部类//测试匿名内部类public abstract class Student {public abstract void sayHi();} /*** 形参是抽象父类* @param stu*/public void testStudent(Student stu){stu.sayHi();}/*** 形参是接口* @param intf*/public void testIntf(Intf intf){intf.on();intf.off();}/*** 形参是系统API某个接口* @param com*/public void testComparator(Comparator<String> com){}/**** @param args*/public static void main(String[] args) {TestAInnerType test = new TestAInnerType();test.testIntf(new Intf(){@Overridepublic void on() {System.out.println("test on");}@Overridepublic void off() {System.out.println("test off");}});new TestAInnerType().testComparator(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return pareTo(o1);}});TestAInnerType test1 = new TestAInnerType();test1.testStudent(new Student(){@Overridepublic void sayHi() {System.out.println("局部重写sayHello");}});String[] ary = new String[]{"abb","aab","abc"};System.out.println("默认升序");Arrays.sort(ary);for(String s: ary){System.out.println(s);}System.out.println("降序(匿名内部类实现)");Arrays. Sort(ary, new Comparator<String>() { //此处new出来的是接口的实//现类,是子类@Overridepublic int compare(String o1, String o2) {return pareTo(o1);}});for(String s: ary){System.out.println(s);} }}/*** 测试接口* @author Ava**/interface Intf{public void on();public void off();}●知识点2:自动拆箱和封箱引用类型和基本数据类型之间的转换,称为装箱拆箱常用包装类: Integer,Double,Character,Boolean,FloatLong装箱操作: int ->Interger将基本类型自动转换成相对应的包装类拆箱操作: Integer-> int将包装类转换成基本类型总结:字符串转基本数据类型:包装类.parseXXX(String str)方法基本数据类型转字符串:String.valueOf(基本数据类型)方法2.1.1【案例5:演示、讲解】自动拆箱和封箱//将引用类型转赋值给基本类型(Integer int),如何将字符串通过包装类转换成基本数据类型Integer it=new Integer(124);Int a=it; //将引用类型赋值给基本数据类型(自动拆箱)It=123; // 将基本数据类型赋值给引用类型(自动装箱)Sout(it.toString())Strings1=new String(“123”);Int i=Integer.parseInt(s1); //将String字符串转换成基本数据类型前提是字符串中//必须是基本数据类型的数据//如何将基本型转换成String字符串Inti=10;String s=”“;s=String.valueOf(i); //此方法返回int参数的字符串形式查APIs=i+””; //通过连接符将数字和字符串连接Integer is=i; //先将基本类型封装成引用类型s=is.toString(); //调用toString()方法返回字符串//从键盘获得一个小数,先转换成字符串,再转换成小数输出●知识点3:String、StringBuffer、StringBuilder//String类的两种创建方式特点String对象一旦创建就不能改变,如果需要大量的字符串操作,使用StringBuffer/StringBuilder;StringBuffer:线程安全的字符串序列;类似于String字符串缓冲区;通过调用某些方法可以改变该序列的长度和内容;每个字符串缓冲区都有一定的容量,只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组;如果内部缓冲区溢出,则此容量自动增大。

异常处理PPT课件

异常处理PPT课件
● InterruptedException(中断异常): 当前等待或睡眠线 程被其他线程中断时引发。
这类异常并非因设计或实现引起,是无法避免的。 但一般情况下,程序员应该提供相应的代码捕捉和 处理。
14
受检查的异常和不受检查的异常: 受检查的异常
Exception类及其非RuntimeException子类属于受 检查的异常;
9) System.out.println("After method.");
10) } 11) }
6
Exception in thread "main" ng.ArithmeticException: / by zero at ExceptionDivideBy0.method(ExceptionDivideBy0.java:4) at ExceptionDivideBy0.main(ExceptionDivideBy0.java:8)
一般情况下,程序员可不必理会这类异常,它们 虽然很严重,但很少发生。
12
(2) RuntimeException类及其子类: 表示设计或实现 方面的问题,例如:
● ArithmeticException(算术运算异常): 算术运算时发生 的异常情况,如整数相除,除数为零。 ● ClassCastException(强制类型转换异常): 把一个对象 引用转换成一个不合适的类型,如把一个对象引用转换成某 个子类类型。 ● NullPointerException(空引用异常): 需要对象引用时使 用了一个null引用。 ● ArrayIndexOutOfBoundsException(数组下标越界异常): 下标值超出了数组大小。 ● NumberFormatException(数字格式异常): 试图将非数 字格式字符串转换成数值。

8 异常和断言

8 异常和断言

18
声明抛弃异常
声明抛弃异常是Java中处理异常的第二种方式 中处理
– 如果一个方法 中的语句执行时)可能生成某种异常 , 如果一个方法(中的语句执行时 可能生成某种异常, 中的语句执行时 可能生成某种异常 但是并不能确定如何处理这种异常 异常, 但是并不能确定如何处理这种异常,则此方法应声 明抛弃异常 表明该方法将不对这些异常进行处理, 异常, 异常进行处理 明抛弃异常,表明该方法将不对这些异常进行处理, 而由该方法的调用者负责处理
19
声明抛弃异常举例
import java.io.*; public class Test12_5{ public static void main(String[] args){ Test12_5 t = new Test12_5(); try{ t.readFile(); }catch(IOException e){System.out.println(e); } } public void readFile()throws IOException { FileInputStream in=new FileInputStream("myfile.txt"); int b; b = in.read(); while(b!= -1) { System.out.print((char)b); b = in.read(); } in.close(); } }
9
异常处理举例(2) 异常处理举例(2)
程序Test12_2运行结果:java Test12_2
lisa bily kessy index err this is the end Press any key to continue...
10
捕获异常(1) 捕获异常(

接口、内部类、异常

接口、内部类、异常
局部位置:在局部位置定义的类,被称为局部内部类。
❖ 方法内部类,也称为局部内部类 ❖ 匿名内部类
成员内部类
❖ 刚才我们讲解过了,成员内部类的使用,但是一般 来说,在实际开发中是不会这样使用的。因为一般 内部类就是不让外界直接访问的。
举例讲解这个问题:Body和Heart,电脑和CPU。
❖ 成员内部的常见修饰符
为常量添加“public static final”修饰符。与此类似,在接口中定义抽象方 法时,也可以省略“public abstract”修饰符,定义default默认方法和 static静态方法时,可以省略“public”修饰符,这些修饰符系统都会默认 进行添加。
接口
接口——语法定义说明
接口中可以包含三类方法,抽象方法、默认方法、静态方法。 静态方法可以通过“接口名.方法名”的形式来调用。 抽象方法和默认方法只能通过接口实现类的实例对象来调用。 接口的实现类,必须实现接口中的所有抽象方法。
建内部类对象的具体语法格式如下:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
内部类分类
❖ 按照内部类在类中定义的位置不同,可以分为如下 两种格式:
成员位置:在成员位置定义的类,被称为成员内部类。
❖ 非静态成员内部类,简称为成员内部类 ❖ 静态成员内部类,简称为静态内部类
❖ 抽象类不能被实例化,必须被继承,抽象方法必须 被重写。
❖ 抽象方法只需声明,无需实现; ❖ 抽象类不一定要包含抽象方法,若类中包含了抽象
方法,则该类必须被定义为抽象类
接口概述
❖ 接口概述
继续回到我们的猫狗案例,我们想想狗一般就是看门, 猫一般就是作为宠物了,对不。但是,现在有很多的驯 养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高, 狗做计算等。而这些额外的动作,并不是所有猫或者狗 一开始就具备的,这应该属于经过特殊的培训训练出来 的,对不。所以,这些额外的动作定义到动物类中就不 合适,也不适合直接定义到猫或者狗中,因为只有部分 猫狗具备这些功能。所以,为了体现事物功能的扩展性 ,Java中就提供了接口来定义这些额外功能,并不给出 具体实现,将来哪些猫狗需要被培训,只需要这部分猫 狗把这些额外功能实现即可。

java课后题答案

java课后题答案

第1章Java概述1.编译java application源程序文件将产生相应的字节码文件,这些字节码文件别的扩展名为.java2.执行一个java程序fristapp的方法是运行java fristapp3.main()方法的返回类型是void4.在java代码中,public static void main方法的参数描述正确的是string args【】,string【】args5.内存的回收程序负责释放无用内存√6.java体系主要分为java ME,Java SE,JavaEE三大块第2章Java基础1.Java语言中,下列标识符错误的是40name2.java变量中,以下不属于引用类型的数据类型是字符型3.double d=5.3E12 ×4.C5.A6.for循环的一般形式为;for(初值;终值;增量),以下对for循环的叙述,正确的是初值和增量都是赋值语句,终值是条件判断语句7.当输入下面选项中3值时,将会输出default8.下面哪种方法能够支持javadoc命令/**…*/9.下面声明一个string类型的数组正确的是string str[]10.下面定义一个整型数组,不合法的是int[][]array=new int[][4];11.给定代码;。

下面叙述正确的是输出的结果为:012.java语言规定,标示符只能由字母,数字美元符$和下划线租成,并且第一个字符不能是数字;java是区分大小写的。

13.表达式1/2*3的计算结果是0;设x=2,则表达式(x++)/3的值是014.数组的长度可以用其属性lengt h获得;创建一个数组对象可以使用new关键字创建第3章面向对象基础1.在java中引用对象变量和对象间有什么关系?引用变量是指向对象的一个指针2.对象是面向对象技术的核心所在,在面向对象程序设计中,对象是累的抽象×3.构造方法何时被调用?创建对象时4.A,B,D5.在java语言中在包p1中包含包p2,类A直接隶属于p1,类B直接隶属于包p2.在类c中要使用类a的方法和类b的方法b,需要选择import p1.*; import p1.p2,*;6.java中,访问修饰符限制最高的是private第4章类之间的关系1.在java中,下面关于类的描述正确的是一个父类可以有多个子类2.在java语言中,类worker是类person的子类,worker的构造方法中有一句“super()”,该语句是调用person的构造法法。

第8章 内部类与异常类

第8章 内部类与异常类

JAVA程序设计 例子1
class China { final String song="义勇军进行曲"; private Beijing beijing; //内部类声明的对象,作为外嵌 类的成员 China() { beijing=new Beijing(); } public Beijing getBeijing() { return beijing; } String getSong() { return song; }
CCUTSOFT
JAVA程序设计
ArrayIndexOutOfBoundsException
试图访问数组中的一个非法元素时,会引发 ArrayIndexOutOfBoundsException(数组索引越 界)异常。例如: class ArrayOut {
public static void main(String args [ ]) {
JAVA程序设计
8.2.2 和接口有关的匿名类 Java允许直接用接口名和一个类体创建一个 匿名对象,此类体被认为是实现了接口的类去掉 类声明后的类体,称作匿名类 。
CCUTSOFT
JAVA程序设计
例子3 interface Cubic
{ double getCubic(double x);
}
class A
运行时异常(RuntimeException)是在Java运 行系统执行过程中出现的异常;非运行时异常 (Non- RuntimeException)是由编译器检测到的, 在程序运行过程中可能发生的异常。
CCUTSOFT
JAVA程序设计
Java编译器要求Java程序必须捕获或声明所有的非运 行时异常,但对运行时异常可以不做处理。常见的运行时 异常主要包括: ArithmeticException 如果程序试图除0,或用0取模,会产生 ArithmeticException(算术异常),其他算术操作不会产 生异常。 class Arith { public static void main (String args [ ] ) { int j = 0; j = j/j; }}

Java-08-异常处理和断言

Java-08-异常处理和断言

void printStackTrace() void printStackTrace(PrintStream s) void printStackTrace(PrintWriter w)
异常产生的原因

产生异常的原因多种多样,大致有:
系统资源不可用:如内存分配失败,文件打
开失败,数据源连接失败等等。 程序控制不当:如被零除,负数开方,数组 下标越界等等。


构造详细消息为 null 的新异常。 构造带指定详细消息的新异常。
方法原型
String getMessage()


在Exception类中定义的方法,被继承到 所有的异常类中,用于获得与异常相关的 描述信息。 在Exception类中定义的方法,用于在控 制台上显示有关异常的信息,不但有异常 的原因,还涉及产生异常的代码行。 将此 throwable 及其追踪输出到指定的 输出流。
IllegalArgumentException


异常层次结构的根类 许多ng异常的基类 算术异常,如:除数为0
方法接收到非法参数

ArrayIndexOutOfBoundsException NullPointerException
ClassNotFoundException
数组下标越界 访问空引用
Java程序设计
程序中出现的错误

程序中出现的错误,可分为两种:
错误(Error),表示编译期和系统错误,一
般不可修复,没办法捕获。 异常(Exception),表示程序本身的错误, 可修复或恢复。
Java的异常体系

在Java中,所有异常和错误都是Throwable 类的子类。

Java 2实用教程(第5版)

Java 2实用教程(第5版)

教材特色
该教材注重可读性和实用性,配备了例题和习题。该教材采用JDK1.8(JDK8)。该教材针对较难理解的问题, 都是从简单到复杂,逐步深入地引入例子,便于读者掌握Java面向对象编程思想。
该教材是《Java2实用教程》的第5版,继续保留原教材的特点——注重教材的可读性和实用性,许多例题都 经过考虑,既能帮助理解知识,又具有启发性。
作者简介
耿祥义,1995年中国科学技术大学博士毕业,获理学博士学位。1997年从中山大学博士后流动站出站,大连 交通大学教授。有教授Java语言的经验。
谢谢观看
第8章讲述常用的实用类,包括字符串、日期、正则表达式、模式匹配以及数学计算等实用类,讲解了怎样使 用StringTokenizer、Scanner、Pattern和Matcher类解析字符串。
第9章介绍了组件的有关知识,把对事件处理的讲解分散到具体的组件,只要真正理解掌握了一种组件事件的 处理过程,就会掌握其他组件的事件处理。输入流、输出流是Java语言中的经典内容,尽管Java提供了二十多种 流,但它们的用法、原理却很类似。
该教材对部分章节的内容做了调整,删除了原第16章的有关JavaApplet的内容;特别修改了原第11章,将数 据库改为MySQL数据库。该教材由耿祥义、张跃平编著。
2017年5月1日,该教材由清华大学出版社出版。
内容简介
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。每章提供的二维码可观看相应章节的视频讲解。
全书共分15章,分别介绍了Java的基本数据类型,运算符、表达式和语句,类与对象,子类与继承,接口与 实现,内部类与异常类,常用实用类,组件及事件处理,输入、输出流,JDBC与MySQL数据库,Java多线程机制, Java络编程,图形、图像与音频,泛型与集合框架等内容。
  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 内部类
相关文档
最新文档