JAVA第六次作业

  1. Throwable的子类包含哪两类?简述Java Error类与Exception类的区别。
    答:Error和Exception。Error: 致命异常。标识系统发生了不可控的错误。程序无法处理,只能人工介入。例如, 虚拟机产生的错误StackOverflowError、OutOfMemoryError。
    Exception: 非致命异常。程序可处理。分为受编译器检测的checked异常(受检异常)和不受编译器检测的unchecked异常(非受检异常)。
    2. Exception又分为checked异常和unchecked异常,请分别举例说明。
class CheckedExceptionA extends Exception {

}
class UnCheckedExceptionB extends RuntimeException {

}

创建一个Run类使用他们时,CheckedExceptionA必须处理,UnCheckedExceptionB则不需要

public class Run {

    public void handleChecked(){
        try {
            throw new CheckedExceptionA();
        } catch (CheckedExceptionA checkedExceptionA) {
            checkedExceptionA.printStackTrace();
        }
    }

    public void handleUnChecked(){
        throw new UnCheckedExceptionB();
    }
}
  1. 请查阅资料,简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。
    答:StackOverflowError:抛出这个错误是因为递归太深.
    OutOfMemoryError:因为内存溢出,JVM不能分配给对象的创建空间.并且GC也不能够回收足够的空间.
  2. 简述异常处理的两种方式,并举例说明区别。
    答:继续上抛:相当于推卸责任,把异常传递给调用者。
    在这里插入图片描述

自己捕捉:捕捉相当于自己拦下异常,把异常给解决了,调用者是不知道的。
在这里插入图片描述

6. 选取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();
      }
    }
}
  1. 根据某业务场景自定义一个异常类,并在某场景下抛出该异常对象。
public class SelfGenerateException extends Exception
{
	SelfGenerateException(String b){
		super(b);   //调用Exception的构造方法
	}
	static void throwOne() throws SelfGenerateException
	{
		int a = 0;
		if (a==0) //如果a为1就认为在特定应用下存在异常,改变执行路径,抛出异常
		{throw new SelfGenerateException("a为0");}		
	}
	public static void main(String args[])
	{
		try
		{throwOne();}
		catch(SelfGenerateException e)
	    {e.printStackTrace();}
	}
}
  1. 异常中的throws声明与throw语句的区别是什么?请举例说明。
    区别一:throw 是语句抛出一个异常;throws 是方法抛出一个异常;
    throw语法:throw <异常对象>
    在方法声明中,添加throws子句表示该方法将抛出异常。
    throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
    其中:异常类可以声明多个,用逗号分割。
    区别二:throws可以单独使用,但throw不能;
    区别三:throw要么和try-catch-finally语句配套使用,要么与throws配套使用。但throws可以单独使用,然后再由处理异常的方法捕获。
    12. finally子句的作用是什么?
    答: finally用途:
    一般用来进行一些善后清理操作,
    例如清理资源、释放连接、关闭文件、I/O流等操作。
String readFileWithFinallyBlock(String path) throws IOException {
 BufferedReader br = new BufferedReader(new FileReader(path));
 try {
    return br.readLine();
 } 
 finally {
    if (br != null) br.close(); //关闭文件流
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值