Java异常处理try catc finally用法介绍



Java异常处理try catc finally用法介绍。以往的代码中经常会出现异常,那应该怎么来处理这些java异常呢?例如的ATM中的登陆或者存钱输入了非int类型就会出现输入不匹配异常“InputMismatchException”,那就可以使用java中有名的Try/catch语句来解决!先把的那段语句放在Try里面当出现异常的时候就执行catch里面的代码(catch括号里面是错误类型,如果有多种错误,可以使用多个catch但都是从上往下的执行顺序.如果后面有finall则里面的代码必须执行!)

实例源码实例:
try{
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.print(a);
}
catch(InputMismatchException ex) {
System.out.print(“输入有误”);
}
catch 块放置是有顺序的,捕获子类的放在前面,捕获父类的放在后面!
(如果我们在下面代码中 catch(InputMismatchException ex) 的前面加一个catch 来捕获Exception异常,那么就会编译报错,因为Exception是所有异常类错误的父类,后面的catch块永远执行不了!)
例如:
try{
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.print(a);
}
catch(Exception exc){ 这样是错误的!
System.out.print(“输入有误”);
}
catch(InputMismatchException inexp) {
System.out.print(“输入有误”);
}

小插曲:
1、如果我们在输入的时候先输入数字再输入空格再输入其他字符,一样会被传进去,这是为什么呢?因为
nextInt()、next()等等都是读取后面的你输入的第一段字符 空格就被认为是第二段了,那么就要使用–
nextIine();来获取了。nextIine()是 在你按enter前所有输入的信息!
2、instanceof 这是一个特殊关键字!判断对象是否是某个实例,如果是返回true,如果不是则返回false!

在java中Try/catch/finally语块执行顺序应该是 先执行try语块,有异常的话捕获并执行catch语块。
无论有没有异常都会执行finally中的语句。
但是有2中情况会列外(如下):

public class Test1 {

public static void main(String[] args) {


try {
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(“主线程结束.”);
}
}
}
System.exit(0) 会让程序马上退出。
第二种

view plaincopy to clipboardprint?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Task implements Runnable {
public void run() {
try {
Thread.sleep(1000);
Thread t = new Thread(new Task2());
t.setDaemon(true);
t.start();
System.out.println(“线程1结束.”);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

class Task2 implements Runnable {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println(“线程2结束.”);
}
}
}

public class Test2 {

public static void main(String[] args) {
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new Task());
es.shutdown();
}
}
Task中将Task2设置为后台线程,当主线程结束后,后台线程会突然退出。Test2中,线程2结束不会被打印。