码迷,mamicode.com
首页 > 编程语言 > 详细

Java中异常的两种处理方式

时间:2015-06-14 17:02:49      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:throws

异常处理的两种方式:

  1. 声明抛出 throws  声明抛出的位置:是在方法声明的位置上使用throws关键字向上抛出异常。

  2. 捕捉 try....catch..

public class ExceptionTest03{

    public static void main(String[] args){
    //创建文件输入流读取文件
    //思考:java编译器是如何知道以下的代码执行过程中可能出现异常,
    //java编译器是如何知道这个异常发生的几率比较高呢?
   //java编译器不是那么智能,因为FileInputStream这个构造方法在声明的位置上使用了throws FileNotFoundException;
        FileInputStream fis=new FileInputStream("c:/ab.txt");
        
    }
}

//以上程序编译不通过
/*
ExceptionTest03.java:16: 未报告的异常 java.io.FileNotFoundException;必须对其进行捕捉或声明以便抛出 FileInputStream fis = new FileInputStream("c:/ab.txt");
*/

深入了解throws关键字

public class ExceptionTest04{
	
	public static void main(String[] args) throws FileNotFoundException{
		
		
		//m1();
		//使用throws处理异常不是真正处理异常而是推卸责任。
		//谁调用的就会抛给谁。
		//上面的m1方法如果出现了异常,因为采用的是上抛,给了JVM,JVM遇到这个异常就会退出JVM,下面的这个代码不会执行.
		//System.out.println("Hello World");
		
		//真正处理
		try{
			m1();
		}catch(FileNotFoundException e){}
		
		System.out.println("Hello World");
	}
	
	public static void m1() throws FileNotFoundException{
		m2();
	}
	
	
	public static void m2() throws FileNotFoundException{
		m3();
	}
	
	
	public static void m3() throws FileNotFoundException{
		new FileInputStream("c:/ab.txt"); //FileInputStream构造方法声明位置上使用throws(向上抛)
	}
	
}


/*
//在程序运行过程中发生了FileNotFoundException类型的异常.
//JVM为我们创建了一个FileNotFoundException类型的对象。
//该对象中携带以下的信息。
//JVM负责将该对象的信息打印到控制台。
//并且JVM停掉了程序的运行。
Exception in thread "main" java.io.FileNotFoundException: c:\ab.txt (系统找不到指定的文件。)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at ExceptionTest04.m3(ExceptionTest04.java:31)
        at ExceptionTest04.m2(ExceptionTest04.java:26)
        at ExceptionTest04.m1(ExceptionTest04.java:21)
        at ExceptionTest04.main(ExceptionTest04.java:11)
*/

try...catch..

语法:

try{

  可能出现异常的代码;

  }catch(异常类型1 变量){

   处理异常的代码;

   }catch(异常类型2 变量){

   处理异常的代码;

   }....

1.catch语句块可以写多个.

2.但是从上到下catch,必须从小类型异常到大类型异常进行捕捉。

3.try...catch...中最多执行1个catch语句块。执行结束之后try...catch...就结束了。

public class ExceptionTest05{
	
	public static void main(String[] args){
		
		//以下代码编译无法通过,因为FileNotFoundException没有处理.
		/*
		try{
			
			//FileNotFoundException
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
		}catch(ArithmeticException e){ //捕获的异常是算术异常	
		}
		*/
		
		//编译通过
		/*
		try{
			
			//FileNotFoundException
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
		}catch(FileNotFoundException e){
			
		}
		*/
		
		
		//以下程序编译无法通过
		//因为还有更多IOException没有处理.
		/*
		try{
			
			//FileNotFoundException
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
			fis.read();
			
		}catch(FileNotFoundException e){ 
			
		}
		*/
		
		
		//编译可以通过
		/*
		try{
			
			//FileNotFoundException
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
			fis.read();
			
		}catch(FileNotFoundException e){ 
			
		}catch(IOException e){
		
		}
		*/
		
		
		//编译通过.
		/*
		try{
			
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
			fis.read();
			
		}catch(IOException e){
		
		}
		*/
		
		//编译无法通过
		//catch可以写多个,但是必须从上到下,从小到大捕捉。
		/*
		try{
			
			FileInputStream fis = new FileInputStream("c:/ab.txt");
			
			fis.read();
			
		}catch(IOException e){
			
		}catch(FileNotFoundException e){
		
		}
		*/
	}
	
public class ExceptionTest06{
	
	//编译无法通过. 
	//IOException没有处理
	/*
	public static void main(String[] args) throws FileNotFoundException{
		
		FileInputStream fis = new FileInputStream("abc");
		fis.read();
		
	}
	*/
	
	//通过
	/*
	public static void main(String[] args) throws FileNotFoundException,IOException{
		
		FileInputStream fis = new FileInputStream("abc");
		fis.read();
		
	}
	*/
	
	//通过
	/*
	public static void main(String[] args) throws IOException{
		
		FileInputStream fis = new FileInputStream("abc");
		fis.read();
		
	}
	*/
	
	
	public static void main(String[] args){
		
		try{
			
			//程序执行到此处发生了FileNotFoundException类型的异常.
			//JVM会自动创建一个FileNotFoundException类型的对象,将该对象的内存地址赋值给catch语句块中的e变量.
			FileInputStream fis = new FileInputStream("abc");
			
			//上面的代码出现了异常,try语句块的代码不再继续执行,直接进入catch语句块中执行。
			System.out.println("TTTTTTT");
			
			fis.read();
			
		}catch(FileNotFoundException e){ //e内存地址指向堆中的那个对象是“FileNotFoundException类型的”事件。
			
			System.out.println("读取的文件不存在!");
			
			//FileNotFoundException将Object中的toString方法重写。
			System.out.println(e); //java.io.FileNotFoundException: abc (系统找不到指定的文件。)
			
		}catch(IOException e){
			
			System.out.println("其他IO异常!");
			
		}
		
		
		System.out.println("ABC");
		
	}
	
}


本文出自 “gaogaozi” 博客,请务必保留此出处http://hangtiangazi.blog.51cto.com/8584103/1661694

Java中异常的两种处理方式

标签:throws

原文地址:http://hangtiangazi.blog.51cto.com/8584103/1661694

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!