Java 第八章 异常(1)
目录
异常概述
认识异常
异常处理机制
解决方法
异常体系结构
常见的异常
异常--运行时异常
算术异常
数组越界异常
类型转换异常
数字格式化异常
空指针异常
Error
问题实例
异常概述
认识异常
- 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善 尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络出现问题等等。
-
异常:在程序运行过程中出现的非正常情况
-
广义异常:指的是所有不正常的情况
狭义异常:指可以处理的异常 -
注:代码错误,编译不通过,不属于异常(例如少写了结尾;),代码错了不会产生字节码 文件,根本不能运行
异常案例
异常处理机制
Java中把可能出现的每种异常情况,都封装成了一个类,当出现某种异常时,抛出此类型异常的对象
l不管,如果没有捕获这个异常对象,出现异常,直接中止程序
2.异常处理,接收抛出的对象,提供处理程序,让后面的程序可以继续运行。
解决方法
- 一是遇到错误就终止程序的运行。
- 另一种方法是程序员在编写程序时,就充分考虑到各种可能发生的异常和错误, 极力预防和避免。并且要编写相应的代码进行异常的检测、以及异常的处理方 式,保证代码的健壮性
异常体系结构
Throwable
java.lang.Throwable类是Java程序执行过程中发生的异常事件对应的类的根父类。
Throwable中的常用方法:
- public void printStackTrace():打印异常的详细信息。 包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用printStackTrace。
- public String getMessage():获取发生异常的原因
Throwable可分为两类:Error和Exception。
分别对应着java.lang.Errorjava.lang.Exception两个类。
Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、内存资源耗 尽等严重情况。一般不编写针对性的代码进行处理。
例如:StackOverflowError(栈内存溢出)。
Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,需要使用针对 性的代码进行处理,使程序继续运行
常见的异常
异常--运行时异常
算术异常
// 1.算数异常 ArithmeticException
// int a = 10;
// int b = 0;
// System.out.println(a/b);
数组越界异常
//2.下标越界 ArrayIndexOutOfBoundsException
int[] a1 = {1,2,3,4,5};
a1[5]=6;
类型转换异常
//类型转换异常 ClassCastException
Object object ="abc";
Integer a = (Integer) object;
数字格式化异常
数字格式化异常
// Exception in thread "main" java.lang.NumberFormatException: For input string: "a1"
// at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
// at java.lang.Integer.parseInt(Integer.java:580)
// at java.lang.Integer.parseInt(Integer.java:615)
// at com.wyk.javaexception.Dom.main(Dom.java:25)
String s ="a1" ;
Integer.parseInt(s);
空指针异常
/*
使用了一个为null的对象 空指针异常
NullPointerException
*/
String s = null;
s.length();
Error(错误)
栈溢出: StackOverflowErro
package com.wyk.javaexception;
public class Dom2 {
public static void main(String[] args) {
//Java.lang.StackOverError 栈内存空间异常递归调用的方法过多,导致栈空间不够用,是程序无法解决处理的
sum(500000);
}
public static int sum (int num){
if (num == 1) {
return 1;
}else
return num+sum(num-1);
}
}
问题实例
1.
//看程序输出结果: 1 , 2
public static void main(String[] args) {
try {
int i=100/0;
System.out.println(i);
}catch(Exception e){
System.out.println(1);
throw new RuntimeException();
}finally{
System.out.println(2);
}
System.out.println(3);
}
2.
//写出程序结果: B C D
class Demo{
public static void main(String[] args){
try{
showExce();
System.out.println("A");
}catch(Exception e){
System.out.println("B");
}finally{
System.out.println("C");
}
System.out.println("D");
}
public static void showExce()throws Exception{
throw new Exception();
}
}
3.
//写出程序结果:1134, 1134234
class Test{
public static String output="1";
public static void foo(int i){
try{
if(1==i)
throw new Exception();
output+="1";
}catch(Exception e){
output+="2";
} finally{
output+="3";
}
output+="4";
}
public static void main(String args[]){
foo(0);
System.out.println(output);//
foo(1);
System.out.println(output);//
}
}