1.有关下述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()方法是由static修饰的方法通过类名进行方法调用,所以该方式是正确的。
2.下列程序的运行结果
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
解析:FileNotFoundException为IOException的子类,IOException为Exception的子类,但是代码执行时只会捕获一个异常所以可以排除其他选项,只有A是打印一个异常。
3.下面有关JAVA异常类的描述,说法错误的是?
A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B.非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获
C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D.RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
答案:BD
解析: 如果在一个方法中遇到了一个非RuntimeException,并且在方法签名中声明了这个异常(使用throws
关键字),那么你就不需要在方法内部捕获它。调用这个方法的代码将需要处理这个异常(要么捕获它,要么在方法签名中声明它)。
4.实现一个简单的控制台版用户登陆程序
程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
package config;
public class Login {
private static String userName = "admin";
private String password = "1234";
public static void loginInfo(String name, String password) throws UserNameException, PasswordException {
if (!userName.equals(userName)) {
throw new UserNameException("用户名错误");
}
if (!password.equals(password)) {
throw new PasswordException("密码错误");
}
System.out.println("登录成功");
}
public static void main(String[] args) {
try{
loginInfo("admin","1234");
}catch(UserNameException e){
e.printStackTrace();
}catch(PasswordException e){
e.printStackTrace();
}
}
}
package config;
public class UserNameException extends Exception{
public UserNameException(String message){
super(message);
}
}
package config;
class PasswordException extends Exception{
public PasswordException(String message){
super(message);
}
}