JAVA基础之异常处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshunli/article/details/84401428

我们在程序运行的过程中出现错误时很正常的,出错,我们的代码执行就会停止,那么我们可以使用异常处理来帮助程序员检查可能出现的问题。

1.java中异常的分类,分为:java.lang.Error和java.lang.Exception,java.lang.Throwable类是两种的父类。

2.java异常处理机制。

2.1捕获异常

2.2声明抛出异常

3.异常处理

异常处理共涉及五个关键字:try,catch,throw,throws,finally。

自行处理:可能引发异常的语句封装在try在,而处理异常的语句在catch内。

抛出异常:在方法声明中包括throws子句,通知调用者,如果发生了异常,必须有调用者处理。

异常的例子:

package com.dh.ch06;
/**
 * 测试异常的发生
 */
public class ExceptionDemo {
	public static void main(String[] args) {
		// 0做除数
		int i = 12 / 0;
		System.out.println("结果是:" + i);
	}
}

很明显会发生异常:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.dh.ch06.ExceptionDemo.main(ExceptionDemo.java:8)

try catch例子:

package com.dh.ch06;

public class TryCatchDemo {
	public static void main(String[] args) {
		//定义一个String变量,值为null
		
		String str = null;
		try {
			if (str.equals("hello")) {
				System.out.println("hello java");
			}
		} catch (NullPointerException e) {
			System.out.println("空指针异常");
		}
	}
}
空指针异常

多重catch异常处理例子:

package com.dh.ch06;

import java.util.Scanner;

/**
 * 多重catch的使用方法
 */
class MoreCatchDemo {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int a[] = new int[2];
		try {
			// 从键盘获取一个字符串
			String str = scanner.next();
			// 将字符串转换成整数(会引发NumberFormatException)
			int num1 = Integer.parseInt(str);
			// 从键盘获取一个整数
			int num2 = scanner.nextInt();
			// 将两个数相除(会引发Exception),并赋值给a[1]
			a[1] = num1 / num2;
			// 给a[2]赋值(引发ArrayIndexOutOfBoundsException)
			a[2] = num1 * num2;
			System.out.println("OK!");

		} catch (ArrayIndexOutOfBoundsException ex) {
			System.out.println("数组越界异常!");
		} catch (NumberFormatException ex) {
			System.out.println("数字转换异常!");
		} catch (Exception ex) {
			System.out.println("其他异常!");

		}
	}
}

你输入的内容不同会引发不一样的异常。

当一个catch语句捕获到异常的的时候,后面的catch是不会再执行的。捕获异常的顺序和catch语句的顺序有有关,所以我们在安排catch语句的时候要先安排特殊的异常,然后是一些普通的异常。

嵌套异常处理:

在使用嵌套的try块时,将先执行内部的try,如果没有遇到匹配的catch快,则将检查外部的try catch。

package com.dh.ch06;

import java.util.Scanner;

/**
 * 嵌套try-catch的使用
 */
public class NestedExceptionDemo {
	public static void main(String[] args) {
		try {
			try {
				Scanner scanner = new Scanner(System.in);
				// 从控制台中传入两个参数
				int number1 = Integer.parseInt(scanner.next());
				int number2 = Integer.parseInt(scanner.next());
				// 求商运算
				double result = number1 / number2;
				System.out.println("the result is " + result);
			} catch (NumberFormatException e) {
				System.out.println("数字格式转换异常!");
			}
		} catch (ArithmeticException e) {
			System.out.println("0做除数无意义!");
		}
	}
}

finally,在某些特定的情况下,不管是否有异常,都要执行一些语句,比如数据库连接时,不管对数据库的操作是否成功,最后都需要关闭数据库。

package com.dh.ch06;

/**
 * try-catch-finally的使用,模拟数据的操作
 */
public class FinallyDemo {

	public static void main(String[] args) {

		System.out.println("请打开数据库连接......");
		try {
			System.out.println("执行查询操作");
			System.out.println("执行修改操作");
			// 使用0做除数
			int i = 12 / 0;
			System.out.println("结果是:" + i);
		} catch (Exception ex) {
			System.out.println("除零出错!");

		} finally {
			System.out.println("请关闭数据库连接......");
		}

	}
}

4。自定义异常:

自定义异常只需创建一个类继承Execption即可,

在程序中使用自定义的异常,可以分为这几个步骤:

(1):创建自定义异常类

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

(3)如果在当前抛出异常的方法中处理异常,可以使用try——catch语句块来捕获并处理,否则在方法中生声明throws关键字指明要抛给的调用者的异常。

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

例子:


package com.dh.ch06;

public class MyExecption extends Exception{
	public MyExecption(String ErrorMessage){
		super(ErrorMessage);
	}
}
/**
 * 
 */
package com.dh.ch06;

import java.nio.charset.MalformedInputException;

public class Tran {
	public static int vag(int a,int b) throws MyExecption{
		if(a<0 || b<0){
			throw new MyExecption("不可以为负数");
		}
		if(a>100 || b>100){
			throw new MyExecption("不能大于100");
		}
		return a+b;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			int result = vag(100,120);
			System.out.println(result);
		}catch(MyExecption e)
		{
			System.out.println(e.getMessage());
		}
	}

}

5.在方法中抛出异常:

throws关键字主要在声明方法的时候抛出异常,多个异常可以用逗号隔开。

例子:


package com.dh.ch06;
public class Shoot {
	public static void pop()throws NegativeArraySizeException {
		int a[] = new int[-3];
	}
	public static void main(String[] args){
		// TODO Auto-generated method stub
		try{
			pop();
		}catch(NegativeArraySizeException e){
			System.out.println("pop方法出错");
		}

	}

}

下一篇是集合与泛型

https://mp.csdn.net/postedit/84493028

猜你喜欢

转载自blog.csdn.net/sunshunli/article/details/84401428