java异常处理机制,抛出异常,自定义异常处理

要明白Java的异常处理,就要先明白异常与错误的区别

在Java中,错误和异常是两个不同的概念。

错误分为语法错误、运行时错误和逻辑错误三类。

 语法错误(编译错误)
	  指未按照 Java 语法规则书写代码而产生的错误。一般集成开发软件均能提示和标 注语法错误之处

运行时错误(语义错误) 
 	程序没有语法错误,但在运行时从外部获得不正确的数据从而导致的错误。如将11 位电话号码赋值给一个整型变量将超出其表示的数据范围而引发错误。 这类错误一般会导致程序异常终止。 

逻辑错误 
	逻辑错误是人为导致的错误,表现为程序运行结果与预期不符。如程序的本来意愿 是计算a+b,但疏忽写成了a-b,这类错误一般不会导致程序终止,但显然不可能 得到正确的结果

上述三种错误是程序从开发到调试运行阶段面临的必须处理的问题。但将错误和异常放在一起讨论时,“错误”不是指上述三种中的任何一种。

错误:
 	一般指程序运行时遇到的硬件或操作系统的错误,如内存溢出、不能读取硬盘分区、 硬件驱动错误等。这是致命的,将导致程序无法运行,同时也是程序本身不能处理的。
 异常: 
 	指在运行环境正常的情况下遇到的运行时错误。异常是非致命的,但也会导致程序 的非正常终止。 Java可以捕获和处理异常。 

java可以捕获和处理异常

在Java中通常用try-catch-finally捕获并处理异常类,用throw,throws用来抛出异常
当然Java也可以自定义异常

异常的产生:例如下面的代码在运行是将产生异常

package ch09;
public class Demo{
	public static void main(String[] args){
		int i;
		int[] a = {1,2,3,4};
		for(i = 0 ; i < 5 ; i++){
			System.out.println(" a["+i+"]="+a[i]);
		}
		System.out.println("5/0="+(5/0));
	}
}
运行的结果:
	Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4  at ch09.Demo.main(Demo.java:7) 

	Exception in thread "main" java.lang.ArithmeticException: / by zero  at ch09.Demo.main(Demo.java:8) 

使用try-catch-finally捕获和处理异常

语法结构
	try{
		要检查的语句序列:可能要抛出异常的代码
	}catch(异常类名 形参对象名){
		异常发生时处理的语句序列
	}finally{
		无论是否产生异常,都要执行这部分语句
	}
package ch09; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Scanner; 
public class Demo{ 
	 public static void main(String[] args){ 
 	 Scanner scn=new Scanner(System.in); 
 	 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 
  	System.out.println("请输入出生日期(yyyy-MM-dd):"); 
 	 String strBirth=scn.next(); 
 	 try { 
 	  	Date birth=sdf.parse(strBirth); 
   		System.out.println("生日:"+birth); 
  		}catch(ParseException pe) { 
  	 		System.out.println("生日错误!"); 
 	  		pe.printStackTrace(); 
 	 	}finally { 
  	 		System.out.println("程序执行finally块!"); 
 	 	} 
	} 
}

代码展示
在这里插入图片描述
在这里插入图片描述
多异常处理:

类似与switch-case
public class Demo{ 
 public static void main(String[] args){ 
  int i; 
  int[] a={1,2,3,4};  
  for(i=0;i<5;i++){ 
   try{ 
    System.out.print("a["+i+"]/"+i+"="+(a[i]/i)); 
   }catch(ArrayIndexOutOfBoundsException e){ 
    System.out.print("捕获到了数组下标越界异常"); 
   }catch(ArithmeticException e){ 
    System.out.print("异常类名称是:"+e); 
   }catch(Exception e){ 
    System.out.println("捕获"+e.getMessage()+"异常!"); 
   }finally{ 
    System.out.println("    finally   i="+i); 
   } 
  } 
  System.out.println("继续!!"); 
 } 
} 

代码展示
在这里插入图片描述

抛出异常

public class Demo{ 
 public static void main(String[] args){ 
  int a=5,b=0; 
  try{ 
   if(b==0) 
    throw new ArithmeticException();  //抛出异常 
   else 
    System.out.println(a+"/"+b+"="+a/b); 
  }catch(ArithmeticException e){  //方法内处理异常 
   System.out.println("异常:"+e+" 被抛出了!"); 
   e.printStackTrace(); 
  } 
 } 
} 

代码展示
在这里插入图片描述

自定义异常

自定义的异常类一般步骤: 
	(1) 自定义异常类要继承于Exception类或其子类,或其它异常类。 
	(2) 为自定义异常类声明字段(属性)成员、方法成员或重写父类的字段和方 法。 
	(3) 自定义异常类一般要定义两个构造方法:一个是无参的;另外一个是带 String参数的,目的是将此字符串传递给父构造方法,同时这个String的 信息作为该异常对象的描述信息。如果不采取上述方法,则重写toString() 方法。
	(4) 最后,起一个能标识异常情况的有意义的名字。 

示例一:没有自定义带String参数的构造方法

class CircleException extends Exception{ //自定义的异常类 
 		double radius; 
		 CircleException(double r){ 
  		radius = r; 
	 } 
 public String toString(){ 
  return "半径r="+radius+"不是一个正数"; 
 } 
} 
class Circle{    //定义Circle类 
 private double radius; 
 //方法头确定抛出某种异常 
 public void setRadius(double r) throws CircleException{ 
  if(r<0) //满足抛出异常的条件则抛出异常 
   throw new CircleException(r); 
  else 
   radius=r; 
 } 
 public void show(){ 
  System.out.println("圆面积="+3.14*radius*radius); 
 } 
} 
public class Demo{ 
 public static void main(String[] args){ 
  Circle cir=new Circle(); 
  try{ 
   cir.setRadius(-2.0); 
  }catch(CircleException e){ 
   System.out.println("自定义异常:"+e.toString()+""); 
  } 
  cir.show(); 
 } } 

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java自定义异常抛出异常对象 Java异常是一种程序运行出现的问题,通常会导致程序无法正常执行,为了避免这种情况的发生,Java提供了异常处理机制,其中自定义异常是一种非常重要的功能。 自定义异常是指通过继承Java中的Exception类或者RuntimeException类来创建自己的异常类,也可以实现自己的异常类。在使用自定义异常,需要为异常类提供一个有意义的名称,并提供相应的构造函数。当程序出现异常,可以将这个异常对象作为参数传递给异常处理程序。 一般情况下,我们可以自定义异常来处理特定的异常情况,这样就可以提高代码的可读性,同也可以让程序能够更好地将问题传递给用户。自定义异常还可以提高代码的可维护性,因为它使得程序员能够更容易地记住代码中可能会出现的各种异常情况。 在Java中,抛出异常对象是通过throw语句来完成的。当程序运行到某个位置,如果出现了问题,就可以抛出一个异常对象,这个对象会被传递给相应的异常处理程序。在抛出异常,可以选择使用Java中的预定义异常类,也可以使用自定义异常类。 需要注意的是,Java中不允许抛出任何类型的异常对象,只能抛出从Throwable类派生出来的类,这包括Error类、Exception类等。因此,在自定义异常,需要合理选择继承的父类,并确保异常类的使用不会对程序的稳定性造成影响。 总之,Java自定义异常抛出异常对象已成为Java程序设计的重要部分,它能够提高代码的可读性和可维护性,同也可以方便程序员对不同异常情况进行处理,使得程序更加健壮。因此,在Java程序设计中,需要充分利用自定义异常抛出异常对象的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值