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

}
相关推荐
都叫我大帅哥6 分钟前
Java OpenFeign:微服务通信的“魔法契约书”
java·spring boot·spring cloud
李永奉1 小时前
C语言-指针初级(指针定义、指针的作用、指针的计算、野指针、悬空指针、void类型指针)
c语言·开发语言
Full Stack Developme1 小时前
Java 日期时间处理:分类、用途与性能分析
java·开发语言·数据库
麦兜*4 小时前
Spring Boot 整合量子密钥分发(QKD)实验方案
java·jvm·spring boot·后端·spring·spring cloud·maven
码破苍穹ovo5 小时前
堆----1.数组中的第K个最大元素
java·数据结构·算法·排序算法
2301_793086875 小时前
JVM 01 运行区域
java·开发语言
愤怒的小鸟~~~5 小时前
c语言创建的一个队列结构(含有这个头指针和这个尾指针的结构具有一定的参考价值)
c语言·开发语言·算法
崎岖Qiu5 小时前
【JVM篇13】:兼顾吞吐量和低停顿的G1垃圾回收器
java·jvm·后端·面试
久念祈6 小时前
C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(五)
java·rabbitmq·java-rabbitmq
鹿野素材屋7 小时前
C#中对于List的多种排序方式
开发语言·c#