阅读以下技术说明和Java代码,将Java程序中(1)~(5)空缺处的语句填写完整。 [说明] 类Queue表示队列,类中的方法如表4-12所示。 类Node表示队列中的元素;类EmptyQueueException给出了队列中的异常处理

admin2009-02-15  39

问题 阅读以下技术说明和Java代码,将Java程序中(1)~(5)空缺处的语句填写完整。
    [说明]
   类Queue表示队列,类中的方法如表4-12所示。

类Node表示队列中的元素;类EmptyQueueException给出了队列中的异常处理操作。
   [Java代码]
   public class testmain {                           //主类
       public static viod main (string args[]) {
           Queue q= new Queue;
           q.enqueue("first!");
           q.enqueue("second!");
           q.enqueue("third!");
             (1)   {
               while(true)
               system.out.println(q.dequeue());
           }
           catch(  (2)  ) { }
       }
       public class Queue  {                               //队列
           node m_firstnode;
           public Queue(){m_firstnode=null;}
           public boolean isempty() {
           if (m_firstnode= =null)
   return true;
           else
   return false;
           }
           public viod enqueue(object newnode) {      //入队操作
           node next = m_firstnode;
           if (next = = null) m_firstnode=new node(newnode);
           else {
               while(next.getnext() !=null)
   next=next.getnext();
               next.setnext(new node(newnode));
           }
       }
       public object dequeue()  (3)   {            //出队操作
           object node;
           if  (is empty())
             (4)  
           else {
               node =m_firstnode.getobject();
               m_firstnode=m_firstnode.getnext();
               return node;
           }
       }
   }
   public class node{                                 //队列中的元素
       object m_data;
       node m_next;
       public node(object data)              {m_data=data; m_next=null;}
       public node(object data,node next)    {m_data=data; m_next=next;}
       public void setobject(object data)    {m_data=data; }
       public object getobject(object data)  {return m_data; }
       public void setnext(node next)        {m_next=next; }
       public node getnext()                 {return m_next; }
   }
   public class emptyqueueexception extends  (5)   {    //异常处理类
       public emptyqueueexception() {
           system. out. println ( "队列已空!" );
       }
   }

选项

答案这是一道要求读者掌握Java异常处理机制的程序分析题。本题的解答思路如下。 异常是指计算机程序执行期间中断的正常流程的事件。例外是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。 当一个方法中发生错误时,该方法创建一个对象(该对象称之为异常对象)并将它交给运行时系统。异常对象包含了关于错误的信息,即包括错误的类型和错误发生时程序的状态。 “抛出一个异常”是指创建异常对象并将它交给运行时系统。Java的异常处理是通过try、catch、throw、 throws和finally 5个关键字来实现的。这几个关键字的解释如表4-15所示。 [*] Java运行时系统要求方法必须捕获或者指定它可以抛出的所有被检查的异常,如表4-16所示。 [*] try块和catch块是异常处理器的两个组件。在try块中产生的异常通常被紧跟其后的catch块指定的处理器捕获。 try { 可能抛出异常的语句 } catch(异常类型 异常引用) { 处理异常的语句 } catch语句可以有多个,分别处理不同类的例外。Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。其中,类型匹配是指catch所处理的例外类型与生成的例外对象的类型完全一致或者是它的父类,因此,catch语句的排列顺序应该是从特殊到一般。也可以用一个catch语句处理多个例外类型,此时它的例外类型参数应该是这几个例外类型的父类,程序设计中要根据具体的情况来选择catch语句的例外处理类型。 在选择要抛出的异常的类型时,可以使用其他人编写的异常类,也可以编写自己的异常类。本试题中采用自定义的类作为异常的类型。 仔细阅读试题中给出的Java源代码可知,主类TestMain包含了异常处理机制,用于检测在出队时“队列为空”的错误。因此(1)空缺处所填写的内容是“try”。 由catch语句的语法可知,(2)空缺处所填写的内容是对相应异常类型的引用。结合试题中给出的关键信息“类EmptyQueueException给出了队列操作中的异常处理操作”,即类EmptyQueueException是进行异常处理的类,因此(2)空缺处所填写的内容是“EmptyQueueExceptione”,或者“Exceptione”,其中,e是对象名,可用任意合法标识符替换。 由于异常都是从超类Exception派生而来的,因此(5)空缺处所填写的内容是“Exception”。 仔细阅读主类TestMain程序段可以看到,在try块的内部并没有给出显示的抛出异常语句,即没有出现throw语句。结合(4)空缺处所在行的注释—“队列为空,抛出异常”可以推断,在类Queue的方法dequeue中必定要抛出异常。因此(3)空缺处应指定方法dequeue可以抛出异常,即所填写的内容是“throws EmptyQueueException”。 (4)空缺处可以使用throw语句抛出异常,而使用throw语句时需要一个参数,即一个可抛出的对象,因此(4)空缺处所填写的内容是“throw(new EmptyQueueException())”。

解析
转载请注明原文地址:https://jikaoti.com/ti/5vW7FFFM
0

最新回复(0)