当前位置:首页 > Java习题答案_太原理工大学软件工程(2)
来处理。
6.6 在try程序块中发生了异常,其后如果有多个catch参数类与之匹配,会执行那个catch块中的异常处理程序。
答:当try语句块中的代码执行时发生异常,程序的正常运行便中断,并抛出异常对象,然后在try块后面的各个catch()中查找与异常对象相匹配的异常类,当找到第一个与之相匹配的参数类时,就执行包含这一参数类的catch语句块中的代码。
6.7 什么情况下要使用finally程序块?
答:finally子句为异常处理提供一个统一的出口,使得在控制流转到其它部分以前(即使有return,break语句),能够对程序的状态作统一的管理。finally程序块中通常都包含一些用于资源释放的代码块。例如,在finally程序块中应将try程序块中打开的所有文件关闭。
6.8 假设下列try-catch语句块中的第2个语句s2产生一个异常,试回答下述问题:
try{
s1; s2; s3;
}catch(ExceptionType e1){
?
}catch(ExceptionType e2){
? } s4;
⑴语句s3会执行吗?
⑵如果catch捕获到异常,语句s4会执行吗? ⑶如果异常未被捕获,语句s4会执行吗?
答:若try-catch语句块中的第2个语句s2产生一个异常,⑴语句s3不会执行,⑵如果catch捕获到异常,异常处理后,会继续执行语句s4,⑶如果异常未被捕获,则程序终止运行,语句s4也不会执行。
6.9 发生一个异常一定会导致程序终止吗?
答:发生一个异常不一定会导致程序终止运行。若程序中没有异常处理,发生一个异常一定会导致程序终止运行。若程序中有异常处理,发生一个异常并被捕获,则异常处理后,程序会继续运行。
6.10 分析下面程序的执行流程并写出输出结果。
//Xt6_10_User_UserException.java import java.io.*;
class MyException extends Exception{ }
public class Xt6_10_UserException { }
答:程序运行时,main()方法调用action()方法,action()方法中抛出一个MyException类异常,但没有捕获及处理,而是向上移交给main()方法,在main()方法捕获并处理。程序执行的输出结果是:MyException
6.11 设计并实现一个程序。新建一个异常类StringTooLongException,当发现字符串长
static void action() throws MyException{ }
public static void main(String[] args) { }
try{
String s=new String(); if(s.equals(\))
throw new MyException();
public String toString(){ }
return \;
action();
}catch(MyException e){ }
System.out.println(e);
度太长时抛出该异常。在程序的main方法中循环输入字符串,直到输入“DONE”为止。如果输入的字符串长度超过20个字符,则抛出异常。考虑两种异常处理方式:⑴抛出异常终止程序;⑵捕获并处理异常,输出适当的提示信息并继续输入字符串。
下面的程序按第2种方式处理。
import java.util.Scanner;
public class Xt6_11_DefineException { }
//自定义一个异常类,类名为:StringTooLongException class StringTooLongException extends Exception{ }
StringTooLongException(){ super(\字符串长度太长!\); }
public static void main(String[] args) {
String str=\;
Scanner scan=new Scanner(System.in);
StringTooLongException problem=new StringTooLongException(); do{
System.out.print(\输入一个字符串:\); try{
str=scan.next(); if(str.length()>20)
throw problem; //抛出自定义异常 }catch(StringTooLongException e){ }
System.out.println(e.toString());
}while(!str.equals(\));
System.out.println(\主方法结束.\); }
第7章 多线程编程
1. 什么是线程?与进程有何不同?
答:线程是操作系统中重要概念之一,是程序运行的基本执行单元,与进程一样,也有创建、销毁和切换等状态,但负荷远小于进程,又称为轻量级进程。与进程不同的是:占用的资源少,不像进程那样可由几个线程组成,在Java语言中,用java.lang.Thread类创建和管理线程,而进程是由java.lang.Process类等类创建和管理。
2. 使用多线程的优势何在?
答:使用多线程具有很多优势,这主要表现在如下五方面:充分利用CPU资源;简化编程模型;简化异步事件的处理;使GUI程序更有效率;节约成本。 3. 主要的线程状态有哪些?它们之间是如何转换的?
答:线程主要有如下5个状态:New(新)、Runnable(可运行、就绪)、Running(运行)、Blocked(被阻塞、挂起)和Dead(死亡),它们之间转换如下图所示:
等待/阻赛/睡眠获得资源获得/失去cpu资源外部事件或占用cpu时间用完新建启动可运行运行执行完成死亡 4. 简述创建线程的两种方法及各自的步骤。
答:第一种方法是通过继承Thread类编写用户自己的线程类,而后创建实例,步骤为: ?
定义自己的线程类MyThread,并覆盖Thread类的run(),实现所需功能;
? 实例化MyThread类,并用start()方法启动。
第二种方法是通过实现Runnable接口来创建线程,使用Runnable接口创建线程的步骤为: ?
实现Runnable接口,如实现了该接口的类为MyRunnable,并在MyRunnable类的run()方法里编写想让线程执行的代码; ? ?
创建实现了Runnable接口类的实例,如创建MyRunnable类的实例为myRunnable;
创建线程类Thread的实例,并用构造方法Thread(Runnable)将myRunnable赋值给target。
5. 简述sleep()方法的作用,并修改例7.10中休眠部分,体会线程有无休眠的差异。
答:sleep()作为休眠方法,可让线程休眠一段时间,此期间线程不消耗CPU资源。传入参数是休眠的时间,单位为毫秒。
共分享92篇相关文档