目录
异常指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误,常见的异常情况:
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
- array[10] = 300; //超出数组边界产生的异常
-
- //发生异常后,若异常没有进行处理就会中断程序的执行
- System.out.println("haozige");
-
- }
- }

Java中所有的异常类都是系统类Throwable的子类。

try {
//需要监测可能发生异常的语句
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
- array[10] = 300; //超出数组边界的异常
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
- System.out.println("异常内容:" + e.toString());
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

try {
//需要监测可能发生异常的语句
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
.
.
.
catch (异常类 变量名) {
//异常发生时的执行语句
}
数组越界的异常被处理
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
-
- array[10] = 300; //超出数组边界的异常
- int tmp = 20/0; //被除数是0的异常
- int n = Integer.parseInt("你好"); //不确定类型的异常
-
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("数组越界的异常被处理");
-
- }catch (ArithmeticException e) {
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("被除数为0的异常被处理");
-
- }catch (Exception e) { //使用Exception类捕获不确定异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("不确定类型的异常被处理");
-
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

被除数是0的异常被处理
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
-
- array[9] = 300; //超出数组边界的异常
- int tmp = 20/0; //被除数是0的异常
- int n = Integer.parseInt("你好"); //不确定类型的异常
-
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("数组越界的异常被处理");
-
- }catch (ArithmeticException e) {
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("被除数为0的异常被处理");
-
- }catch (Exception e) { //使用Exception类捕获不确定异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("不确定类型的异常被处理");
-
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

不确定类型的异常被处理
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
-
- array[9] = 300; //超出数组边界的异常
- int tmp = 20/5; //被除数是0的异常
- int n = Integer.parseInt("你好"); //不确定类型的异常
-
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("数组越界的异常被处理");
-
- }catch (ArithmeticException e) {
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("被除数为0的异常被处理");
-
- }catch (Exception e) { //使用Exception类捕获不确定异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("不确定类型的异常被处理");
-
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

try {
//需要监测可能发生异常的语句
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
.
.
.
catch (异常类 变量名) {
//异常发生时的执行语句
}
finally {
//不管被监测的语句是否发生异常都会执行的语句
}
数组越界的异常被处理,finally语句同样执行
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
-
- array[10] = 300; //超出数组边界的异常
- int tmp = 20/0; //被除数是0的异常
- int n = Integer.parseInt("你好"); //不确定类型的异常
-
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("数组越界的异常被处理");
-
- }catch (ArithmeticException e) {
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("被除数为0的异常被处理");
-
- }catch (Exception e) { //使用Exception类捕获不确定异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("不确定类型的异常被处理");
-
- }finally {
- System.out.println("对于finally语句,不管被监测的语句是否发生异常都会执行的语句");
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

没有异常发生,finally语句同样执行
- //Java之异常:指的是在编译阶段没有语法错误的代码,在程序运行过程中的产生的错误
- public class Text {
-
- public static void main(String[] args) {
-
- int[] array = new int[10];
-
- try { //使用try语句监测异常
-
- array[9] = 300; //超出数组边界的异常
- int tmp = 20/5; //被除数是0的异常
- //int n = Integer.parseInt("你好"); //不确定类型的异常
-
- }catch (ArrayIndexOutOfBoundsException e) { //使用catch语句处理异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("数组越界的异常被处理");
-
- }catch (ArithmeticException e) {
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("被除数为0的异常被处理");
-
- }catch (Exception e) { //使用Exception类捕获不确定异常
-
- System.out.println("异常内容:" + e.toString());
- System.out.println("不确定类型的异常被处理");
-
- }finally {
- System.out.println("对于finally语句,不管被监测的语句是否发生异常都会执行的语句");
- }
-
- //使用try...catch语句处理异常后,程序不会被中止
- System.out.println("haozige");
- }
- }

异常发生在所调用的方法中时,方法内有监测和处理异常的语句
- public class Text {
-
- static int[] array = new int[10];
-
- static void initArray(){
- try{
- array[10] = 66;
- }catch (ArrayIndexOutOfBoundsException e){
- System.out.println("异常情况:" + e.toString());
- }finally {
- System.out.println("haozige");
- }
- }
-
- public static void main(String[] args) {
-
- initArray();
-
- }
- }

异常发生在所调用的方法中时,方法内没有监测和处理异常的语句,那么系统就会自动到它的上一层方法中寻找符号的catch语句
- public class Text {
-
- static int[] array = new int[10];
-
- static void initArray(){
- array[10] = 66;
- }
-
- public static void main(String[] args) {
- try{
- initArray(); //方法内没有处理异常的语句,自动到main方法中寻找符号的catch语句
- }
- catch (ArrayIndexOutOfBoundsException e){
- System.out.println("异常情况:" + e.toString());
- }finally {
- System.out.println("haozige");
- }
- }
- }

当程序在运行时发生了某种异常,默认情况异常会被JVM拦截并抛出。但有时会因为发生某种错误,导致程序无法继续下去,即异常无法自动抛出,此时需要我们手动抛出异常。
try {
//需要监测可能发生异常的语句
throw new 要抛出的异常对象
}
catch (异常类 变量名) {
//异常发生时的执行语句
}
- public class Text {
-
- static void myPrintf(int age){
- try{
- if(age < 20){
- throw new Exception("未够年龄");
- }
- }catch (Exception e){
- System.out.println("异常内容:" + e.toString());
- }
- }
-
- public static void main(String[] args) {
-
- myPrintf(18);
-
- System.out.println("done!");
- }
- }
-

声明xxx方法可能会发生yyy1,yy2,...异常
void xxx() throws yyy1,yy2 ,... {}
- public class Text {
-
- static void myPrintf(int age) throws Exception{ //声明该方法可能会发生Exception异常,该异常不一定会出现
- System.out.println("haozige");
- if (age < 20){
- throw new Exception();
- }
- }
-
- public static void main(String[] args) {
-
- try {
- myPrintf(10); //调用该方法时,使用异常类捕获这种可能出现的异常
- } catch (Exception e) {
- System.out.println("jiangxiaoya");
- }
-
- System.out.println("done!");
- }
- }
-
对于某些特殊的异常时,Java类库提供的异常类无法满足我们的需求,因此我们需要自定义的异常类来处理这些特殊的异常。
class 自定义异常类 extends 异常类 {
//程序语句
}
.
.
.
throw 自定义异常类对象
.
.
.
- class MyException extends Exception { //自定义异常类继承Exception类
-
- private String name;
-
- MyException(String name){ //构造方法对数据成员赋值
- this.name = name;
- }
-
- public String toString(){ //对Exception类的toString()进行方法重写
- return "发生了MyException异常";
- }
-
- public String getMessage(){ //对Exception类的getMessage()进行方法重写
- return "怎么回事";
- }
-
- public void myPrintf(){ //自定义异常类MyException的自定义方法
- System.out.println(name);
- }
- }
-
-
- public class Text {
-
- public static void main(String[] args) {
-
- try{
- throw new MyException("jiangxiaoya"); //手动抛出自定义异常类对象
- }catch (MyException m){
- System.out.println(m.toString());
- System.out.println(m.getMessage());
- m.myPrintf();
- }
-
- }
- }
-
