异常处理:
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);
}
}
}
}