zoukankan      html  css  js  c++  java
  • 第八周作业+总结

    实验六 Java异常

    实验目的

    ①理解异常的基本概念;

    在java中把导致程序中断运行的情况分为两种,一种就是异常,而另外一种叫做错误。所有异常的基类是Exception,错误的基类是Error。Exception是在java程序中可以编码进行控制的,具有可编程性,而Error是指Java运行时系统来显示与运行时系统本身有关的错误,Error对于程序员来说是灾难性的,程序无法控制,比如jvm堆栈溢出错误,操作系统分配内存错误等。不管是Exception还是Error,他们的共同父类是java.lang.Throwable(可抛出的) 类。
    异常是指在程序运行期可能出现的非正常情况,这些情况将导致程序出错,这种出错不同于代码编写错误或程序算法出错,代码编写错误无法完成编译,而程序算法出错计算将取得错误的结果。程序出现异常时,缺省会直接造成程序的中断运行,提前预知这种异常的可能性可以补充异常处理的逻辑,从这个角度出发,异常也是一种行之有效的逻辑处理机制,在程序中声明异常或主动抛出异常也很常见。

    ②掌握异常处理方法及熟悉常见异常的捕获方法。(异常捕获)

    try 代码块:包含待监控异常的代码。
    catch 代码块:紧跟 try 块之后,可以指定异常类型。允许指定捕获多种不同的异常,catch 块用来捕获在 try 块中出发的某个指定类型的异常。
    finally 代码块:紧跟 try 块或 catch 块之后,用来声明一段必定会运行的代码。例如用来清理一些资源。
    catch 允许存在多个,用于针对不同的异常做不同的处理。如果使用 catch 捕获多种异常,各个 catch 块是互斥的,和 switch 语句类似,优先级是从上到下,只能选择其一去处理异常。

    • try块中,未发生异常
      不触发异常,当然是乐于看见的。在这种情况下,如果有 finally 块,它会在 try 块之后运行,catch 块永远也不会被运行。
    • try块中,发生异常
      在发生异常时,会首先检查异常类型,是否存在于 catch 块中指定的待捕获异常。如果存在,则这个异常被捕获,对应的 catch 块代码则开始运行,finally 块代码紧随其后。
      例如:只监听了空指针(NullPointerException),此时如果发生了除数为 0 的崩溃(ArithmeticException),则是不会被处理的。
      当触发了未捕获的异常时,finally 代码依然会被执行,在执行完毕后,继续将异常“抛出去”。
      *catch 或者 finally 发生异常
      ,当在 catch 代码块中发生异常时,此时的表现取决于 finally 代码块中是否存在 return 语句。如果存在,则 finally 代码块的代码执行完毕直接返回,否则会在 finally 代码块执行完毕后,将 catch 代码中新产生的异常,向外抛出去。
      而在极端情况下,finally 代码块发生了异常,则此时会中断 finally 代码块的执行,直接将异常向外抛出。

    实验要求

    ①练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。
    ②掌握自定义异常类的方法。

    实验内容

    1.编写一个类,在其main()方法中创建一个一维数组,在try字句中访问数组元素,使其产生ArrayIndexOutOfBoundsException异常。在catch子句里捕获此异常对象,并且打印“数组越界”信息,加一个finally子句,打印一条信息以证明这里确实得到了执行。

    实验代码

    package o;
    public class a
    {
             public static void main(String[] args){
             int b[] = {1,2,3,4,5,6,7,8,9};          
             try{
             for(int c=0;c<=9;c++)
        {
             System.out.println(b[c]); }
                       }
    catch(ArrayIndexOutOfBoundsException han1en9) 
                {
            han1en9.getStackTrace();  
            System.out.println("越界数组"); 
     }
            finally{
            System.out.println("over");
            }
        }
    }
    

    实验截图

    2.自定义异常类的使用,车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。
    技术方案:
    编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“危险物品”。编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。
    程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

    实验代码

    package xinzuoye;
    public class DangerException extends Exception{
        String message;
        public DangerException(String m) {
            message="警告: "+m+"为危险物品!";
        }
        public void toShow() {
            System.err.println(message);
        }
    }
    

    package xinzuoye;
    public class machine {
        public void CheckBag(goods goods) throws DangerException{
            if( goods.isDanger()) {
                throw new DangerException(goods.getName());
            } 
            else {
                System.out.println(goods.getName()+"非危险物品,安全过机");
            }
        }
    }
    

    package xinzuoye;
    public class goods {
        boolean isDanger;
        String name;
        public void setisDanger(boolean isDanger) {
            this.isDanger = isDanger;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public boolean isDanger() {
            return isDanger;
        }
    }
    

    package xinzuoye;
    import java.util.Scanner;
    public class text {
        public static void main(String[] args) {
            machine m = new machine();
            goods goods = new goods();
            Scanner scanner = new Scanner(System.in);
            for (int i = 0; i < 10; i++) {
                String name = scanner.next();
                goods.setName(name);
                if (goods.getName().equals("防晒喷雾") || goods.getName().equals("毒品") ||goods.getName().equals("打火机")
                        || goods.getName().equals("枪")|| goods.getName().equals("刀具") || goods.getName().equals("硫酸")) {
                    goods.setisDanger(true);
                } else {
                    goods.setisDanger(false);
                }
                try {
                    m.CheckBag(goods);
                } catch (DangerException e) {
                    e.toShow();
                }
            }
        }
    }
    
    

    实验截图

    总结

    try和catch子句的使用
    try
    {
    
      //需要被检测的异常代码
    
    }
    
    catch(Exception e)
    {
        //异常处理,即处理异常代码
    }
    

    一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让程序运行下去,并且输出为什么出错!
    try catch 是捕捉try部分的异常,当你没有trycatch的时候,如果出现异常则程序报错,加上try,catch,出现异常程序正常运行,只是把错误信息存储到Exception里,所以catch是用来提取异常信息的,你可以在catch部分加上一句System.out.println(e.ToString());,如果出现异常可以把异常打印出来。

    ①try语句 
    try语句用大括号{}指定了一段代码,该段代码可能会抛弃一个或多个例外。

    ② catch语句 
    catch语句的参数类似于方法的声明,包括一个例外类型和一个例外对象。例外类型必须为Throwable类的子类,它指明了catch语句所处理的例外类型,例外对象则由运行时系统在try所指定的代码块中生成并被捕获,大括号中包含对象的处理,其中可以调用对象的方法。
    catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。这里,类型匹配指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。
    也可以用一个catch语句处理多个例外类型,这时它的例外类型参数应该是这多个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。 

    #######分割线?!?
    这次作业的第一题我在上一次的总结里有提及,也学习了一些,所以感觉还行,没啥问题。第二题不会写,看了网上的代码,粘贴复制也有些我不会更改的错误,以前的题目是一次性码完,在室友的帮助下,这个第二题分了几个部分弄完了,代码弄完了后,我的环境配置又出错了...乱七八糟捣鼓了一下也就这样了。

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/Duya9ian/p/11696939.html
Copyright © 2011-2022 走看看