八、Java异常处理及输入输出流简介
1.列出5个常见的异常。
2.写出Java语言的异常处理机制的优点。
3.为什么异常处理技术不应该用于常规的程序控制?
4.引起异常产生的条件是什么?
5.异常没有被捕获将会发生什么?
6.编写一个程序,以说明catch(Exception e)如何捕获各种异常。
7.下面的代码段中finally语句块会被执行吗?
public class ExceptionExam3
{
public static void main(String [] args)
{
try
{
int [] a=new int[3];
System.exit(0);
}
catch(ArrayIndexOutOfBoundsException e)
{System.out.println("发生了异常");}
finally
{System.out.println("Finally");}
}
}
8.throws的作用是什么?
9.应在程序的什么地方使用异常处理?
10.下面的代码有什么错误吗?
class ExceptionExam{…}
throw new ExceptionExam();
11.异常类型匹配的处理方式。程序功能:首先输出“这是一个异常处理的例子”,然后在你程序中主动地产生一个 ArithmeticException 类型被0 除而产生的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e的方法getMessage 给出异常的具体类型并显示出来。
12.根据所给创建自定义异常类的使用格式,编写一个自定义异常的小程序。
13.什么叫流?流式输入输出有什么特点?
来源:考试大的美女编辑们
14.Java流被分为字节流、字符流两大流类,两者有什么区别?
15.File类有哪些构造函数和常用方法?
16.利用文件输入输出流编写一个实现文件拷贝的程序,源文件名和目标文件名通过命令行参数传入。
17.编写一个程序,在当前目录下创建一个子目录test,在这个新创建的子目录下创建一个文件,并把这个文件设置成只读。
18.位置指针的作用是什么?RandomAccessFile类提供了哪些方法实现对指针的控制?
19.编写一个程序,从键盘输入一串字符,统计这串字符中英文字母、数字、其他符号的字符数。
20.编写一个程序,从键盘输入一串字符,从屏幕输出并将其存入a.txt文件中。
采集者退散 21.编写一个程序,从键盘输入10个整数,并将这些数据排序后在标准输出上输出。
参考答案
1.答:内存耗尽、数组下标超出边界、被0除、非法的方法参数、算法溢出处。
来源:考试大的美女编辑们
2.答:(1)Java通过面向对象的方法进行异常处理,把各种异常事件进行分类,体现了良好的层次性,提供了良好的接口,这种机制对于具有动态特 性的复杂提供了强有力的控制方式。(2)Java的异常处理机制使得处理异常的代码和“常规”代码分开,减少了代码的数量,增强了程序的可读性。(3) Java的异常处理机制使得异常事件可以沿调用栈自动向上传播,而不是C语言中通过函数的返回值来传播,这样可以传递更多的信息,并且简化了代码的编写。 (4)由于把事件当成事件处理,利用类的层次性我们可以把多个具有相同父类的异常统一处理,也可以区分不同的异常分别处理,使用非常灵活。
3.答:a. 异常处理用于不经常发生但通常导致程序终止的情况,因此要求编程人员为编译器的优化执行实现异常处理。b. 常规控制结构的控制流程通常比异常的更为清晰、交流更高。c. 在发生异常,并且没有释放异常发生之前分配的资源时,堆栈是展开的,所以会出现一些问题。d.“额外的”异常会妨碍真正错误类型的异常。这种使程序员更难 以跟踪大量的异常。
4.答:异常产生的方式有3种。第一种是在某些内部错误时,Java虚拟机可以产生异常,该异常不在你的程序控制范围内,通常不作处理。第二种是由程序代码中的错误引起,这种异常需要你的程序处理。第三种是通过使用throw语句手动生成的异常。
5.答:未捕获的异常最终会导致程序非正常终止。BR> 6.public class ExceptionExam
{
public static void main(String [] args)
{
try
{
int i=0;
i=3/i;//将产生算术异常。
}
catch(ArithmeticException e)//找到了匹配的异常,执行该catch块。
{
System.out.println("发生了ArithmeticException异常");
}
catch(AarryIndexOutOfBoundsException e)//不是匹配的异常,且不会再捕获
//异常,如果发生数组索引超出范围所产生的异常,将执行该catch块。
{
System.out.println("发生了AarryIndexOutOfBoundsException异常");
}
catch(Exception e)
//前两个catch块均无法捕获try块中发生的异常时,才会执行该catch块。
{
System.out.println("发生了异常");
}
finally
{ System.out.println("执行d Finally"); }
}
}
7.答:无论是出于何种原因,只要执行离开try/catch代码块,就会执行finally代码块。即无论try是否正常结束,都会执行 finally定义的最后的代码。如果try代码块中的任何代码或它的任何catch语句从方法返回,也会执行finally代码块。但本题中在try代 码块中执行了“System.exit(0);”语句,执行了这一语句后,Java虚拟机(JVM)将被终止。那么finally语句块一定不会被执行。