异常

来源:互联网 发布:wind mac版 excel插件 编辑:程序博客网 时间:2024/06/05 05:20


 面试题

当我们的程序出现异常的时候我们的jvm虚拟机会给一个默认的处理方式:
1.从出现异常的地方将程序停止掉
 2.将出现的异常类名,异常的原因,还有出现异常的位置全部打印到控制台
 你觉得jvm虚拟机给出的这种默认的处理方式好吗?
 答:不好,因为我们的程序是由多个部分组成,一旦一个部分出现了异长,
 我们不应该让 程序直接停止掉,应该让程序的其他模块继续正常运行,而针对这一个出现的异长给出一个
 具体的处理方案,这个处理方案最好不要影响到其他模块的程序执行

  throw和throws的区别?
  throws:
  用在方法声明后面,跟的是异常类名
  可以跟多个异常类名,用逗号隔开
  表示抛出异常,由该方法的调用者来处理 

   throws表示出现异常的一种可能性,并不一定会发生这些异常 
 throw:
   用在方法体内,跟的是异常对象名
   只能抛出一个异常对象名
   表示抛出异常,由方法体内的语句处理
   throw则是抛出了异常,执行throw则一定抛出了某种异常?

printStackTrace():打印异常信息,程序从出问题的地方开始就会打印创建一个该异常对应的对象,
    该对象直接调用打印方法

编译时期异常和运行时期异常的区别:
  编译时期异常:Java程序必须显示处理,否则程序就会发生错误,无法通过编译
  FileNotFoundException(文件未找到异常)
 运行时期异常:无需显示处理,也可以和编译时异常一样处理
 ArithmeticException

   A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
   B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
   C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

package com.edu_01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * throws:(演示文件未找到异常,除数为0异常)
 *   用在方法声明后面,跟的是异常类名
 *   可以跟多个异常类名,用,号隔开
 *   表示抛出异常,由该方法的调用者来处理
 *   throws表示出现异常的一种可能,并不一定会发生这些异常
 */
public class ExceptionDemo7 {
 public static void main(String[] args){
  method();
  //method2();//将这个异常交给了调用者去进行处理
     //1.可以继续往上throws,将异常继续向上进行抛出了
     //2.自己try..catch...,相当与自己处理了这个异常
  try{
   method2();
  }catch(FileNotFoundException e){
   System.out.println("文件未找到");
  }
  /**
   * 我们以后遇到异常是抛还是抓呢?
   * 答:原则上能抛就抛,等到已经抛到了程序最底层的时候,最好就不要抛了,自己抓取。
   */
  
 }

 private static void method2() throws FileNotFoundException {
  //此时会抛出一个编译时期的异常,
  //我们必须在方法上进行声明,如果不声明的话,会一直编译报错
  FileInputStream fis = new FileInputStream("D://a.txt");
 }

 private static void method() throws ArithmeticException {
  //在方法声明上声明这个方法可能出现的异常,不代表这个异常一定会出现
  //此时仅仅是告诉我的调用者我的这个方法可能会出现异常,并不做具体的处理,交给
  //调用者自己去处理这个异常
  //此时抛出的 出数为0的异常,属于运行时期异常
  System.out.println(10/5);
 }

}







0 0
原创粉丝点击