Java异常处理

异常处理:

public class tryDemo {

public static void main(String[] args) {

test();

}

public static int test() {

int divider = 10;

int result = 100;

try {

while (divider > -1) {

divider--;

result = result + 100 / divider;

}

return result;

} catch (Exception e) {

e.printStackTrace();//打印错误信息,会打印具体位置java.lang.ArithmeticException: / by zero

at basic.try10.test(try10.java:22)

at basic.try10.main(try10.java:8)

System.out.println(e);//打印错误信息,java.lang.ArithmeticException: / by zero

return -1;

}

}

}

try-catch-finally-return:

/**

* Created by Administrator on 2018/10/3.

* try,catch,finnally,return 若try和catch有return,就先执行return语句,但不返回结果,当finally执行完,返回return语句,若finally也有return,就返回finally里return,try或catch不返回,try,catch,finally若没有返回结果,方法结束时需return,finally是在return语句执行之后,返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前就已经确定了;

*/

public class Try {

public static void main(String[] args) {

System.out.println(test1());

}

public static int test1() {

int b = 20;

try {

System.out.println("try block");

return b += 80;

}

catch (Exception e) {

System.out.println("catch block");

}

finally {

System.out.println("finally block");

if (b > 25) {

System.out.println("b>25, b = " + b);

}

}

return b;

}

}

try_catch_finally:

public class TestException {

public static void main(String[] args) {

try {

//throw new Exception("Nothing");

throw new Error("nothing");// 切换这两行试试??

} catch (Exception e) {

System.out.println("捕获到异常。。");

e.printStackTrace(System.err);

}finally{

System.out.println("finally 语句。。");

}

//

System.out.println("try 外部的后面的代码。。。");

}

}

说明:

1. try的意思,就是试着执行里面的语句,所以如果try内部抛出了异常 Exception,那么,将会执行catch 部分,以及try 外边的后面的语句。

2. 如果 try 内部出现了Error,表示出错,后面的语句就不执行了,catch也抓不住。

3. 但是如果有 finally块的话,那么,finally 几乎是必定会执行的,但是这里有一个先后顺序的问题,应该是 finally 块和 打印异常堆栈将会在另外一个线程之中执行,所以 打印的顺序就很有意思了。

4. 如果在try或者catch之中,执行System.exit(0); System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,那么 finally不会被执行,此外的情况,不管是Error还是return,finally块都会执行到。

IO异常处理:

class MyClose implements AutoCloseable{

@Override

public void close() throws IOException {

System.out.println("myClose类的close()");

}

}

public class Io1 {

public static void main(String[] args) throws IOException {

 

demo1();// 1.7版本

demo2();//1.7版本之前标准异常处理代码

}

 

private static void demo2() throws IOException {//1.7版本之前标准异常处理代码

FileOutputStream fos = null;

FileInputStream fis = null;

try {

fis = new FileInputStream("aaa.txt");// 可能文件不存在

fos = new FileOutputStream("b.txt");

int b;

while ((b = fis.read()) != -1) {// 可能文件不可读

fos.write(b);// 可能文件不可写

}

System.out.println("tryblock1");

}

finally{

try {

if (fis != null) {

fis.close();

}

System.out.println("tryblock2");

} finally {

if (fos != null) {// 可能fis没关上抛出异常,保证fos.close()执行

fos.close();

}

System.out.println("finallyblock1");

}

System.out.println("finallyblock2");

}

}

private static void demo1() throws IOException {// 1.7版本

try(

FileInputStream fis = new FileInputStream("aaa.txt");

FileOutputStream fos = new FileOutputStream("b.txt");

MyClose myClose = new MyClose();// 这里的try是()而不是{},()里面的对象必须实现AutoCloseable接口,执行完之后自动关流

){// 剩下的读写代码写在代码块{}中,执行完之后自动关流

int b;

while ((b=fis.read())!=-1){

fos.write(b);

}

}

}

}

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