java c 异常处理_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结束不会被打印。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值