1.阅读下列程序代码段: try { RandomAccessFile raf = new RandomAccessFile(“c:/a.txt”, “rw”); raf.write(‘A’); raf.writeInt(300); System.out.println(raf.getFilePointer()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 该程序输出的结果是( )。 A.1 B.2 C.5 D.4
2.在异常处理中,如释放资源、关闭文件、关闭数据库连接等由( )来完成。 A.try子句 B.catch子句 C.finally子句 D.throw子句
3.下列异常类中,属于RuntimeException的子类的是:( )。 A.FileNotFoundException B.IOException C.ClassCastException D.ArrayIndexOutOfBoundsException
4.对于catch子句的排列,下列哪种是正确的( ) A.父类在先,子类在后 B.子类在先,父类在后 C.有继承关系的异常不能在同一个try程序段内 D.只能有子类异常
5.String[] arr = new String[3]; System.out.println(arr[0].length()); 运行结果是( )。 A.会出现编译错误。 B.运行期会抛出ArithmeticException异常 C.运行期会抛出IOException异常 D.运行期会抛出NullPointerException异常// 引用类型初始值为null,
6.下列代码编译和运行的结果是:( )。 public static void main(String[] args) { try { String[] s=null; s[0] = “test”;//运行才会NullPointerException System.out.println(s[0]); } catch (Exception ex) { System.out.println(“Exception”); } catch (NullPointerException npe) {//编译报错。 System.out.println(“NullPointerException”); } } A.输出:test B.输出:Exception C.编译失败 D.输出:NullPointerException 解析: catch (NullPointerException npe) 编译报错,多个catch的异常之间若存在继承关系,一定要先捕获子类异常,再捕获超类异常,否则编译不通过。异常之间没有关系捕获异常时可以随意声明位置
简答题 1.java中的异常处理机制有几种?怎么实现? 答:处理机制有两种: 一:使用try-catch捕获并处理异常 实现: try{ 可能出现异常的代码块 }catch(XXXException e){ 处理try中出现的XXXException的代码方案 } 二:使用throws抛出异常。由调用者处理该异常,调用者也可以继续往外抛出该异常或者使用try-catch处理
2.Error和Exception的区别 Error 是系统级错误,是Java运行环境内部错误或者硬件问题,不能通过程序来处理这样的问题,发生错误时程序退出运行。它是Java虚拟机抛出的,比如虚拟机内存溢出等
Exception是程序需要处理的异常,由于程序设计的不完善(程序员逻辑问题)而出现的问题,程序必须进行处理,比如空指针异常,数组下标越界异常等。 通常程序中处理的异常都是Exception
3.RuntimeException和CheckedException的区别 CheckedException是编译时异常(检查异常),java 语言强制要求处理的所有非运行时异常,例如IOException ,SQLException 运行时异常(非检查异常 UnChecked) --RuntimeException,一般是由于程序逻辑错误引起的,比如算术异常,空指针异常等待。
4.final、finally、finalize的区别 final 可以修饰属性,方法,类。 final修饰属性为常量,初始化后不可被修改。 final修饰方法可被继承不能被重写。 final 修饰类不能被继承。
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源,关闭文件,关闭数据库连接的情况下。
finalize是方法名,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。
5.throw 与 throws 的区别 区别: 1.throw 声明位置在方法体内,后面跟的是异常类的实例(new XXXException(”异常信息描述“)),只能有一个; throws 声明位置在方法声明后,后面跟的是异常类名。 2.throw 后面只能抛出一个异常对象名,throws同时抛出多个异常时中间用“,”逗号隔开。
throw 和 throws 联系: 1.如果方法中有throw 抛出的RuntimeException 及其子类对象,则方法声明上可以没有throws,(由该方法的调用者处理该异常),除此之外,方法声明上必须有throws
6.java 中如何编写自定义异常? 定义自定义异常 需要注意以下几点: 1.类名定义时要做到见名知意 2.需要继承自Exception,直接或间接继承都可以 3.提供继承自Exception中提供的所有构造器
7.说出9个常见的异常。 ①数字格式异常NumberFormatException ②算术异常ArithmeticException ③数组下标越界异常ArraysIndexOutOfBounds ④字符串下标越界异常StringIndexOutOfBounds ⑤空指针异常NullPointerException ⑥类型格式异常ClassFormatException ⑦文件找不到异常NotFoundFileException ⑧引用类型强制转换异常ClassCastException ⑨IllegalArgumentException非法参数异常
编程题 1.模拟用户登录案例。接收用户输入的账号、密码,封装login方法用于验证登录。 --数据可自行模拟 如果账号密码均正确,显示登录成功,否则抛出对应异常,并给出提示信息。
- 注:需自定义两个异常UserNameNFException(用户名未找到异常)、PwdNFException(密码未找到异常),分别处理用户名的错误和密码的错误。
public class TestLogin {
public static void main(String[] args) throws UserNameNFException, PwdNFException {
User[] users = new User[3];
users[0] = new User("1474734090", "123abc");
users[1] = new User("2982046836", "abc123");
users[2] = new User("3240935383", "123456");
Scanner scan = new Scanner(System.in);
System.out.println("请输入账号:");
String id = scan.nextLine();
System.out.println("请输入密码:");
String password = scan.nextLine();
User cust = new User(id,password);
for (int i = 0; i < users.length; i++){
if (cust.Login(users)){
System.out.println("登陆成功!");
break;
}
}
}
}
package JAVA_API.Num13_Exception.exceptionhomework;
import java.util.Objects;
public class User {
private String id;
private String password;
public User() {
}
public User(String id, String password) {
this.id = id;
this.password = password;
}
//如果账号密码均正确,显示登录成功,否则抛出对应异常,并给出提示信息。
public boolean Login(User[] users) throws PwdNFException, UserNameNFException {
for (int i = 0; i < users.length;i++){
if (this.id.equals(users[i].id)){
if (this.password.equals(users[i].password)){
return true;
}else{
throw new PwdNFException("密码错误!");
}
}else if (i == users.length-1){
throw new UserNameNFException("用户不存在");
}
}
return false;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", password='" + password +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(password, user.password);
}
}
package JAVA_API.Num13_Exception.exceptionhomework;
public class UserNameNFException extends Exception{
public UserNameNFException() {
}
public UserNameNFException(String message) {
super(message);
}
public UserNameNFException(String message, Throwable cause) {
super(message, cause);
}
public UserNameNFException(Throwable cause) {
super(cause);
}
public UserNameNFException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
package JAVA_API.Num13_Exception.exceptionhomework;
public class PwdNFException extends Exception{
public PwdNFException() {
}
public PwdNFException(String message) {
super(message);
}
public PwdNFException(String message, Throwable cause) {
super(message, cause);
}
public PwdNFException(Throwable cause) {
super(cause);
}
public PwdNFException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
|