java异常类

1:了解异常

异常是程序设计不可避免的,java中的主要是两种A:Exception B:Error
它们都有一个共同特点,都是throwable的子类,接下来分别介绍一下A B
A:Exception 是异常的意思,这个是一般性的错误,一般是可以干预的,他有几个常用的子类

  1. NullPointException :这是最常遇见的错误之一,空指针,所谓空指针,就是单单定义了一个类型的变量,没有在堆终给他指定任何的对象,当用这样的变量就会产业空指针异常
  2. IndexOutputException :越界异常,一般在使用集合时,当获取使用的下表超过它的总数,就会产生这个异常
  3. ArrayIndexOutputException:数组越界,和上一个差不多
  4. StringIndexOutputException:当有String类型,通过charAt()方法获取指定下表元素时,超过他的范围就会产生这个异常
  5. ClassCastException:类型转换异常
    还有等等一系列异常

B:Error是错误的意思,这是比较严重的问题,一般不可人为干预,当出现这个错误时,需要重启虚拟机重新运行

2 :异常的分类

异常类一般分为运行期异常和编译器异常
A:运行期异常
运行期异常,是虚拟机在执行时遇到的异常,一般有空指针和数组越界等等,当产生运行期异常时,虚拟机会根据异常类型,创建一个对象,并将这个异常抛出,然后查看有没有来捕捉这个异常,如果没有捕捉,虚拟机将会停止不执行接下来代码,在停止之前将这个错误的信息打印出来,如果有写捕捉,虚拟机将会走捕捉的程序,虚拟机执行下面的代码。
B:编译器异常
编译器异常是,在代码编写时,有部分代码,java提醒你,你这部分代码可能会产生异常,可以声明一下这个异常或者捕捉,例如IO流部分可能会产生FileNotFoundException异常,需要提醒或者捕捉都可以

3:处理异常

在java编写时我们可以捕捉和声明异常
A:声明异常:就是在java,我们可以使用throws()将可能出错的异常声明一下,你只需要提醒一下,不需要自己给方针,当外界调用这个方法时,可以将这个异常继续往下抛或者捕捉一下这个异常
B:异常捕捉
在java编写时,对于异常还可以进行抛出来,如果抛出来,就不需要声明,异常捕捉的格式是

try {
		代码块A
		代码块B
		//在try里放的是可能出错的代码
		
	} 
	//catch括号里放的时,可能出现的类型异常,这里放的是父类Exception将一切异常进行捕捉
	catch (Exception e) {
	
		代码块C    //catch里放的是,如果出现了异常将要执行的代码块
		
	}
		
	finally {
		代码块D
		//finally存放的是无论这个程序无论有没有产生异常都会执行的代码块
		//不管怎么样都会执行的代码块
		
	}
	

注意

  1. 如果在代码块部分产生了异常,无论有没有捕捉到,try{}这个方法体里的代码都不会执行
    即如果代码块A出现了异常,无论有没有捕捉到代码块B都不会执行
  2. 如果代码块A和代码块B都没有异常,则不会走catch里的代码块C,但会走finally里的代码块D
  3. 如果代码块A或B出现了异常,则匹配有没有捕捉到,如果没有捕捉到,则虚拟机也会执行代码块D后关闭虚拟机,但执行顺序不确定
  4. 如果有错误并捕捉到,会一步步执行,并跳出这个try()…catch执行下面的代码

捕捉有返回值时finally执行时机

		int a=100;
	try {
		a=200;
		代码块A
		return a;
	} catch (Exception e) {
		a=300;
		代码块B
		return a;
	}	finally {
		a=400;
		代码块C
		return a;
	}

A:如果代码块A有异常被捕捉到时
代码首先进去catch时,当执行到return B时,(当执行return时,就会退出这个方法),系统会查看这个try catch有没有finally代码块,发现有,则会在返回catch里的a时,执行finally类,将finally里的a进行返回出来
B:当没有被捕捉到,直接进finally,返回finally里的a

		int a=100;
	try {
		a=200;
		代码块A
		return a;
	} catch (Exception e) {
		a=300;
		代码块B
		return a;
	}	finally {
		a=400;
		代码块C
	}

例如这个代码块,在finally只有赋值没有返回
A:如果代码A出现异常并捕捉时,同样会先进入catch,当执行到退出语句时进去进入finally代码块,但没有返回只有将a赋值,这样返回的就是catch里的a的值
B:没有捕捉到,返回try里的a

4:自定义异常类

例如当进行外部传参数时,如果传的是年龄,则不可能有负数,但这种异常java内部是捕捉到的,这就需要异常类来
A:异常类首先要创建一个类,但这个类要继承Exception类或者RuntimeException类,Exception是编译期异常RuntimeException是运行期异常

public class AException extends Exception {
	private int age;

	public AException(String s) {
		
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

public class ExceptionTest  {
	public void run(int a) throws AException {
		if(a<0) {
			throw new AException("年龄不能为负数");
		}else {
			
		}
	}
	public static void main(String[] args) throws AException {
		ExceptionTest e=new ExceptionTest();
		e.run(-3);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值