java异常习题

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);
    }

}
相关推荐
诺伦1 分钟前
Rust 错误处理实战:从 unwrap 到优雅 Result 的进阶之路
开发语言·后端·rust
caimouse26 分钟前
ReactOS 窗口系统分析(14):计时器/属性/加速键/热键 — timer.c + prop.c + accelerator.c + hotkey.c
c语言·开发语言·reactos
circuitsosk33 分钟前
Python 模块与包管理:import 机制、虚拟环境与 pip 完全指南
开发语言·python·pip·依赖管理·模块与包
就叫飞六吧33 分钟前
两道门:X-Frame-Options 和 SameSite 到底谁管什么
开发语言·chrome·ai编程
fl1768311 小时前
基于C#WPF实现的内存加速球清理类似360加速球内存清理
开发语言·c#·wpf
weixin_440730501 小时前
python+request实现接口-小结
开发语言·python
QQ_21696290961 小时前
【项目编号:project95315】SpringBoot公共自习室管理系统:座位预约、房间管理、签到核销、公告规则完整实战
java·spring boot·后端
ZJU_统一阿萨姆1 小时前
【算子开发】扫描(Scan)与前缀和
开发语言·arm开发·架构·系统架构·硬件架构
-凌凌漆-1 小时前
【C语言】结构体typedef struct与struct的区别
c语言·开发语言
嵌入式阿蔡1 小时前
面试高频考点 01:volatile / 中断 / 堆栈 八股精讲
java·面试·职场和发展·嵌入式实时数据库