Java核心技术----异常处理

本文详细介绍了Java中的异常处理机制,包括异常概述、如何捕获和处理异常、常见的Java异常类型、自定义异常的创建与使用,以及运行时异常的种类。强调了异常处理的原则,如避免过度使用异常、确保异常得到适当处理等。
摘要由CSDN通过智能技术生成

一、异常概述 

在程序中,错误可能产生于程序员没有预料到的各种情况,或者是因为超出了程序员控制之外的环境因素,如用户的坏数据、试图打开一个根本不存在的文件等。在Java中这种在程序运行时可能出现的一些错误称为异常。

二、处理程序异常错误

1、错误

异常产生后,如果不做任何处理,程序就会被终止。例如,将一个字符串转换为整型,可以通过Integer类的parseInt()方法来实现。

回顾:Integer.parseInt(String)的作用就是将String字符类型数据转换为Integer整型数据。

public class Demo1{ 
        public static void main(String[] args) {
	       String str="papapap";
	       System.out.println(str);
	       int i=Integer.parseInt("lalal");
	       System.out.println(i);
       }
	}

以上代码运行异常报错:

报错报出NumberFormatException(字符串转为数字)

2、捕获异常

Java语言的异常捕获结构由try、catch和finally 3部分组成。

try语句:块存放的是可能发生异常的Java语句;

catch语句:catch程序块在try语句块之后,用来激发被捕获的异常;

finally语句:finally语句块是异常处理结构的最后执行部分,无论try块中的代码如何退出,都将执行finally块。

try {
    //程序代码块
}catch(Exceptiontype01 e) {
    //Exceptiontype01的处理
}catch(Exceptiontype02 e) {
    //Exceptiontype02的处理
}
.......
finally {
    //程序代码块
}

(1)try-catch语句块

public class Demo1{ 
        public static void main(String[] args) {
        	try {
	       String str="papapap";
	       System.out.println(str);
	       int i=Integer.parseInt("lalal");
	       System.out.println(i);
        	}catch(Exception e){
        		e.printStackTrace();
        	}
        	System.out.println("aaaaaaaa");
       }
	}

(2)finally语句块

无论try-catch语句是否顺利完成都会执行 finally语句。

以下4中状况finally语句不会被执行:

  1. 在finally语句发现异常,
  2. 在前面的代码中使用System.exit()退出程序
  3. 程序所在的线程死亡
  4. 关闭CPU

三、 Java常见异常

 四、自定义异常 

用户只需继承Exception类即可自定义异常类。在程序中使用自定义异常类,大体可分为以下几个步骤:

(1)创建自定义的异常类。

(2)在方法中通过throw关键字抛出异常对象。

(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

(4)在出现异常方法的调用者中捕获并处理异常。

继承Exception类自定义异常类

public class Demo1 extends Exception{             //创建自定义异常,继承Excption类
        public MyException(String ErrorMessage) {   //构造方法
        	super(ErrorMessage);                    //父类构造方法
        }
	}

五、在方法中抛出异常

1、使用throws声明抛出异常

throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常。多个异常可使用逗号分隔。

package bao;

  
public class Demo1 {             
        static void pap() throws NegativeArraySizeException{
        	//定义方法抛出NegativeArraySizeException异常
        	int []arr=new int[-3];
        }
        public static void main(String[] args) {
        	try {
        		pap();
        	}catch(NegativeArraySizeException e) {
        		System.out.println("pap()抛出异常!");
        	}
        }
	}



/*输出结果:
pap()抛出异常!
 */



 

2、使用throw语句抛出异常

throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。

public class Demo1 extends Exception{      //自定义异常类
	String maagss;                         //定义String类型变量
       public  Demo1(String Errormessagr) {    //父类方法
    	   maagss=Errormessagr;
       }
       public String getMessage() {   //覆盖getMessage()方法
    	   return maagss;
       }
	}

使用throw关键字捕捉异常。(与上面代码结合)

package bao;
public class Demo1 {        //创建类
	 static int quotient(int x,int y) throws MyException{     //定义方法抛出异常
		 if(y<0) {                                           //判断参数是否小于0
			 throw new MyException("除数不能是负数");       //异常信息
		 } 
		 return x/y;                                  //返回值
	 }
	 public static void main(String args[]) {         //主方法
		 try {                                        //try语句包括的可能发生的异常语句
			 int res=quotient(3,-1);           //调用quotient()
		 }catch(MyException e) {            //处理自定义异常
			 System.out.println(e.getMessage());      //处理异常信息
		 }catch(ArithmeticException e) {         //处理ArithmeticMyException异常
			 System.out.println("除数不能为0");      //输出提示信息
		 }catch(Exception e) {                  //处理其他异常
			 System.out.println("程序发生了其他的异常");    //处理异常信息
		 } 
	 }
	}



/*输出结果:
pap()抛出异常!
 */



 

六、运行时异常

RuntimeException异常是程序运行过程中产生的异常。Java类库中的每个包中都定义了异常类,所有这些类都是Throwable类的子类。Throwable类派生了两个子类,分别是Exception和Error类。Error类及其子类用来描述Java运行系统中的内部错误以及资源耗尽的错误,这类错误比较严重。Exception类称为非致命性类,可以通过捕捉处理使程序继续执行。Exception类又根据错误发生的原因分为RuntimeException异常和RuntimeException之外的异常

RuntimeException异常的种类

七、异常的使用原则

在程序中使用异常,可以捕获程序中的错误,但是异常的使用也要遵循一定的规则,下面是异常类的几项使用原则。

  • 不要过多的使用异常,这样会增加系统的负担。
  • 在方法中使用try-catch捕获异常时,要对异常作出处理。
  • try-catch语句块的范围不要太大,这样不利于对异常的分析。
  • 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或子异常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情绪员Tim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值