比如我们写的ATM中的登陆或者存钱输入了非int类型就会出现输入不匹配异常“InputMismatchException”,那我们就可以使用java中有名的
Try/catch语句来解决!
我们先把我们的那段语句放在Try里面当出现异常的时候就执行catch里面的代码(catch括号里面是错误类型,如果有多种错误,可以使用多个catch但都是从上往下的执行顺序.如果后面有finall则里面的代码必须执行!)
示列:
catch 块放置是有顺序的,捕获子类的放在前面,捕获父类的放在后面!
(如果我们在下面代码中
例如:
小插曲:
1、如果我们在输入的时候先输入数字再输入空格再输入其他字符,一样会被传进去,这是为什么呢?因为
nextInt()、next()等等都是读取后面的你输入的第一段字符
nextIine();来获取了。nextIine()是 在你按enter前所有输入的信息!
2、instanceof
在java中Try/catch/finally语块执行顺序应该是 先执行try语块,有异常的话捕获并执行catch语块。
无论有没有异常都会执行finally中的语句。
- 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) 会让程序马上退出。
第二种
- 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结束不会被打印。