Excise1_Exception

1.阅读下列程序代码段:
try {
RandomAccessFile raf = new RandomAccessFile(“c:/a.txt”, “rw”);
raf.write(‘A’); //write()写的是int的低八位,一个字节,这里进行了自动转型
raf.writeInt(300);//writeInt()写入一个int型,写入四个字节
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子句//try{可能出现异常的代码片段}
B.catch子句catch捕获try中可能出现的异常
C.finally子句
D.throw子句

3.下列异常类中,属于RuntimeException的子类的是:( )。
A.FileNotFoundException
B.IOException // CheckedException,编译时异常
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
解析:C。 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语句中,并且附带着一个语句块,在系统没有在中断(System.exit(0))情况下,表示这段语句最终一定被执行,经常被用在需要释放资源,关闭文件,关闭数据库连接

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(密码未找到异常),分别处理用户名的错误和密码的错误。
/**
 * 1.模拟用户登录案例。接收用户输入的账号、密码,封装login方法用于验证登录。  --数据可自行模拟
 * 如果账号密码均正确,显示登录成功,否则抛出对应异常,并给出提示信息。
 * 注:需自定义两个异常UserNameNFException(用户名未找到异常)、PwdNFException(密码未找到异常),
 * 分别处理用户名的错误和密码的错误。
 * @author yyc
 * 2021/9/18 17:37
 */
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;

/*
 * 1.模拟用户登录案例。接收用户输入的账号、密码,封装login方法用于验证登录。  --数据可自行模拟
 * 如果账号密码均正确,显示登录成功,否则抛出对应异常,并给出提示信息。
 *  * 注:需自定义两个异常UserNameNFException(用户名未找到异常)、PwdNFException(密码未找到异常),分别处理用户名的错误和密码的错误。
 * @author yyc
 * 2021/9/18 17:34
 */

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;

/**
 * * 定义自定义异常 需要注意以下几点:
 *  * 1.类名定义时要做到见名知意
 *  * 2.需要继承自Exception,直接或间接继承都可以
 *  * 3.提供继承自Exception中提供的所有构造器
 *  *
 *  UserNameNFException 用户名未找到异常
 *  当用户未找到时抛出该异常
 * @author yyc
 * 2021/9/19 15:40
 */
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;

/**
 * @author yyc
 * 2021/9/19 15:44
 */
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);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.下列特点中,哪个是Java 虚拟机执行的特点之一? A、字节代码 B、多进程 C、静态连接 D、编译 2.Java语言的类型是 A、面向对象语言 B、面向过程语言 C、汇编程序 D、形式语言 3.下列哪个数代表单精度浮点数? A、0652 B、3.4457D C、0.298f D、0L 4.以下哪个表达式是不合法的 A、String x="Hello"; int y=9; x+=y; B、String x="Hello"; int y=9; if(x==y){} C、String x="Hello"; int y=9; x=x+y; D、String x=null; int y=(x!=null)&&(x.length()>0)? x.length():0; 5.main()方法的返回类型是: A、 int B、void C、boolean D、 static 6.下列对继承的说法,哪个是正确的? A、子类能继承父类的所有方法和状态 B、子类能继承父类的非私有方法和状态 C、子类只能继承父类public方法和状态 D、子类只能继承父类的方法,而不继承状态 7.下列关于构造方法的说法正确的是( )。 A、因为构造方法名与类名必须相同,构造方法在创建对象时被执行。 B、构造方法是给对象赋初值,所以没有返回值,必须用void来声明。 C、构造方法不能被程序调用,也不可以重载。 D、一个类只允许有一个构造方法。 8.若需要定义一个类域或类方法,应使用哪种修饰符? A、static B、package C、private D、public 9.如要抛出异常,应用下列哪种子句? A、catch B、throw C、try D、finally 10.对于catch 子句的排列,下列哪种是正确的? A、父类在先,子类在后 B、子类在先,父类在后 C、有继承关系的异常不能在同一个 try 程序段内 D、先有子类,其他如何排列都无关 11.计算机中的流是? A、流动的字节 B、流动的对象 C、流动的文件 D、流动的数据缓冲区 12.以下哪个是java.io包中的一个兼有输入输出功能的类。 A、Object B、Serializable C、RandomAccessFile D、java.io中不存在这样的类 13.下面关于线程优先级的说法中,错误的是: A、Java中的线程的优先级有三个静态常量 B、新建线程的优先级默认为最低 C、优先级高的线程优先被执行 D、一个线程运行时,有可能被比它高优先级的线程抢占运行 14.下列方法中建议使用的是: A、stop() B、supend() C、resume() D、wait() 15.如果希望所有的控件在界面上均匀排序,就使用下列哪种布局管理器? A、BosLayout B、GridLayout C、BorderLayout D、FlowLayout 16.在一个MVC用户界面中,存在三个通讯对象,其中_________是指定的逻辑表示法。 A、模型 B、视图 C、控件 D、结构 17.applet类的直接父类是: A、Component类 B、Container类 C、Frame类 D、Panel类 18.下面关于沙箱模型的叙述中错误的是

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值