zoukankan      html  css  js  c++  java
  • Java-异常

    1、异常:异常就是意外。java当中将所有异常、错误都抽象同一个类,这个最上层父类Throwable。Throwable是异常和错误父类:java中异常就是程序中所有意外的结果,java中错误就是程序或者jdk本身就存在问题(解决不了)。
    2、Error:java中错误的父类
         Exception:异常的父类
         Exception和Error都是Throwable子类


    3、java是很健壮的语言,Error较少
    4、Exception:RuntimeException和一般性异常
    RuntimeException:不需要检查异常,运行的时候才出现的异常。eg:NullPointerException。运行时异常,全部都是RuntimeException子类
    一般性异常:没有继承RuntimeException,需要进行检查,必须处理(如果出现异常,必须处理)

    5、处理异常(一)
    1.    try…catch
    格式:try{
            可能出现异常的代码
          }catch(Exception1 e){
            处理方案:出现异常以后,程序该如何执行,没说一定要解决异常
          }catch(Exception2 e){
            处理方案2
          }…
    try出现哪种catch参数中异常,程序就执行那段catch语句
    异常一旦出现,则终止try当中的代码

    public class Test1 {
        public static void main(String[] args) {
            try{
                String str="liu";
    //          String str=null;
                System.out.println(str.length());//结果:3
                int i=100/0;
            }catch(NullPointerException e){
    //如果try当中代码,出现NullPointerException的异常,catch会根据参数,截获该异常,程序会执行catch中的代码
    //如果没有出现异常,或者出现的异常不是catch中参数异常,不执行该catch语句
                System.out.println("字符串str不能为null");
            }catch(ArithmeticException e){
                System.out.println("除数不能为0");
            }
        }
    }

    系统打印异常的堆栈信息:e.printStackTrace()

    public class Test1 {
        //如何在catch中打印异常堆栈信息
        public static void main(String[] args) {
            try{
                int i=100/0;
            }catch(ArithmeticException e){
        //e.printStackTrace():系统来打印该异常的信息
                e.printStackTrace();
            }
        }
    }

    2.    try…catch…finally
    finally:最终的,最后的,不管try当中是否有异常出现,都会去执行finally中的内容
    try{
     可能出现异常的代码
    }catch(Exception1 e){
     处理异常1
    }catch(Exception2 e){
    处理异常2
        }…
         finally{
         不管try当中是否有异常,都必须要执行的代码
        }

    public class Test1 {
        public static void main(String[] args) {
            try{
                int i=10/0;
                String str=null;
                System.out.println(str.charAt(10));
            }catch(NullPointerException e){
                e.printStackTrace();;
            }catch(ArithmeticException e){
                e.printStackTrace();;
            }finally{
                System.out.println("不管发生什么,生活都得继续。。。");
            }
        }
    }

    首先,执行try当中代码,如果try中出现异常,try当中异常以后代码都不执行,跳转catch与之对应的处理方案,最后执行finally中语句
    6)    自定义异常:程序员自己根据项目的需要,编写自己的异常类

    eg:登录模块:需要输入用户名和密码,正确正常登录成功,如果输入错误,可以用一个自己定义的异常表示,登录失败。
    1.    继承Exception
    2.    重写Exception中4个构造方法

    import java.util.Scanner;
    public class Test1 {
        public static void main(String[] args) throws NameOrPwdErrorException{
    //从控制台输入用户名和密码,用户名是liu,密码是123
    //如果用户输入正确,正常登录,如果输入错误执行异常
            Scanner scanner=new Scanner(System.in);
            System.out.println("用户名:");
            String name=scanner.nextLine();
            System.out.println("密码:");
            String pwd=scanner.nextLine();
            if("liu".equals(name) && "123".equals(pwd)){
                System.out.println("欢迎您登录!");
            }else{
                throw new NameOrPwdErrorException("用户名或密码错误!");
            }
        }
    }
    class NameOrPwdErrorException extends Exception{
    //右击,source-->Generate Constructors from Superclass...
        public NameOrPwdErrorException() {
            super();
            // TODO Auto-generated constructor stub
        }
        public NameOrPwdErrorException(String arg0, Throwable arg1) {
            super(arg0, arg1);
            // TODO Auto-generated constructor stub
        }
        public NameOrPwdErrorException(String arg0) {
            super(arg0);
            // TODO Auto-generated constructor stub
        }
        public NameOrPwdErrorException(Throwable arg0) {
            super(arg0);
            // TODO Auto-generated constructor stub
        }    
    }

    7)    处理异常(二)
    抛出异常对象
    throws:声明可能抛出的异常
    格式:返回值类型 方法名(参数列表) throws 可能抛出异常类
        {
            throw new 异常对象
    }
    可以抛出多个异常对象,但是必须在throws后面声明(确定该方法会抛出每个异常的类)

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/peiya/p/12694146.html
Copyright © 2011-2022 走看看