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

(206)

文章推荐

  • 郑州疫情什么时候才能结束预计(郑州疫情什么时候才能结束预计开学)

    2022年郑州疫情开始时间和结束时间开始时间2022年10月,截止于2022年11月。根据查询郑州本地宝可知,11月3日,郑州市召开新冠肺炎疫情防控新闻发布会,通报新冠疫情防控情况。2022年郑州疫情开始时间2022年10月4日,截止于2022年11月9日。年11月25日零时至11月29日24时。

    2025年03月16日
    150
  • 教程辅助!蛮王大厅有没有透视挂(其实真的能开挂)

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

    2025年04月17日
    71
  • 必备科技“鄂尔多斯麻将开挂教程(详细透视开挂教程)

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

    2025年04月23日
    81
  • 推荐一款“白金岛长沙麻将真的可以开挂吗”其实确实有挂

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

    2025年05月14日
    56
  • 实测辅助”微乐陕西麻将到底那里有挂”实测确实有挂

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

    2025年05月23日
    51
  • 6秒懂!来打红中麻将辅助工具(详细真的有挂)

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

    2025年06月24日
    37
  • 开具无房证明需要什么材料

    网上科普有关“开具无房证明需要什么材料”话题很是火热,小编也是针对开具无房证明需要什么材料寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。《房屋权属登记信息查询暂行办法》第二条规定,开无房证明需带上身份证、户口本,婚姻证明(如是提供结婚证必须夫妻双方到场,分别

    2025年07月14日
    171
  • 教程开挂辅助“刮刮乐一路发怎样提高胜率”其实确实有挂

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

    2025年08月04日
    27
  • 教程开挂辅助“友乐广西麻将怎么开挂”原来真实可以装挂

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

    2025年08月04日
    27
  • 实测分析“情怀棋牌开挂神器下载(其实确实有挂)

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

    2025年08月19日
    22

发表回复

本站作者后才能评论

评论列表(4条)

  • 从雪
    从雪 2026年07月10日

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

  • 从雪
    从雪 2026年07月10日

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

  • 从雪
    从雪 2026年07月10日

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

  • 从雪
    从雪 2026年07月10日

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