• 150403

    文章

  • 888

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Java学习之异常


一、什么异常。

二、如何处理异常

-try-catch-finally

-throw

-throws

-自定义异常

-异常链

三、异常本质上是程序上的错误,错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。

括号没有正常配对;语句结束后少写了分号;关键字编写错误;

①使用空对象的引用调用方法。空指针异常。

 

②数组越界

 

③除数为0

这些都是运行期间错误产生的表现。

 

四、在程序运行过程中,意外发生的情况,背离我们程序本身意图的表现,都可以理解为异常。通过合理的异常处理,可以更好地提高程序的健壮性。

五、Throwable是java的当中异常的根类,他有两个重要的子类:Error和Exception

Error是程序无法处理的错误,表示运行应用程序中较严重的问题。java虚拟机出现的一些列问题。

虚拟机错误、内存溢出错误、线程死锁错误。它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,及时确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。

Exception是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理。

 

六、在java应用程序当中,异常处理机制为:

抛出异常、捕捉异常。

当一个方法当中出现错误引发异常的时候,方法会去创建异常对象并交付给运行时系统进行处理。那这个异常对象就会包含异常类型或者 异常出现时的程序状态。

对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。

 抛出异常和捕捉异常是通过5个关键字来实现的,他们分别是:try、catch、finally、throw、throws

 

 

 

try块后可接零个或多个catch块,如果没有catch块,则必须跟一个 finally块。

要不try catch 要不try finally 必须组合使用。

例子:当main方法执行过程的当中产生的报错,

import java.util.Scanner;

public class ErrorTest {
	public static void main(String[] args) {
//		// 定义两个变量 输出商
//		int one = 12;
//		int two = 2;
//		System.out.println(one/two); //6
		
		
//		当这两个变量换成键盘输入
		Scanner inputScanner = new Scanner(System.in);
		System.out.println("===运算开始===");
		System.out.println("请输入第一个整数:");
		int one = inputScanner.nextInt();
		System.out.println("请输入第二个整数:");
		int two = inputScanner.nextInt();
		System.out.println(one/two);
		System.out.println("===运算结束===");
		
	}
}

当被除数输入0时,程序会报如下的异常

当除数输入一个字母,则报以下错误。(输入格式错误的异常)

 

虽然很简单地一个相处的因素,经过人的输入之后就有很多情况,所以需要合理进行异常处理才行。

将把可能出错的程序用try包裹起来时,

import java.util.Scanner;

public class ErrorTest {
	public static void main(String[] args) {
//		// 定义两个变量 输出商
//		int one = 12;
//		int two = 2;
//		System.out.println(one/two); //6
		
		
//		当这两个变量换成键盘输入
		Scanner inputScanner = new Scanner(System.in);
		System.out.println("===运算开始===");
		
		try {
			System.out.println("请输入第一个整数:");
			int one = inputScanner.nextInt();
			System.out.println("请输入第二个整数:");
			int two = inputScanner.nextInt();
			System.out.println(one/two);
		} catch (Exception e) {
			System.out.println(e);
		}
		System.out.println("===运算结束===");
		
	}
}

则会打印出

 

在catch中可以通过e.printStackTrace()捕获追踪异常

 

finally包裹是无论怎么样都一定会执行的代码。

import java.util.Scanner;

public class ErrorTest {
	public static void main(String[] args) {
//		// 定义两个变量 输出商
//		int one = 12;
//		int two = 2;
//		System.out.println(one/two); //6
		
		
//		当这两个变量换成键盘输入
		Scanner inputScanner = new Scanner(System.in);
		System.out.println("===运算开始===");
		
		try {
			System.out.println("请输入第一个整数:");
			int one = inputScanner.nextInt();
			System.out.println("请输入第二个整数:");
			int two = inputScanner.nextInt();
			System.out.println(one/two);
		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}finally {
			System.out.println("===运算结束===");
		}
		
	}
}

多重catch:将代码改造成多个catch块,根据不同类型的报错做处理。

import java.util.InputMismatchException;
import java.util.Scanner;

public class ErrorTest {
	public static void main(String[] args) {
//		// 定义两个变量 输出商
//		int one = 12;
//		int two = 2;
//		System.out.println(one/two); //6
		
		
//		当这两个变量换成键盘输入
		Scanner inputScanner = new Scanner(System.in);
		System.out.println("===运算开始===");
		
		try {
			System.out.println("请输入第一个整数:");
			int one = inputScanner.nextInt();
			System.out.println("请输入第二个整数:");
			int two = inputScanner.nextInt();
			System.out.println(one/two);
		} catch (ArithmeticException e) {
			System.out.println("除数不允许为0");
			e.printStackTrace();
		} catch(InputMismatchException e) {
			System.out.println("请输入数字");
			e.printStackTrace();
		}
		finally {
			System.out.println("===运算结束===");
		}
		
	}
}

 catch再多的异常一般涵盖不全,所以最后一个 catch中 需要传递Exception类。也是一种安全保障机制,一定要放在最后一个catch

import java.util.InputMismatchException;
import java.util.Scanner;

public class ErrorTest {
	public static void main(String[] args) {
//		// 定义两个变量 输出商
//		int one = 12;
//		int two = 2;
//		System.out.println(one/two); //6
		
		
//		当这两个变量换成键盘输入
		Scanner inputScanner = new Scanner(System.in);
		System.out.println("===运算开始===");
		
		try {
			System.out.println("请输入第一个整数:");
			int one = inputScanner.nextInt();
			System.out.println("请输入第二个整数:");
			int two = inputScanner.nextInt();
			System.out.println(one/two);
		} catch (ArithmeticException e) {
			System.out.println("除数不允许为0");
			e.printStackTrace();
		} catch(InputMismatchException e) {
			System.out.println("请输入数字");
			e.printStackTrace();
		} catch(Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}
		finally {
			System.out.println("===运算结束===");
		}
		
	}
}

七、System.exit(1)//终止程序运行 括号里面是非0就可以

 

在finally块不要写return xxx。因为当catch和finally中都有return的时候,不管进了哪个catch,都return的是finally里面的值。


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客