java第七章

论述题

1.Throwable的子类包含哪两类?简述Java Error类与Exception类的区别
Error:
致命 异常,标识系统发生了不可控的错误。程序无法处理,只能人工介入。例如,虚拟机产生了StackOverflowError,OutOfMemoryError。

Exception:
非致命 异常。程序可处理。分为受编辑器检测的checked异常(受检异常)和不受编辑器检测的unchecked异常(非受检异常)。

2.Exception又分为checked异常和unchecked异常,请分别举例说明。
派生于Error或者RuntimeException的异常称为unchecked异常
所有其他的异常称为checked异常

3.请查阅资料,简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。
StackOverflowError:抛出这个错误是因为线程请求的栈深度大于虚拟机所允许的深度,因为Java线程操作是基于栈的,当调用方法内部方法也就是进行一次递归的时候,就会把当前方法压入栈直到方法内部的方法执行完全之后,就会返回上一个方法,也就是出栈操作执行上一个方法。

OutOfMemoryError:如果虚拟机栈可以动态扩展(当前大部分的Java虚拟机都可动态扩展,只不过Java虚拟机规范中也允许固定长度的虚拟机栈),如果扩展时无法申请到足够的内存,并且GC也不能够回收足够的空间,当你创建对象的速度快于JVM回收空间的时候就会发生空间不足这个问题。

4.简述异常处理的两种方式,并举例说明区别。
在这里插入图片描述
5.选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。(例如算术异常,空指针异常,类转换异常,数组越界异常等)
EmptyStackException类 (空堆栈异常):

class A{
    public  static void main(String[]args){
      Stack<Integer>stack = new Stack<Integer>();
      try{
          stack.pop();
      }catch (Exception e){
          e.printStackTrace();
      }
    }
}

ArithmeticException类 (算术异常):

class A{
    public  static void main(String[]args){
      try{
          int a=1/0;
      }catch (Exception e){
          e.printStackTrace();
      }
    }
}

NullPointerException类 (空指针异常):

class A{
    public  static void main(String[]args){
      Scanner sc=null;
      try{
          sc.nextBoolean();
      }catch (Exception e){
          e.printStackTrace();
      }
    }
}

ArrayIndexOutOfBoundsException类 (数组越界异常):

class A{
    public  static void main(String[]args){
      int []a=new int[5];
      try{
          System.out.println(a[-1]);
      }catch (Exception e){
          e.printStackTrace();
      }
    }
}

NegativeArraySizeException类 (数组大小为负异常):

class A{
    public  static void main(String[]args){
      try{
          int []a=new int[-1];
      }catch (Exception e){
          e.printStackTrace();
      }
    }
}

6. 根据某业务场景自定义一个异常类,并在某场景下抛出该异常对象。

public class InsufficientFundsException extends Exception
{

    private double amount;
    public InsufficientFundsException(double amount)
    {
        this.amount = amount;
    }
    public double getAmount()
    {
        return amount;
    }
}

package bookcode.ex7.part7_5;


public class CheckingAccount {

    //balance为余额,number为卡号
    private double balance;
    private int number;

    public CheckingAccount(int number) {
        this.number = number;
    }

  
    public void deposit(double amount) {
        balance += amount;
    }


    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount <= balance) {
            balance -= amount;
        } else {
            double needs = amount - balance;
            throw new InsufficientFundsException(needs);
        }
    }


    public double getBalance() {
        return balance;
    }


    public int getNumber() {
        return number;
    }
}

7.异常中的throws声明与throw语句的区别是什么?请举例说明。
throw:
表示方法内抛出某种异常对象

throws:
方法的定义上使用 throws 表示这个方法可能抛出某种异常

8.finally子句的作用是什么?
finally不论是否抛出异常都会执行,即使在有返回值并且已执行return语句后,也会执行finally语句块,但return返回的结果不会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值