zoukankan      html  css  js  c++  java
  • 异常

    1.异常

    public class Demo1 {
        /*
        异常体系
        Throwable是所有异常的祖师爷
    
        Error :不需要处理,处理不了此异常
    
        Exception:程序员能处理的异常
        Exception分为两种,一种是运行时异常,一种是编译时异常
        */
    
    
        public static void main(String[] args) {
            int[] arr={10,20,30};
            try{
                System.out.print(arr[3]);
            }catch (ArrayIndexOutOfBoundsException e){
                e.printStackTrace();
                System.out.println("报错了:"+e.getMessage());
            }
        }
    }

    代码2:

    public class Demo1 {
    
        public static void main(String[] args) {
    
            System.out.println("this is main");
            show2();
            System.out.println("this is main2");
    
        }
    
        public static void show2(){
            show();
        }
    
        public static void show(){
            System.out.println("this is show");
            int[] arr = {20,30};
            try{
                System.out.println(arr[3]);
            }catch(ArrayIndexOutOfBoundsException e){
                e.printStackTrace();
            }
    
            System.out.println("game over");
        }
    }

    输出

    "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=6660:D:\idea\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\idea\day07\out\production\optest;C:\Users\Administrator.PC-201911081504\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator.PC-201911081504\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.atguigu.day14.Demo1
    this is main
    this is show
    java.lang.ArrayIndexOutOfBoundsException: 3
        at com.atguigu.day14.Demo1.show(Demo1.java:37)
        at com.atguigu.day14.Demo1.show2(Demo1.java:30)
        at com.atguigu.day14.Demo1.main(Demo1.java:24)
    game over
    this is main2
    
    Process finished with exit code 0

    代码3:

    import java.util.Scanner;
    
    public class Demo2 {
        /*
        异常处理:
               两种方案
               1.try{}catch(){}
               2.throw throws抛出异常
    
        注意:
            1.变量的作用域
              try中声明的变量仅仅在try中有效
            2.当发生异常后,try语句块内异常下面的代码不再执行,进入catch内,处理异常,进行try{}catch{}下的内容
            3.如果没有发生异常,则不会执行catch中的内容
            4.如果发生了没有捕获声明的异常,则程序立即终止,不会继续向下执行
            5.当try语句块代码可能发生多个异常时,我们可以声明多个异常
               5.1 catch(异常类型|异常类型|异常类型 标识符){}
               5.2 多重catch try{}catch(异常类型1 标识符){}catch(异常类型2 标识符){}
    
        */
    
        public static void main(String[] args) {
            double score[] = new double[2];
            double sum=0;
    
            try {
                System.out.println(score[3]);
                Scanner sc1 = new Scanner(System.in);
                for (int i = 0; i < score.length; i++) {
                    System.out.println("input your " + (i + 1) + " num:");
                    double s = sc1.nextDouble();
                    score[i] = s;
                    sum += s;
                }
            }catch (Exception e){
                System.out.println("出现了异常"+e.getMessage());
            }
            System.out.println("第一个学生的成绩:"+score[0]+"总分:"+sum+" 平均分:"+sum/score.length);
        }
    }

    输出

    "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=7333:D:\idea\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\idea\day07\out\production\optest;C:\Users\Administrator.PC-201911081504\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator.PC-201911081504\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.atguigu.day14.Demo2
    出现了异常3
    第一个学生的成绩:0.0总分:0.0 平均分:0.0
    
    Process finished with exit code 0
    注意:
    1.在程序没有发生异常时,有return语句,要先执行finally再执行返回操作
    2.在catch语句块内进行return,那么也要先执行finally再执行返回操作
    3.如果在finally中存在return,那么无论前面在哪个位置有return,都会返回finally中的return值

    代码4
    import java.io.File;
    import java.io.FileNotFoundException;
    
    public class Demo3 {
        /*
    
        处理异常方式2
         通过throw抛
               throw new 异常的类型(自定义异常的输出信息)
    
         System.err.println(); //红颜色输出信息,位置可能会颠倒
        */
    
        public static void main(String[] args) {
            show(5);
            try{
                showMessage();
            }catch(FileNotFoundException e){
                System.out.println(e.getMessage());
            }
    
        }
    
        public static void show(int x){
            int[] arr = {10,20,30};
            if(x<0 || x>arr.length){
                throw new ArrayIndexOutOfBoundsException("数组下标越界了"+x);
            }
        }
    
        public static void showMessage() throws FileNotFoundException{
            File file= new File("xxxxxxxx");
            boolean exist=file.exists();
            if(!exist){
                throw new FileNotFoundException("文件不存在");
            }
            System.out.println(exist);
        }
    }

    输出

    "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=10523:D:\idea\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\idea\day07\out\production\optest;C:\Users\Administrator.PC-201911081504\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator.PC-201911081504\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.atguigu.day14.Demo3
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 数组下标越界了5
        at com.atguigu.day14.Demo3.show(Demo3.java:33)
        at com.atguigu.day14.Demo3.main(Demo3.java:21)
    
    Process finished with exit code 1

    练习代码5:

    public class Demo4 {
    
        private String account;
        private int balance;
    
        public Demo4() {
        }
    
        public Demo4(String account, int balance) {
            this.account = account;
            this.balance = balance;
        }
    
        public void quMoney(int money){
            if(money<0){
                throw new IllegalArgumentException("取款金额不能为负数"+money);
            }
            if (money>balance){
                throw new UnsupportedOperationException("取款金额不足,不支持当前操作");
            }
            balance-=money;
        }
    
        public void saveMoney(int money){
            if(money<0){
                throw new IllegalArgumentException("存款金额,不能为负数:"+money);
            }
            balance+=money;
        }
    
        public static void main(String[] args) {
            Demo4 d4= new Demo4("1233455",10000);
            try{
                //d4.quMoney(-90);
                d4.saveMoney(-20);
            }catch (Exception e){
                e.printStackTrace();
                e.getMessage();
            }
            System.out.println("game over");
        }
    }

    输出

    "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=12144:D:\idea\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\idea\day07\out\production\optest;C:\Users\Administrator.PC-201911081504\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator.PC-201911081504\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.atguigu.day14.Demo4
    java.lang.IllegalArgumentException: 存款金额,不能为负数:-20
        at com.atguigu.day14.Demo4.saveMoney(Demo4.java:28)
        at com.atguigu.day14.Demo4.main(Demo4.java:37)
    game over
    
    Process finished with exit code 0

    代码6

    public class Demo5 {
        /*
        方法重写:
        1.权限修饰符不能比父类更严格
        2.返回值类型
          基本类型数据必须与父类保持一致
          引用类型数据可以是父类也可以是父类的孩子
          形参列表必须保持一致
          子类不能返回比父类更大的异常
        */
    
    
        public static void main(String[] args) throws Exception {
            Father f = new Son();
            try{
                f.show();
            }catch ( ArrayIndexOutOfBoundsException e){
                e.getMessage();
            }
        }
    
    }
    
    class Father{
        public void show() throws Exception{
            System.out.println("father show");
        }
    }
    class Son extends Father{
        @Override
        public void show() throws ArrayIndexOutOfBoundsException{
            System.out.println("son show");;
        }
    }

    代码7

    package com.atguigu.day14;
    
    
    
    public class Demo6 {
        /*
        自定义异常的步骤
        1.新建一个类
        2.继承一个异常类
        3.添加构造器
        */
        public static void main(String[] args) {
        try {
            Person p1 = new Person("linzi", "woman", 160);
            System.out.println(p1.toString());
        }catch (Exception e){
            e.printStackTrace();
            e.getMessage();
    
        }
        }
    }
    
    class SexException extends IndexOutOfBoundsException{
        public SexException() {
        }
    
        public SexException(String s) {
            super(s);
        }
    }
    class AgeException extends ArrayIndexOutOfBoundsException{
        public AgeException() {
        }
    
        public AgeException(String s) {
            super(s);
        }
    }
    class Person{
        String name;
        String gender;
        int age;
    
        public Person() {
        }
    
        public Person(String name, String gender,int age) {
            this.name = name;
            this.setGender(gender);
            this.setAge(age);
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) throws AgeException{
            if(age<150 && age>0){
            this.age = age;
            }else {
               throw new AgeException("年龄不对"+age);
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) throws SexException{
            if(gender.equals("woman")||gender.equals("man")){
            this.gender = gender;
            }else {
                throw new SexException("没有这个性别"+gender);
            }
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", gender='" + gender + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

    代码8

  • 相关阅读:
    day39——多线程实例、多线程锁
    day38——多进程Manager、进程池
    day37——多进程锁、多进程共享内存
    day36——多进程多线程概念、多进程、多进程实例
    day35——memcache常用方法
    day34——memcached安装、memcached集群操作
    day33——hash类型操作、其他常用操作
    day25——NoSQL的字符串操作、list操作、set操作
    day24——NoSQL简介、redis服务搭建、redis连接池、redis管道
    Linux日常巡检脚本
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/15679535.html
Copyright © 2011-2022 走看看