java中try和catch的具体作用

网上科普有关“java中try和catch的具体作用”话题很是火热,小编也是针对java中try和catch的具体作用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在...

网上科普有关“java中try和catch的具体作用”话题很是火热,小编也是针对java中try和catch的具体作用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

try就像一个网,把try{}里面的代码所抛出的异常都网住,然后把异常交给catch{}里面的代码去处理,最后执行finally之中的代码。

无论try中代码有没有异常,也无论catch是否将异常捕获到,finally中的代码都一定会被执行。

例如:当除数为0时,编译不会报错,如果没有try/catch的话,程序直接崩溃。用try/catch的话,则可以让程序运行下去,并且输出为什么出错。

扩展资料

java中try....catch的使用原则

1、当代码中可能会遇到的异常需要用try{ }catch{Exception e}来处理,否则导致程序崩溃。

2、不要在for循环里面嵌套try catch子句。

3、尽可能的减少try catch子句的嵌套,会影响性能。

4、同一个try子句中多个catch时,异常处理原则。

当一个try块中包含众多语句,可能抛出多种不同的异常,只有通过多个catch块来捕获不同的异常。而如果两个异常存在继承关系,应该把子类异常放在父类异常的前面来捕获,或者把最小范围异常放在最前面 ,范围大的放在后面。

因为是按照catch块从上往下匹配,当它匹配某一个catch块的时候,就直接进入到这个catch块里面去了,后面在再有catch块的话,它不做任何处理,直接跳过去,全部忽略掉。

如果有finally的话进入到finally里面继续执行。Exception这个异常的根类一定要刚在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,就会报已捕获到异常的错误。

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。

由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。

对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常。

对于所有的可查异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常。

能够捕捉异常的方法,需要提供相符类型的异常处理器。所捕捉的异常,可能是由于自身语句所引发并抛出的异常,也可能是由某个调用的方法或者Java运行时 系统等抛出的异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。

任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。

从方法中抛出的任何异常都必须使用throws子句。

捕捉异常通过try-catch语句或者try-catch-finally语句实现。

总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

4.1 捕获异常:try、catch 和 finally

1.try-catch语句

在Java中,异常通过try-catch语句捕获。其一般语法形式为:

try {

// 可能会发生异常的程序代码

} catch (Type1 id1){

// 捕获并处置try抛出的异常类型Type1

}

catch (Type2 id2){

//捕获并处置try抛出的异常类型Type2

}

关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常抛出监控区域之 外,由Java运行时系统试图寻找匹配的catch子句以捕获异常。若有匹配的catch子句,则运行其异常处理代码,try-catch语句结束。

匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。

例1 捕捉throw语句抛出的“除数为0”异常。

public class TestException {

public static void main(String[] args) {

int a = 6;

int b = 0;

try { // try监控区域

if (b == 0) throw new ArithmeticException(); // 通过throw语句抛出异常

System.out.println("a/b的值是:" + a / b);

}

catch (ArithmeticException e) { // catch捕捉异常

System.out.println("程序出现异常,变量b不能为0。");

}

System.out.println("程序正常结束。");

}

}

运行结果:程序出现异常,变量b不能为0。

程序正常结束。

例1 在try监控区域通过if语句进行判断,当“除数为0”的错误条件成立时引发ArithmeticException异常,创建 ArithmeticException异常对象,并由throw语句将异常抛给Java运行时系统,由系统寻找匹配的异常处理器catch并运行相应异 常处理代码,打印输出“程序出现异常,变量b不能为0。”try-catch语句结束,继续程序流程。

事实上,“除数为0”等ArithmeticException,是RuntimException的子类。而运行时异常将由运行时系统自动抛出,不需要使用throw语句。

例2 捕捉运行时系统自动抛出“除数为0”引发的ArithmeticException异常。

public static void main(String[] args) {

int a = 6;

int b = 0;

try {

System.out.println("a/b的值是:" + a / b);

} catch (ArithmeticException e) {

System.out.println("程序出现异常,变量b不能为0。");

}

System.out.println("程序正常结束。");

}

}

运行结果:程序出现异常,变量b不能为0。

程序正常结束。

例2 中的语句:

System.out.println("a/b的值是:" + a/b);

在运行中出现“除数为0”错误,引发ArithmeticException异常。运行时系统创建异常对象并抛出监控区域,转而匹配合适的异常处理器catch,并执行相应的异常处理代码。

由于检查运行时异常的代价远大于捕捉异常所带来的益处,运行时异常不可查。Java编译器允许忽略运行时异常,一个方法可以既不捕捉,也不声明抛出运行时异常。

例3 不捕捉、也不声明抛出运行时异常。

public class TestException {

public static void main(String[] args) {

int a, b;

a = 6;

b = 0; // 除数b 的值为0

System.out.println(a / b);

}

}

运行结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

at Test.TestException.main(TestException.java:8)

例4 程序可能存在除数为0异常和数组下标越界异常。

public class TestException {

public static void main(String[] args) {

int[] intArray = new int[3];

try {

for (int i = 0; i <= intArray.length; i++) {

intArray[i] = i;

System.out.println("intArray[" + i + "] = " + intArray[i]);

System.out.println("intArray[" + i + "]模 " + (i - 2) + "的值: "

+ intArray[i] % (i - 2));

}

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("intArray数组下标越界异常。");

} catch (ArithmeticException e) {

System.out.println("除数为0异常。");

}

System.out.println("程序正常结束。");

}

}

运行结果:

intArray[0] = 0

intArray[0]模 -2的值: 0

intArray[1] = 1

intArray[1]模 -1的值: 0

intArray[2] = 2

除数为0异常。

程序正常结束。

关于“java中try和catch的具体作用”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[从雪]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202607-179196.html

(204)

文章推荐

  • 为一人歌词

    网上科普有关“为一人歌词”话题很是火热,小编也是针对为一人歌词寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。歌曲:《为一人》演唱:叶炫清作词:晓川作曲:鲁士郎歌词:风用你的口吻,讲着远方雨纷纷我在梦里停顿,数着记忆的年轮为等那句炙热的情深,甘用一生繁华换浮沉

    2025年03月03日
    501
  • 浙江工业大学顶尖专业有哪些?

    网上科普有关“浙江工业大学顶尖专业有哪些?”话题很是火热,小编也是针对浙江工业大学顶尖专业有哪些?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。浙江工业大学是教育部与浙江省共建高校,浙江首批省重点建设高校,国家“2011计划”首批牵头高校,教育部首批“卓越

    2025年03月26日
    293
  • 教程辅助!全明松原麻将真的有挂吗(详细透视开挂教程)

    全明松原麻将真的有挂吗网上科普有关“全明松原麻将真的有挂吗”话题很是火热,小编也是针对全明松原麻将真的有挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,全明松原麻将真的有挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在

    2025年04月08日
    87
  • 教程辅助!红火大厅可以开挂吗(其实真的能开挂)

    红火大厅可以开挂吗网上科普有关“红火大厅可以开挂吗”话题很是火热,小编也是针对红火大厅可以开挂吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,红火大厅可以开挂吗这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都

    2025年04月17日
    78
  • 推荐一款“微信哪个游戏有填大坑(其实确实有挂)

    网上科普有关“微信哪个游戏有填大坑”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,微信哪个游戏有填大坑这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌都会发现

    2025年05月12日
    68
  • 推荐一款“竹子大厅拼三张输赢的规律(真的有挂)

    网上科普有关“竹子大厅拼三张输赢的规律”话题很是火热,小编也是针对同城衡阳字牌作弊开挂的方法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,竹子大厅拼三张输赢的规律这款游戏可以开挂的,确实是有挂的,通过微信【游戏】很多玩家在这款游戏中打牌

    2025年05月15日
    63
  • 66徐州麻将要怎么开挂”原来真实可以装挂

    66徐州麻将要怎么开挂网上科普有关“66徐州麻将要怎么开挂”话题很是火热,小编也是针对66徐州麻将要怎么开挂寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,66徐州麻将要怎么开挂这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在

    2025年05月18日
    64
  • 实测辅助”功夫麻将开挂神器免费下载安装”果然有挂

    功夫麻将开挂神器免费下载安装网上科普有关“功夫麻将开挂神器免费下载安装”话题很是火热,小编也是针对功夫麻将开挂神器免费下载安装寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,功夫麻将开挂神器免费下载安装这款游戏可以开挂的,确实是有挂的

    2025年05月20日
    60
  • 实测辅助”奥云麻将要怎么开挂”其实确实有挂

    奥云麻将要怎么开挂网上科普有关“奥云麻将要怎么开挂”话题很是火热,小编也是针对奥云麻将要怎么开挂寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,奥云麻将要怎么开挂这款游戏可以开挂的,确实是有挂的,通过微信【】很多玩家在这款游戏中打牌都

    2025年05月21日
    68
  • 玩家必搜“微信小程序微乐斗地主透视(详细透视开挂教程)

    微信小程序微乐斗地主透视网上科普有关“微信小程序微乐斗地主透视”话题很是火热,小编也是针对微信小程序微乐斗地主透视寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。  您好,微信小程序微乐斗地主透视这款游戏可以开挂的,确实是有挂的,通过微信【】很

    2025年08月26日
    34

发表回复

本站作者后才能评论

评论列表(4条)

  • 从雪
    从雪 2026年07月09日

    我是小熊号的签约作者“从雪”!

  • 从雪
    从雪 2026年07月09日

    希望本篇文章《java中try和catch的具体作用》能对你有所帮助!

  • 从雪
    从雪 2026年07月09日

    本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育

  • 从雪
    从雪 2026年07月09日

    本文概览:网上科普有关“java中try和catch的具体作用”话题很是火热,小编也是针对java中try和catch的具体作用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在...