Java异常

什么是异常??

异常即异常事件,在程序运行时所出现的错误。
异常类的层次结构如下图所示
在这里插入图片描述
Throwable是所有异常类的父类,只有对象是此类(或其子类)的实例时,才能通过java虚拟机或throw语句抛出。
Throwable有两个子类:Error和Exception,分别表示错误和异常。Exception 又分为运行时异常类和非运行时异常类。
错误异常类

异常说明
Error合理的应用程序不应该试图捕获的严重错误
AssertionError指示某个断言失败
ExceptionInInitalizerError静态初始化程序中发生意外异常
IOError发生太严重的I/O错误
NoClassDefFoundError当java虚拟机或ClassLoader试图加载但无法找到类的定义时,抛出的异常
StackOverflowError当应用程序递归太深而发生栈满溢出时,抛出错误
LinkageError指示一个类一定程度上依赖于另外一个类,但在编译前一个类后,后一个类发生了不相容的改变
ThreadDeath进程死亡错误
VirtualMachineError虚拟机错误
OutOfMemoryError内存溢出或没有可用的内存提供给垃圾回收机器时,java虚拟机无法分配一个对象,这时抛出异常

运行时异常类

异常说明
RuntimeException所有运行时异常的超类
ArithmeticException算术运算异常
ArrayIndexOutOfBoundsException数组下标越界异常
ClassCastException当试图将对象强制转换为不是实例的子类时,抛出异常
IllegalArgumentException当向方法传递了一个不合法或不正确的参数时,抛出异常
NumberFormatException当试图将字符串转换成一种数值类型,但该字不能转换成此格式,抛出异常
IllegalStateException在非法或不适当的时间调用方法时,抛出异常
NullPointerException空指针异常

非运行时异常类

异常说明
ClassNotFoundException应用程序试图通过字符串名加载类,但没有找到具有指定名称的类的定义,抛出异常
java.io.IOException当发生某种I/O异常,抛出异常
java.io.FileNotFoundException当试图打开制定路径的文件失败时,抛出异常

自定义异常类
自定义异常类一般继承于Exception或其子类,定义自定义异常类的主要目的是表示特定于应用的异常,否则没有太大意义。
方法异常声明:
throw用来抛出异常,throws用来声明方法将产生某个异常,一个实际方法它们位置如下:
修饰符 返回类型 方法名(参数列表)throws 异常类名列表{

throw 异常类名;

}

异常处理

try …catch语句捕获处理异常
格式为:
try{
//可能引发异常的语句
}catch(异常类型 异常变量){
//在异常发生时执行代码
}finally{
//最终必须执行的代码,如释放资源等
}
try语句块用来启动java异常处理机制,一个try语句块可以引导多个catch语句,在try语句块里捕获到异常时,便不会执行块内剩下的语句,随后catch捕捉到该异常,finally无论发生异常与否,都必须执行,若不想执行,可在try语句块中使用System.exit(0)退出。

例:求n!要求处理如下异常:
1.输入的不是一个整数,而是实数,则不计算。
2.输入的数据是一个十六进制表示的串,则转换为十进制,在进行计算。

class Yichang extends Exception{
		String s;
		public Yichang(String a)
		{
			s=a;
		}
		public String toString() {
			return (s);
		}
	}
	import java.util.Scanner;


public class Ex2 {
	
	public static void main(String[] args) throws Yichang {
		// TODO Auto-generated method stub
          Scanner s=new Scanner(System.in);
          String a=s.next();
          try {
          for(int i=0;i<a.length();i++)
          {
       	  char q=a.charAt(i);
       	  if(q>'F') {
       	  	 throw new Yichang("数字无效");
          }
          }
          }
          catch(Yichang e) {
        	  System.out.println(e);
          }
         
          int b=Integer.parseInt(a, 16);
          System.out.print(b);
	}

}
     
	              	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值