• Java基础trycatchfinally处理


    package com.hspedu.exception_;
    
    public class Course449 {
        public static void main(String[] args) {
            // try-catch-finally处理细节
    
            /*
             * try-catch和throws处理机制:
             * 1、try-catch-finally处理机制
             *   try {
             *       可能有异常的代码
             *   } catch(Exception e) {
             *       捕获到异常
             *        1.异常发生时,系统将异常封装成Exception对象e
             *        2.将异常对象e传递给catch块
             *        3.得到异常对象进行处理
             *       如果没有异常catch代码块不会执行
             *   } finally {
             *       不管try是否有异常发生,finally一定会执行
             *       通常将释放资源的处理放在finally
             *   }
             *
             *  没有finally代码块也是可以的
             * */
    
            /*
             * 2、throws处理机制
             *   例如jvm调用main,main方法调用f1方法,f1方法调用f2方法
             *   当f2发生异常时,f2如果throws抛出异常,则将异常交给f1方法处理
             *   f1方法可以选择try-catch处理、也可以throws抛出异常
             *   如果f1抛出则交给main方法处理异常,如果再抛出则由jvm处理
             *   jvm处理异常:1、输出异常信息,2、中断程序
             *
             *  try-catch-finally和throws二者选一处理异常
             *  如果没有显示使用try-catch和throws,则默认使用throws抛出异常
             *
             * */
    
            /*
             * 1、如果发生异常,则异常后的代码不再执行,直接进入catch
             * 2、如果没有发生异常,则顺序执行try代码块,不会执行catch
             * 3、不管是否有发生异常,都会执行finally
             * */
            try {
                String str = "韩顺平教育";
                int a = Integer.parseInt(str);
                System.out.println("a = " + a);
            } catch (NumberFormatException e) {
                System.out.println("异常信息:" + e.getMessage());
            } finally {
                System.out.println("finally");
            }
    
            System.out.println("=================");
    
            try {
                String str = "123";
                int a = Integer.parseInt(str);
                System.out.println("a = " + a);
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } finally {
                System.out.println("finally");
            }
    
            System.out.println("=================");
    
            /*
             * 4、如果代码块可能有多个异常,可以使用多个catch分别捕获不同的异常
             *   做出相应的处理,子类的异常写在前面,父类的异常写在后面,最多只会执行一个catch
             * */
            try {
                Person person = new Person();
                person = null;
                System.out.println(person.getName());   // 空指针
                int n1 = 10;
                int n2 = 0;
                int res = n1 / n2;  // math
            } catch (NullPointerException e) {
                System.out.println("空指针异常:" + e.getMessage());
            } catch (ArithmeticException e) {
                System.out.println("算数异常:" + e.getMessage());
            } catch (Exception e) {
                System.out.println("异常信息:" + e.getMessage());
            } finally {
                System.out.println("finally");
            }
    
            System.out.println("=================");
    
            /*
             * 5、try-finally,没有捕获异常,执行完finally会退出程序,不会再执行后面的代码
             *  应用场景是执行一段代码,必须执行某个业务逻辑
             * */
    
            try {
                int n1 = 10;
                int n2 = 0;
    //            int n2 = 2;
                System.out.println(n1 / n2);
            } finally {
                System.out.println("finally");
            }
            System.out.println("程序继续...");
        }
    }
    
    class Person {
        private String name = "jack";
    
        public String getName() {
            return name;
        }
    }
    package com.hspedu.exception_;
    
    public class Course450 {
        public static void main(String[] args) {
            System.out.println(method());
        }
    
        public static int method() {
            try {
                String[] names = new String[3];
                if (names[1].equals("tom")) {   // NullPointerException
                    System.out.println(names[1]);
                } else {
                    names[3] = "hspedu";
                }
                return 1;
            } catch (ArrayIndexOutOfBoundsException e) {
                return 2;
            } catch (NullPointerException e) {
                return 3;
            } finally { // 必须执行
                return 4;
            }
        }
    }
    package com.hspedu.exception_;
    
    public class Course450_2 {
        public static void main(String[] args) {
            System.out.println(method());   // 4
        }
    
        public static int method() {
            int i = 1;
            try {
                i++;    // 2
                String[] names = new String[3];
                if (names[1].equals("tom")) {
                    System.out.println(names[1]);
                } else {
                    names[3] = "hspedu";
                }
                return 1;
            } catch (ArrayIndexOutOfBoundsException e) {
                return 2;
            } catch (NullPointerException e) {
                return ++i; // 3
            } finally {
                return ++i; // 4
            }
        }
    }
    package com.hspedu.exception_;
    
    public class Course450_3 {
        public static void main(String[] args) {
            System.out.println(method());   // 3
        }
    
        public static int method() {
            int i = 1;
            try {
                i++;    // 2
                String[] names = new String[3];
                if (names[1].equals("tom")) {
                    System.out.println(names[1]);
                } else {
                    names[3] = "hspedu";
                }
                return 1;
            } catch (ArrayIndexOutOfBoundsException e) {
                return 2;
            } catch (NullPointerException e) {
                return ++i; // 3
            } finally {
                ++i;    // 4
                System.out.println("i = " + i); // 4
            }
        }
    }
  • 相关阅读:
    更改sql server数据库所有者的对象
    对C#委托及事件委托的理解
    印度人是怎样开发软件的?
    SQL常用函数
    Ajax学习1
    Ajax学习2
    什么是ORM?
    jQuery 移动网页到制定的位置
    Juery 控件的取值赋值
    js禁用滚动条
  • 原文地址:https://www.cnblogs.com/kenantongxue/p/15980915.html
Copyright © 2020-2023  润新知