JAVA7新特性1---异常处理

  我想从这篇文章开始,总结一下我学习的JAVA7的一些特性。java7也是比较重要的一个java版本,新的语言特性,新的java语法,JVM新特性的增加等,都是我们值得这些java老人回头重新学习的知识点。

一、异常处理之try-cach 模型

这是一个每一个java程序员都会用的try catch 处理异常,后面几个是java7为我们带来的新的变化

	try {
		FileInputStream input = new FileInputStream("");
	} catch (FileNotFoundException e1) {
		//捕获并处理异常
		e1.printStackTrace();
	}finally{
			
	}

二、JAVA7新增  final 异常

在java7之前,我们在catch代码块中的重抛

try {
	FileInputStream input = new FileInputStream("file.txt");
	int data = input.read();
	while (data != -1) {
		System.out.print((char) data);
		data = input.read();
	}
	input.close();
} catch (Exception e) {
	e.printStackTrace();
	throw e;//我们可以重抛异常,但是我们捕获的是Exception ,所以新抛出的异常为Exception类型
} 

java7中的异常重抛

try {
	FileInputStream input = new FileInputStream("file.txt");
	int data = input.read();
	while (data != -1) {
		System.out.print((char) data);
		data = input.read();
	}
	input.close();
} catch (final Exception e) {
	e.printStackTrace();
	throw e;//可以捕获到异常的原理类型, 是FileNotFound?还是IOException
} 



三、JAVA7新增  try-with-resources

Java7的流关闭,当代码块结束时关闭资源:

// try with resource
try (FileInputStream input = new FileInputStream("file.txt")) {

	int data = input.read();
	while (data != -1) {
		System.out.print((char) data);
		data = input.read();
	}
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}
java在处理外部资源的时候,IO流一直都是需要我们手动关闭的。

但是程序不可能总是按我们预想的运行,你在读取文件的时候,文件消失了,等各种异常情况总会发生。

下面是我们以前的关闭流的代码:

try {
	FileInputStream input = new FileInputStream("file.txt");
	int data = input.read();
	while (data != -1) {
		System.out.print((char) data);
		data = input.read();
	}
	input.close();
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}

Java以前的资源关闭的代码是有很多漏洞的, 即使你将流的关闭操作放到finally里,也不能保证一定关闭。

但是java7的新机制,当代码离开代码块的时候,资源是会自动关闭的

四、JAVA7新增  addSuppressed()方法

当一个异常被抛出的时候,可能有其他异常因为该异常而被抑制住,从而无法正常抛出。这时可以通过addSuppressed方法把这些被抑制的方法记录下来。被抑制的异常会出现在抛出的异常的堆栈信息中,也可以通过getSuppressed方法来获取这些异常。这样做的好处是不会丢失任何异常,方便开发人员进行调试

    public class ReadFile {  
        public void read(String filename) throws IOException {  
            FileInputStream input = null;  
            IOException readException = null;  
            try {  
                input = new FileInputStream(filename);  
            } catch (IOException ex) {  
                readException = ex;  
            } finally {  
                if (input != null) {  
                    try {  
                        input.close();  
                    } catch (IOException ex) {  
                        if (readException != null) {  
                            readException.addSuppressed(ex);  
                        }  
                        else {  
                            readException = ex;  
                        }  
                    }  
                }  
                if (readException != null) {  
                    throw readException;  
                }  
            }  
        }  
    } 



你可能感兴趣的:(异常处理,java7)