zoukankan      html  css  js  c++  java
  • 第八周课程总结&实验报告(六)

    实验六 Java异常

    • 实验目的
    • 理解异常的基本概念;
    • 掌握异常处理方法及熟悉常见异常的捕获方法。
    • 实验要求
    • 练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch子句的使用。
    • 掌握自定义异常类的方法。

     

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

    实验代码:

     1 package defult;
     2 
     3 public class arry {
     4 
     5     public static void main(String[] args) {
     6         int arry[]=null;
     7         arry=new int[9];
     8         try {
     9             for(int i=0;i<=10;i++) {
    10                 arry[i]=i;
    11             }
    12         }
    13         catch(Exception e) {
    14             System.out.println("数组越界");
    15         }finally {
    16             System.out.println("操作执行");
    17         }
    18     }
    19 }

    实验结果:

    本题没有什么难度,因此没有错误截图

     

    • 自定义异常类的使用

    车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。

    技术方案:

    编写一个Exgeption的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“危险物品”。编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。
    程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)的方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

    实验代码:

     1 package dangerchecksimulator;
     2 import java.util.*;
     3 
     4 class DangerException extends Exception{  //继承Exception类
     5     public void toShow() {
     6         System.err.println("是危险物品");  //显示处理结果
     7     }
     8 }
     9 class Goods{
    10     String name;    //声明name,用于储存待检查物品的名字
    11     boolean isDanger;  //用于储存物品的危险属性
    12     
    13     public void setName(String name) {  //获得待处理物品的名字
    14         this.name=name;
    15     }
    16     public String getName() {
    17         return name;
    18     }
    19     public void setDanger(boolean danger) {  //获得危险属性
    20         this.isDanger=danger;
    21     }
    22     public boolean getDanger() {
    23         return isDanger;
    24     }
    25 }
    26 class Machine{
    27     
    28     public void checkBag(boolean good) throws DangerException{  //检查并抛出错误
    29         if(good) {
    30             DangerException dgexception=new DangerException();   //新建错误
    31             throw dgexception;    //抛出错误至DangerException类
    32         }
    33     }
    34 }
    35 public class Text1 {
    36 
    37     public static void main(String[] args) {
    38         Scanner input=new Scanner(System.in);   
    39         int flag=0;
    40         String check=input.nextLine();  //输入待检查物品的名字
    41         Machine machine=new Machine();
    42         String name[]= {"汽油","枪支","管制刀具","炸弹","煤气罐"};  //声明危险物品名单
    43         Goods good=new Goods();   //实例化Goods
    44         for(int i=0;i<name.length;i++) {
    45             if(check.equals(name[i])) {
    46                 good.setDanger(true);   //将危险属性改为true
    47                 good.setName(name[i]);  //将待处理物品的名字传到Goods类
    48                 flag=1;   //更改判定点
    49             }    
    50         }
    51         if(flag==1) {
    52             try {
    53                 machine.checkBag(good.isDanger);
    54             }
    55             catch(DangerException e){
    56                 System.out.print(check);
    57                 e.toShow();
    58             }
    59         }
    60         else {
    61             System.out.println(check+"不是危险物品");  //通过检查
    62         }
    63     }
    64 }

    实验结果:

    2-1,检查出危险物品

    2-2,未检查出危险物品

    本题相较上一题而言难度提升了不少,我在编写代码之前思路一直都不清晰,所以我参考了同班的大佬的思路,同时也增加了一些自己的想法。以下附上该大佬的代码链接https://www.cnblogs.com/neir/p/11693359.html

    第八周学习总结:

    本周主要学习了以下几个重要的知识点:1,异常的捕获及处理  2,多线程

    一,异常

       

    1,异常的基本概念

           异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,可能会导致程序的中断执行。

    2,异常的处理方式

       异常通常有三种处理方式:①立刻处理  ②延后处理  ③不处理

       ①,②种方式都可以一定程度上的解决异常,而第③种则是在一些异常低概率出现的情况下进行的一种处理方式。有时如果异常出现的概率很低,且该异常处理起来极其麻烦,那么为了效率我们可以不对该异常进行处理。有时不处理异常也不失为一种有效的解决问题的方式。

    3,在程序中使用异常处理

       ①异常处理格式:

      

     1      try{
     2 
     3        //有可能出现异常的语句
     4 
     5        }catch(异常类 异常对象){
     6 
     7            //编写异常的处理语句
     8 
     9 }finally{
    10 
    11     //一定会运行的程序代码
    12 
    13 }

    try用于捕获可能出现的异常代码,catch用于找到匹配的异常类型进行相应的处理。finally可作为异常的统一出口。注意,finally是可以省略的。

    一个catch语句只能处理一种与之相配的异常处理类,因此我们可以直接使用所有异常类的父类Exception类作为异常处理类,这样就可以用一个catch处理所有类型的异常了。

    4,throws和throw关键字

       ①throws关键字

         在定义一个方法的时候可以使用throws关键字声明,使用throws关键字声明的方法表示此方法不处理异常,而交个方法的调用处进行处理。

           throws使用格式

         

    1   public 返回值类型 方法名称(参数列表...)throws 异常类{}

        ②throw关键字

             与throws关键字不同,我们可以直接使用throw关键字抛出一个异常。抛出时直接抛出异常类的实例化对象即可。

    5,Exception类和RuntimeException类 

        (1)Exception在程序中必须使用try...catch进行处理

        (2)RuntimeException类可以不使用try...catch进行处理,但如果有异常产生,则异常将由JVM进行处理。

       

    6,自定义异常类

      

       我们定义自己的异常类时只需要让自定义的异常类成为Exception   RuntimeException类的子类即可。

    二,多线程

           (1)线程与进程

          

    (2)java中线程的实现

           ①继承Thread类

        

     1  class 类名称 extends Thread{
     2 
     3        属性...
     4 
     5        方法...
     6 
     7        public void run(){
     8 
     9             线程主体;
    10 
    11         }
    12 }

    注意:我们要想正确地启动线程,是不能直接调用run()方法的,而是直接调用从Thread类中继承而来的start()方法。

      (3)同步与死锁

              如果一个多线程的程序是通过Runable接口实现的,则意味着类中的属性将被多个线程共享。因此,如果多个线程要操作同一资源时,就有可能出现资源同步的问题。

              所谓同步,是指多个操作在同一个时间段内只能有一个线程进行,其他线程要等待此线程完成之后才可以继续执行。

             

           ①使用synchronized关键字实现同步

           

    1   synchronized(同步对象){
    2       需要同步的代码;
    3 }

    使用同步代码块时必须指定一个需要同步的对象,但一般都将当前对象(this)设置为同步对象。

    ②死锁

      所谓死锁,就是两个线程都在等待彼此先完成,造成程序的停滞状态。一般程序的死锁是在程序运行时出现。

    通常多个线程共享同一资源时需要同步,但过多的同步操作则有可能会带来死锁问题。

  • 相关阅读:
    LeetCode 21. 合并两个有序链表
    LeetCode 20. 有效的括号
    LeetCode 19. 删除链表的倒数第N个节点
    AI
    http
    IP地址
    wiodows /linux CMD
    git
    AI
    JS常用的获取值和设值的方法
  • 原文地址:https://www.cnblogs.com/noacgnnolife/p/11700115.html
Copyright © 2011-2022 走看看