Java学习笔记12

Java学习——Java异常处理(下)


对上篇 Java异常处理(上) 的补充

一、异常处理

(1). 捕获异常

try-catch语句嵌套

举例:

import java.io.*;
import java.text.*;
import java.util.Date;

public class HelloWorld { 
	public static void main(String[] args) {
		Date date = readDate(); 
		System.out.println("读取的日期 = " + date); 
		}
	
	//从文本中读取日期
	public static Date readDate() { 
		FileInputStream readfile = null; 	
		InputStreamReader ir = null; 
		BufferedReader in = null; 
		try {
			readfile = new FileInputStream("src/test/readme.txt"); //从指定路径下获取文件
			ir = new InputStreamReader(readfile); 
			in = new BufferedReader(ir); 	//从文本文件中获取内容
			try { 
				String str = in.readLine(); //从获取从文本中获取的内容
				System.out.println("此时从文本中获取的内容为:" + str);	//输出从文本中获取的内容
				if (str == null) { //文本内容为空
					return null; 
					}
				DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //从文本中读取到该格式的日期
				Date date = df.parse(str); 
				return date; 
				} catch (ParseException e) { 
					System.err.println("处理ParseException..."); 
					e.printStackTrace(); 
					}
		} catch (FileNotFoundException e) {
			System.err.println("处理FileNotFoundException..."); 
			e.printStackTrace(); 	
		} catch (IOException e) {
			System.err.println("处理IOException..."); 
			e.printStackTrace(); 
			}
		return null;
		}
	}

运行正常的结果:
在这里插入图片描述

分析一下在代码中东西:
e.printStackTrace(),在命令行打印异常信息在程序中出错的位置及原因。(很不推荐),除了不断的刷控制台,并没有什么用处啊,更多的都是用 log 对象输出到日志文件里面。
最外层的 try 块处理的是从指定路径下获取文件,并从文件中获取内容,捕获的异常用了两个catch捕获两种异常类型:FileNotFoundExceptionIOException
内层嵌套的 try 块 处理文本内容的固定格式内容并转换为 date形式。
FileInputStream、 InputStreamReader和BufferedReader是三个输入流。

不同的错误捕获情况:

从固定路径获取不到文件
在这里插入图片描述
文本中获取的内容不是我们需要的
在这里插入图片描述

注意:

  • 程序执行时内层如果会发生异常,首先由内层catch 进行捕获,如果捕获不到,则由外层catch捕获。
  • try-catch不仅可以嵌套在try代码块中, 还可以嵌套在catch代码块或finally代码块。

(2). 抛出异常

throws与声明方法抛出异常

在一个方法中如果能够处理异常,则需要捕获并处理。但是本方法没有能力处理该异常,捕获它没有任何意义,则需要在方法后面声明抛出该异常,通知上层调用者该方法有可以发生异常。
此关键字主要在方法的声明上使用,表示方法中不处理异常,而交给调用处处理。

格式:

 返回值 方法名称() throws Exception{
 }
throw关键字抛出异常

throw关键字表示在程序中人为的抛出一个异常,因为从异常处理机制来看,所有的异常一旦产生之后,实际上抛出 的就是一个异常类的实例化对象,那么此对象也可以由throw直接抛出。

代码:

throw new Exception("抛着玩的。") ;

二、自定义异常类

概念:
编写一个类, 继承Exception,并重写一参构造方法 即可完成自定义受检异常类型。
编写一个类, 继承RuntimeExcepion,并重写一参构造方法 即可完成自定义运行时异常类型。

示例:

class MyException extends Exception{ // 继承Exception,表示一个自定义异常类 
	public MyException(String msg){ 
	super(msg) ; // 调用Exception中有一个参数的构造 
	} 
}; 

自定义异常可以做很多事情, 例如:

class MyException extends Exception{ 
	public MyException(String msg){
	super(msg) ; //在这里给维护人员发短信或邮件, 告知程序出现了BUG。 
	 } 
 };

举例含括自定义异常,throw 与 throws 关键字:
Test.java

public class Test {
	public static void main(String[] args) throws NumberFormatException, OutNumberException {
		int a = checkNum("21",0,10);
//		int b = checkNum("aaa",0,10);
	}


	public static int checkNum(String str,int begin,int end) throws NumberFormatException, OutNumberException{	//表示方法中不处理异常,而交给调用处处理。
		try {
			int num = Integer.valueOf(str);
			if(num<begin || num>end) {
				throw new OutNumberException("输入数字的范围必须在" + begin + "与" + end + "之间!\n");	//手动抛出一个异常
			}
			return num;
		}catch(NumberFormatException e) {	//自定义异常,还需要创建一个NumberFormatException类继承Exception
			throw new NumberFormatException("请输入数字!\n");
		}
	}
}

自定义异常类 OutNumberException.java

/**
 * 自定义异常,当整数超出规定范围抛出异常
 * @author Administrator
 *
 */
public class OutNumberException extends Exception {

	public OutNumberException(String message) {
		super(message);
	}
	
}

运行结果:
在这里插入图片描述
在这里插入图片描述

总结

Java异常处理(下),( ̄︶ ̄)↗ !!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值