1 关于Java的异常处理机制的叙述哪些正确?
A.如果程序发生错误及捕捉到异常情况了,才会执行finally部分
B.其他选项都不正确
C.当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序
D.catch部分捕捉到异常情况时,才会执行finally部分
答案:C
原因:A:finally的执行是不需要条件的,不会出现选项所示的前提条件
D:原因同A
2 有关下述Java代码描述正确的选项是____。
public class TestClass {
private static void testMethod(){
System.out.println("testMethod");
}
public static void main(String[] args) {
((TestClass)null).testMethod();
}
}
A.编译不通过
B.编译通过,运行异常,报NullPointerException
C.编译通过,运行异常,报IllegalArgumentException
D.编译通过,运行异常,报NoSuchMethodException
E.编译通过,运行异常,报Exception
F.运行正常,输出testMethod
答案:F
原因:testMethod方法的调用,使用类名来调用即可,它属于类方法。testMethod被private修饰,它不依赖与任何对象。((TestClass)null).testMethod();其中的null表示不指向任何对象。可以正常调用。
3 下列程序的运行结果
public void getCustomerInfo() {
try {
// do something that may cause an Exception
} catch (java.io.FileNotFoundException ex) {
System.out.print("FileNotFoundException!");
} catch (java.io.IOException ex) {
System.out.print("IOException!");
} catch (java.lang.Exception ex) {
System.out.print("Exception!");
}
}
A.IOException!
B.IOException!Exception!
C.FileNotFoundException!IOException!
D.FileNotFoundException!IOException!Exception!
答案:A
原因:// do something that may cause an Exception表示会抛出某一个异常,而不是表示会抛出Expection异常。只能同时捕捉到一个异常。所以选A。
4 在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。
A.try子句
B.catch子句
C.finally子句
D.throw子句
答案:C
5 下面有关JAVA异常类的描述,说法错误的是 ?
A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B.非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D.RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
答案:B、D
原因:B:非RuntimeException一般是编译时期的异常或受查异常,它需要被 try{}catch语句块所捕获,不是必须。或者通过throws在函数声明的地方来声明一下这个异常。
D:最后半句,不是必须被 try{}catch语句块所捕获
6 实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
答案:
import sun.security.util.Password;
import java.util.Scanner;
public class TestDemo {
public static String name="豆豆";//用户名
public static String password="12345";//密码
public static void main(String[] args) throws PasswordException, NameException {
System.out.println("请输入用户名:");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
System.out.println("请输入用户密码:");
String password=scanner.nextLine();
compare(name,password);
}
public static void compare(String name,String password) throws NameException, PasswordException {
if (!TestDemo.name.equals(name)) {
throw new NameException("用户名错误");
} else if (!TestDemo.password.equals(password)) {
throw new PasswordException("用户密码错误");
} else {
System.out.println("登录成功");
}
}
public static class NameException extends Throwable {
public NameException(String s) {
super(s);
}
}
public static class PasswordException extends Throwable {
public PasswordException(String s) {
super(s);
}
}
}