没有合适的资源?快使用搜索试试~ 我知道了~
第8章异常处理与多线程[整理].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 85 浏览量
2021-10-12
05:42:32
上传
评论
收藏 1.89MB PDF 举报
温馨提示
试读
23页
第8章异常处理与多线程[整理].pdf
资源推荐
资源详情
资源评论
第八章 异常处理与多线程
8.1 异常就是 Java程序在运行过程中出错 , 异常终止的情况 .可能导致异常发生的原因有许多 ,如数组下标越
界,空指针访问 ,试图读取不存在的文件 ,网络连接中断等 .
j3_27.java - 数组下标越界违例 (Exception)
class Test{
public static void main(String[] args) {
String friends[]={"lisa","bily","kessy"}; //创建字符串一维数组有 3 个元素值
for(int i=0;i<5;i++) { //下标有 2 个越界异常发生
System.out.println(friends[i]);
}
System.out.println("this is the end");
}
}
Java中异常分两大类 :
(1)错误 (Error) --- JVM 系统内部错误 ,资源耗尽 ,内存溢出的严重情况 ,程序员无能为力 ,只能让程序终止 .
(2)违例 (Exception) --- 编程错误或偶然外在因素导致的一般性错误 .如对负数开方 , 空指针访问 ,试图读取
不 存 在 的 文 件 , 网 络 连 接 中 断 .Exception 可 预 先 预
防 .
Java 异常类层次关系图
(1)运行时异常 (RuntimeException) 是因程序员设计或实现方式不当造成的 .如果事先检查数组元素下标不
超出数组长度 ,异常就不会抛出 .(2)非运行时异常 (Non-RuntimeException)- 由编译器编译时发生的异常, 而
不是程序本身的错误,如 IOException 有时是环境造成的 ,如文件未找到或 URL 无效等 .
异常处理 Java有两种方式 :
(1) 使用 try…catch ….finally语句捕获并处理异常对象 ,其中 finally 语句可省略 . 通常将可能发生异常的语
句放在 try 语句中 .
(2) 不需处理它生成的异常 ,而是向上传递 ,由调用它的方法来处理 ,使用 throws 语句声明它可以抛出的异常 ,
而不捕捉它们 .
(1) j3_28.java – 使用 try …catch ….finally语句捕获数组下标越界异常并处理异常对象(也称运行时异常
RuntimeException )
class Test {
public static void main(String[] args) {
try { //选定捕获异常范围
String friends[]={"lisa","bily","kessy"};
for(int i=0;i<5;i++) //试图访问不存在的元素
{
System.out.println(friends[i]);
}
}
// catch 语句需要一个形参 ,指明捕获异常类型对象 , 异常发生时程序执行 catch 体内的语句 .
catch (Exception e)
{
System.out.println(e);
}
finally { //无论异常是否发生 finally 体内的语句总是被执行
System.out.println(" It's ok!"); }
System.out.println(" Out of Try!");
}
}
(2)ExceptionTest3.java -非运行时异常 (编译器编译时发生的异常 -Java 编译器从语法上要求对异常事件做
出处理,否则不能通过编译)
例如: ExceptionTest3.java - 不能通过编译,改正为 ExceptionTest4.java 就可编译。
import java.io.*;
public class ExceptionTest3{
public static void main(String[] args) {
//创建字节输入流对象
FileInputStream in=new FileInputStream("myfile.txt");
int b;
b = in.read(); //读文件
while(b!= -1)
{
System.out.print((char)b);
b = in.read();
}
in.close();
}
}
ExceptionTest4.java -(文件不存 -非运行时异常 )- (使用 try … catch ….finally语句捕获并处理异常对象)
import java.io.*;
public class ExceptionTest4 {
public static void main(String[] args) {
try{ // try{ …. } 语句块选定捕捉异常的范围,如执行的语句块有异常则抛出异常对象
FileInputStream in=new FileInputStream("myfile.txt"); //执行的语句块
int b; b = in.read();
while(b!= -1) {
System.out.print((char)b);
b = in.read();
}
in.close();
}
catch (IOException e) { //异常对象被抛出将被 catch (IOException e) 语句捕获,异常对象作为参数
传入,捕获异常对象有有多种,也就是可有多个 catch语句,此时为 IOException e,
System.out.println(e); //输出异常信息
}
finally { //善后语句无论 try{ …. } 语句是否发生异常 finally 语句都会执行
System.out.println(" It's ok!");
}
}
}
(3) j3_29.java – 使用 throws 语句声明抛出异常对象给调用方用的 catch()方法捕获异常并处理异常
import java.io.*;
class Test{
public static void main(String[] args){
Test t = new Test ();
try{
t.readFile(); //调用 readFile()方法(在调用方 readFile()方法中的 catch()方法中捕获到
这个异常并处理)
}
catch(IOException e){
System.out.println(e);
System.out.println(" 退出! ");
}
}
//在 readFile()方法中声明 IOException 异常对象 , 异常发生时该方法并不进行异常处理 ,而是抛出异常对象
给调用方 readFile()方法处理, .
public void readFile() throws IOException {
FileInputStream in=new FileInputStream("myfile.txt"); //myfile.txt 文件不存在
int b;
b = in.read();
while(b!= -1) {
System.out.print((char)b);
b = in.read();
}
in.close();
}
}
(4) Testthrow1.java---手工抛出异常
import java.io.*;
public class Testthrow1{
static void readArray(int a,int b) { //静态读数组方法
// 如果 a<b 手工抛出数组下标越界异常对象并调用捕捉异常方法输出异常提示
try {
if (a<b)
//抛出数组下标越界异常对象并在 readArray 方法中的 catch 捕获输出很可惜超过数组范围!信息
throw new ArrayIndexOutOfBoundsException (" 很可惜超过数组范围! ");
else
{int array[]=new int[a]; //创建数组长度为 a 的整型数组
array[b]=11; //在下标号为 4 位置处赋值 11 给数组
System.out.println(" 数组赋值成功! "); }}
catch(ArrayIndexOutOfBoundsException e)
{System.out.println("readArray 方法异常提示: "+e.getMessage ());
throw e;} // throw e 抛出错误给调用方及 main 方法的 readArray(4,6) 方法的 catch 捕获
}
public static void main(String[] args){
try{
//调用 readArray(6,4) 静态方法并传递参数 a=6,b=4,执行 else后语句为数次组合法赋值
readArray(6,4);
readArray(4,6);} //数组元素为 4 即长度为 4,下标为 6 数组下标越界异常
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("main 方法异常提示: "+e.getMessage ()); }
}
}
(5)j3_30.java--- 自定义抛出异常类
class MyException extends Exception {
private int idnumber; //声明整型变量 idnumber 代表出错代码
public MyException(String message, int id) { //声明 MyException() 异常方法
super(message); //返回父类信息
this.idnumber = id; // MyException 对象出错 id 为 3 代表注册人数为负值,不合理
}
public int getId() { // getId()方法 ,取得出错 Id
return idnumber;
}
}
class Test{
//在 regist(int num) 方法中声明 MyException 异常 ,并抛出异常对象
public void regist(int num) throws MyException {
if (num < 0) { //注册人数 < 0
// 抛出异常对象 new MyException(" 人数为负值, 不合理 ",3); 参数传到 MyException() 方法中设置出错
种类为 3 并取得错误代码 3,同时将抛出异常对象给调用方的 catch 捕获输出异常原因即 登记失败,出错
种类 3
throw new MyException(" 人数为负值,不合理 ",3);
}
System.out.println(" 登记人数 "+ num);
}
public void manager() { //管理注册方法
剩余22页未读,继续阅读
资源评论
czq131452007
- 粉丝: 2
- 资源: 12万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- stm32cubemx can通信 一个板子负责传感器采集 一个板子负责wifi传递到网页 网页可控制传感器板子.zip
- k8s集群搭建1.27.1版本(来源于图灵k8s笔记)
- 树莓派连接 DS18B20 温度传感器读取温度时监控客户端,服务器端连接状况,实现断线重连机制
- 最好用的富文本编辑器wangeditor
- jQuery 3.7.1
- 校园失物招领小程序源码可作毕业设计
- SAP客户端GUI740安装包(JAVA版本)
- winlibs-x86-64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt
- HTML5小游戏【愤怒的小红帽-优秀H5小游戏合集射击游戏-过关游戏】游戏源码分享下载 - fndxhm.zip
- 医学影像处理-图像分割-肿瘤识别-诊断辅助-matlab图像分割肿瘤代码-DeepBTSeg.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功