Java 简单异常处理 try catc finally 用法

   在我们以往的代码中发现很多地方在运行时都会出现错误,那么我们应该怎么来处理这些错误呢?

比如我们写的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中情况会列外(如下):

 

  1. public class Test1  
  2.   
  3. public static void main(String[] args)  
  4.   
  5.   
  6.     try  
  7.             System.exit(0);  
  8.         catch (Exception e)  
  9.             e.printStackTrace();  
  10.         finally  
  11.             System.out.println("主线程结束.");  
  12.          
  13.      
  14.  

System.exit(0) 会让程序马上退出。

第二种

  1. import java.util.concurrent.ExecutorService;  
  2. import java.util.concurrent.Executors;  
  3.   
  4. class Task implements Runnable  
  5.     public void run()  
  6.         try  
  7.             Thread.sleep(1000);  
  8.             Thread new Thread(new Task2());  
  9.             t.setDaemon(true);  
  10.             t.start();  
  11.             System.out.println("线程1结束.");  
  12.         catch (InterruptedException e)  
  13.             e.printStackTrace();  
  14.          
  15.      
  16.  
  17.   
  18. class Task2 implements Runnable  
  19.     public void run()  
  20.         try  
  21.             Thread.sleep(1000);  
  22.         catch (InterruptedException e)  
  23.             e.printStackTrace();  
  24.         finally  
  25.             System.out.println("线程2结束.");  
  26.          
  27.      
  28.  
  29.   
  30. public class Test2  
  31.   
  32.     public static void main(String[] args)  
  33.         ExecutorService es Executors.newCachedThreadPool();  
  34.         es.execute(new Task());  
  35.         es.shutdown();  
  36.      
  37.  

在Task中将Task2设置为后台线程,当主线程结束后,后台线程会突然退出。Test2中,线程2结束不会被打印。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值