栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、异常概述 

在程序中,错误可能产生于程序员没有预料到的各种情况,或者是因为超出了程序员控制之外的环境因素,如用户的坏数据、试图打开一个根本不存在的文件等。在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()抛出异常!");
        	}
        }
	}







 

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("程序发生了其他的异常");    //处理异常信息
		 } 
	 }
	}







 

六、运行时异常

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

RuntimeException异常的种类

七、异常的使用原则

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号