精华内容
下载资源
问答
  • try{}catch(Exception e){}try{}里边代指出现异常的代码。catch(Exception e)中的e就是异常各类,62616964757a686964616fe58685e5aeb931333366306433如果你能确定那种异常,就可以用那种异常代码代替这个e。而后边...

    展开全部

    这是一个提示出现异常的代码。try{}catch(Exception e){}

    try{}里边代指出现异常的代码。catch(Exception e)中的e就是异常各类,62616964757a686964616fe58685e5aeb931333366306433如果你能确定那种异常,就可以用那种异常代码代替这个e。

    而后边{}就是你处理异常的方法,你可以打出异常,或者是输出提示出错了,很灵活。

    有时候还会有一个finally{}在最后,这个是一定会处理的代码,不会因为异常的出现会终止。

    0d7bc21fa9bf262975a9ea88636e98f1.png

    扩展资料:

    try 是JAVA中常用到的关键命令。用于try..catch..finally块,进行异常捕获。

    try是try..catch..finally块中用来引导第一部分的关键字,用于声明需要捕获指定语句块的异常。

    完整的使用方法是:

    try {

    语句块1

    } catch ( extends Throwable> e) {

    语句块2.1

    } catch ( extends Throwable> e) {

    语句块2.2

    } catch ( extends Throwable> e) {

    语句块2.3

    ...

    } finally {

    语句块3

    }

    catch可以出现0次、1次或多次,finally可以出现0次或1次,但是catch和finally不能同时不出现。

    catch用法:

    当语句块1中抛出异常时,立即离开语句块1,之后会在所有catch中依次进行类名比对。如果抛出异常和catch声明的异常类名一致,或抛出异常是catch声明的异常的子类,则会进入该catch的语句块(成为异常的捕获),在catch的语句块中可以将异常输出到命令行或引导用户进行问题反馈。

    如果任何一个catch都不匹配,会像上层调用抛出这一异常(在此之前会进入finally语句块,详情参考下面的finally用法)。

    finally用法:

    在语句块1、语句块2中,任何试图离开try..catch..finally块的语句都会导致语句块3被执行,如return throw break continue。在finally的语句块中可以进行内存回收等工作。

    需要注意的是,如果导致离开的不是语句造成的,而是断电、内存不足等计算机故障,finally语句块不会被执行。

    例子:

    public class Test {

    public static void main(String[] args) {

    int i = 10;

    try {

    System.out.println(i / 0);

    }catch(ArithmeticException ame) {

    ame.printStackTrace();

    } finally {

    System.out.println("byebye");

    }

    }

    }

    展开全文
  • 但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码static void Main(string[] args){try{Console.WriteLine("----------------------外层try------------------------------");errorMethod();}catch...

    try catch里能否内嵌try catch?答案是肯定的。但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    static void Main(string[] args)

    {

    try

    {

    Console.WriteLine("----------------------外层try------------------------------");

    errorMethod();

    }

    catch (Exception ex)

    {

    Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");

    }

    finally {

    Console.WriteLine("----------------------外层finally------------------------------");

    }

    Console.ReadKey();

    }

    private static void errorMethod()

    {

    try

    {

    Console.WriteLine("----------------------内层try------------------------------");

    int i = 0;

    int a = 100/i;

    }

    catch (Exception ex)

    {

    Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");

    }

    finally {

    Console.WriteLine("----------------------内层finally------------------------------");

    }

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    44814b0354fbc7386a3d244bb3c9ccfb.png

    内层catch处理了异常,所以没有执行外层catch。

    咱们把内层的catch注释掉  再试下

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    static void Main(string[] args)

    {

    try

    {

    Console.WriteLine("----------------------外层try------------------------------");

    errorMethod();

    }

    catch (Exception ex)

    {

    Console.WriteLine("----------------------外层catch" + ex.Message + "------------------------------");

    }

    finally {

    Console.WriteLine("----------------------外层finally------------------------------");

    }

    Console.ReadKey();

    }

    private static void errorMethod()

    {

    try

    {

    Console.WriteLine("----------------------内层try------------------------------");

    int i = 0;

    int a = 100/i;

    }

    //catch (Exception ex)

    //{

    // Console.WriteLine("----------------------内层catch" + ex.Message + "------------------------------");

    //}

    finally {

    Console.WriteLine("----------------------内层finally------------------------------");

    }

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    9c598209926612393fc18d362753184d.png

    很明显,外层catch捕获了异常。

    总结:try catch嵌套,内层不能捕获时,会考虑外层内否捕获,内层能捕获,则外层catch不执行。

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    try

    {

    //A

    try

    {

    //B

    }

    catch

    {

    //C

    }

    finally

    {

    //D

    }

    //E

    }

    catch

    {

    //F

    }

    finally

    {

    //G

    }

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    上面的代码 执行顺序

    抛出异常在:内层A,E处由外层catch块捕获,并执行外层finally

    抛出异常在:内层B处,且有一合适内层catch捕获,执行内层finally,后执行E处

    抛出异常在:内层B处,但内层catch块没有合适处理程序,执行内层finally,搜索外层catch,找合适的,执行外层finally,此时不会执行E

    抛出异常在:内层C处,退出内层catch块,执行内层finally,搜索外层catch,找到合适,执行外层finally

    抛出异常在:内层D处,退出内层finally块,搜索外层catch,找到合适,执行外层finally

    A抛异常 A=》F=》G

    B抛异常 C能捕获 B=》C=》D=》E=》F=》G (若C处无法捕获B=》F=》G)

    C抛异常 C=》F=》G

    D抛异常 D=》F=》G

    E抛异常 A=》F=》G 同A

    另外 try{}catch{} 中未做捕获类型限定,可捕获所以异常。如 try{}catch(IOException ex){} 则catch只能捕获I/O操作引发的异常。

    (文章摘自--http://www.cnblogs.com/zhangchengye/p/5674240.html)

    展开全文
  • 看几个例子,回顾一下执行顺序例子1 无异常,finally中的return会导致提前返回public static String test() {try {System.out.println("try");return "return in try";} catch(Exception e) {System.out.println(...

    看几个例子,回顾一下执行顺序

    例子1 无异常,finally中的return会导致提前返回

    public static String test() {

    try {

    System.out.println("try");

    return "return in try";

    } catch(Exception e) {

    System.out.println("catch");

    return "return in catch";

    } finally {

    System.out.println("finally");

    return "return in finally";

    }

    }

    调用test()的结果:

    try

    finally

    return in finally

    例子2 无异常,try中的return会导致提前返回

    public static String test() {

    try {

    System.out.println("try");

    return "return in try";

    } catch(Exception e) {

    System.out.println("catch");

    } finally {

    System.out.println("finally");

    }

    return "return in function";

    }

    调用test()的结果:

    try

    finally

    return in try

    例子3 有异常,finally中的return会导致提前返回

    public static String test() {

    try {

    System.out.println("try");

    throw new Exception();

    } catch(Exception e) {

    System.out.println("catch");

    return "return in catch";

    } finally {

    System.out.println("finally");

    return "return in finally";

    }

    }

    调用test()的结果:

    try

    catch

    finally

    return in finally

    例子4 有异常,catch中的return会导致提前返回

    public static String test() {

    try {

    System.out.println("try");

    throw new Exception();

    } catch(Exception e) {

    System.out.println("catch");

    return "return in catch";

    } finally {

    System.out.println("finally");

    }

    }

    调用test()的结果:

    try

    catch

    finally

    return in catch

    例子4 有异常,不会提前返回

    public static String test() {

    try {

    System.out.println("try");

    throw new Exception();

    } catch(Exception e) {

    System.out.println("catch");

    } finally {

    System.out.println("finally");

    }

    return "return in function";

    }

    调用test()的结果:

    try

    catch

    finally

    return in function

    小结

    上面这几个例子,大多数人已经非常了解。同时也衍生出一些理论,比如不要在finally中return等,不再赘述。

    再看几个例子,返回值是否符合你的预期?

    例子1

    public static int test() {

    try {

    return 1;

    } finally {

    return 2;

    }

    }

    返回值:2

    说明:与我们上面的例子一致,finally中的return导致提前返回,try中的return1不会被执行。

    附编译后的代码:

    public static int test() {

    try {

    boolean var0 = true;

    return 2;

    } finally {

    ;

    }

    }

    可以看到编译器做过优化,同时验证了boolean类型在底层是用int实现的,但注意你在源码中直接给int行赋值true或false是不被允许的。

    例子2

    public static int test() {

    int i;

    try {

    i = 3;

    } finally {

    i = 5;

    }

    return i;

    }

    返回值:5

    说明:执行try中的代码后,再执行finally中的代码,最终i被赋值为5,最后返回

    附编译后的代码:

    public static int test() {

    boolean var0 = true;

    byte i;

    try {

    var0 = true;

    } finally {

    i = 5;

    }

    return i;

    }

    同样可以看出,编译器做了一些优化。

    例子3

    public static int test() {

    int i = 1;

    try {

    i = 3;

    return i;

    } finally {

    i = 5;

    }

    }

    返回值:3

    这个例子稍微有点意思,按我们通常的思维,应该还是返回5,毕竟finally中把i赋值为5了嘛,然后由try中的return返回。然而很不幸,返回值是3。

    为什么呢?先看一下编译后的代码:

    public static int test() {

    boolean var0 = true;

    byte var1;

    try {

    int i = 3;

    var1 = i;

    } finally {

    var0 = true;

    }

    return var1;

    }

    我们会发现,finally中的代码块不起作用。不知你是否想起一点:Java中是按值传递的,finally中的i只是一个局部变量,finally块执行完毕后,局部变量便不复存在。

    接着看例子:

    例子4

    public static List test() {

    List list = new ArrayList<>();

    try {

    list.add(1);

    return list;

    } finally {

    list.add(2);

    }

    }

    返回:包含1和2两个元素的List对象。

    说明:这个例子中,基本类型int被替换为引用类型List,虽然list是按值传递,但它内部的状态可变(体现在这里,就是可以add元素)。扩展:finally只能保证对象本身不可变,但无法保证对象内部状态不可变。

    附编译后的代码:

    public static List test() {

    ArrayList list = new ArrayList();

    ArrayList var1;

    try {

    list.add(1);

    var1 = list; // 执行这一步操作后,var1和list指向同一个对象

    } finally {

    list.add(2);

    }

    return var1;

    }

    你现在应该觉得自己理解了,那么再来看两个例子:

    例子5

    public static int test() {

    try {

    System.exit(0);

    } finally {

    return 2;

    }

    }

    该函数没有返回值。原因:jvm提前退出了。

    附编译后的代码:

    public static int test() {

    try {

    System.exit(0);

    return 2;

    } finally {

    ;

    }

    }

    例子6

    public static int test() {

    try {

    while(true) {

    System.out.println("Infinite loop.");

    }

    } finally {

    return 2;

    }

    }

    由于try中的无限循环阻塞,永远执行不到finally中的代码块。

    附编译后的代码:

    public static int test() {

    try {

    while(true) {

    System.out.println("Infinite loop.");

    }

    } finally {

    ;

    }

    }

    小结

    为了方便说明,只举了finally代码块的例子,catch代码块是类似的。

    总结

    执行顺序:

    1. try代码块中return前面的部分

    2. catch代码块中return前面的部分

    3. finally代码块中return前面的部分

    4. finally的return 或 catch的return 或 try的return。若前面的return被执行,会导致提前返回,同时后面的return被忽略。

    5. 方法的其他部分

    变量:

    注意Java的按值传递规则

    特殊情况:

    注意finally不会被执行的情况

    参考

    展开全文
  • try catch中的catch里写什么

    千次阅读 2021-02-25 10:15:29
    异常处理的代码是 try catchtry是检测的代码,catch是捕获异常,catch里面的结构类似于switch语句,可以捕获到不同的异常。 细分异常对于运维系统很有用。如果是用户输错了边界值导致的,就可以忽略,如果是硬盘...

    try是一个神奇的语句,它可以检测代码中发生的异常。一旦try检测到了异常,它就会在java堆里面创建一个异常对象,而catch也很神奇,它用来检查堆里是否有try创建的异常对象。
    本来java虚拟机底层也可以发现到这些异常的,一旦发现了异常程序会停止。但是对于一些不可间断的服务,不能遇到点问题,就停止了。比如用户操作导致的数组越界或者除0运算,不能因为用户输错个数就导致程序崩了。

    码农们利用try语句先于java虚拟机中检测异常的任务执行,提前处理掉了异常,让java虚拟机发现不到异常,因此也就不会导致程序终止。比如你考试打小抄的时候,班主任先于年级主任发现了你作弊,就制止了你,结果年级主任没有发现你作弊。

    虽然是对你的保护,但是班主任还得在班级内部对你进行处分。一般采用catch或finally对try到的异常进行处理,类似于批评教育或者找家长。

    try{语句}表示,如果语句里有异常,就在堆里创建异常的对象,如果没有异常,就不创建异常的对象。

    而catch(ArithmeticException e){语句} 表示,如果堆里存在 ArithmeticException e这个对象,括号里面的语句就执行,如果不存在,括号里的语句就不执行。类似于if(e!=NULL){语句}。而ArithmeticException e是try在检测代码异常时,在堆里创建的。

    如果你通过catch捕获到了异常对象,你会做些什么呢?标准的处理方式是打印日志信息,告诉维护序的人发生了什么错误。但这是一个开放性的脑洞,比如码农们通过写发告警短信的代码让运维人员能接收到告警,让运维功能瞬间高大上。

    需要注意的是try捕获到不同的异常时会创建不同的异常对象。但是一条catch只能捕获一种异常对象,所以那么每catch到一种异常对象,就写一条catch?

    try{
    检测语句
    }
    catch(ArithmeticException e) {
    System.out.println(“除数为0: ” + e);
    } catch(ArrayIndexOutOfBoundsException e) {
    System.out.println(“访问越界: ” + e);
    }

    上面代码只写了2种异常,异常还有很多种,难道写个helloword就把所有异常都列一遍吗?除非你很关注某一类问题,比如jvm内存溢出,或者是网络异常,才会针对这种异常去写catch,一般情况下码农们按 Ctrl+Alt+t 生成通用的异常处理代码来捕获异常。

    try {
        代码;
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    e.printStackTrace(); 是通用的异常打印语句,不管什么异常都能打印出来。你也不用再细分异常。但是这种代码显然是不够高大尚的。

    如果在很多方法里都写try catch,看起来就会很乱,像是下面的代码。

    public class ThreadLearn {
    
        public static void main(String[] args) {
            method1();
            method2();
        }
    
        public static void method1() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        public static void method2() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    可以在方法后面写一条throws InterruptedException命令向外部抛异常检测的需求,在方法外面统一写try catch的代码。

    public class ThreadLearn {
    
        public static void main(String[] args) {
            try {
                method1();
                method2();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        public static void method1() throws InterruptedException {
            Thread.sleep(1000);
        }
        public static void method2() throws InterruptedException {
            Thread.sleep(1000);
        }
    }
    

    throws的好处是可以让代码变得简洁,只在最外层的代码写一个try catch就好了。需要注意的是throws InterruptedException是跟外面的try配套使用的,外面不写try无法通过编译。

    有时try捕获到了异常,码农们打算释放资源关闭任务,这时就要用到finally这个命令。finally是在方法中的所有return语句之后执行的。

     public static void main(String[] args) {
            System.out.println(getInt());
        }
        public static int getInt() {
            int a = 10;
            try {
                System.out.println(a / 0);
                a = 20;
                return a;
            } catch (ArithmeticException e) {
                a = 30;
                return a;
            } finally {
                a = 40;
                return a;
            }
        }

    执行结果为40。函数执行顺序是存储到栈里的,finally的操作是最先存储入栈的,倒数两次return a都入了栈,但是try里的return a 受到了异常操作的影响没有入栈。

    如果把finally里的return a去掉,结果就是30。

    public static void main(String[] args) {
            System.out.println(getInt());
        }
        public static int getInt() {
            int a = 10;
            try {
                System.out.println(a / 0);
                a = 20;
                return a;
            } catch (ArithmeticException e) {
                a = 30;
                return a;
            } finally {
                a = 40;
            }
        }

    这是因为,虽然a=40是最后执行的,但是没有赋值给方法返回值,方法的返回值还是a=30时赋值的。

     

    展开全文
  • Android捕捉错误try catch 的简单使用教程,错误,程序,异常,语句,多个Android捕捉错误try catch 的简单使用教程易采站长站,站长之家为您整理了Android捕捉错误try catch 的简单使用教程的相关内容。基本语法try{//...
  • oracle try catch

    2021-05-05 10:12:53
    C# codeprotected void Button1_Click(object sender, EventArgs e){try{//其他代码OracleConnection conn = new OracleConnection(ConnectionString);OracleTransaction transaction = null;OracleCommand cmd = ...
  • Java 中最常见的异常处理机制通常与 try-catch 块关联 。我们使用它来捕获异常,然后提供在发生异常的情况下可以执行的逻辑。的确,你不需要将所有异常都放在这些块中。另一方面,如果你正在研究应用程序的软件设计...
  • 一句话解释:try catch 机制非常好。那些觉得 try catch 不行的人,是他们自己的水平有问题,无法理解这种机制。并且这群人写代码不遵守规则,喜欢偷懒,这才造成 try catch 不好的错觉。详细解释:1.程序要健壮,...
  • Try Finally和Try Catch之间的差异可能重复@MP每个人都应该做代码审查,向他们提问是如何学习和改进的。如果try块中的任何代码都可以引发选中的异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常...
  • 注意:我说的多使用的意思不是让你全部trycatch起来,然后catch(Exception e)把所有的异常都屏蔽了;而是暂时不考虑trycatch可能带来的效率上的损失,而注重程序的稳定性。 至于如何优化trycatch的使用,慢慢来。...
  • 有关java中的try{}catch(){}的讲解

    千次阅读 2021-03-01 09:53:34
    本文链接:https://blog.csdn.net/qq_38225558/article/details/82054100try {可能出现异常的代码(包括不会出现异常的代码)} catch (Exception e) { //()里为接收try{}代码块中出现异常的类型如...
  • 我正在使用方法getBitmap来显示图像.当我使用它作为方法时,如果它返回位图显示图像但是如果它返回null,则捕获异常....public Bitmap getBitmap(final String src) {try {InputStream stream = null;URL u...
  • try——catch 语句的目的 try——catch 的目的是解决程序在出现错误时无法继续执行下去的问题。如果我们没有使用try——catch语句,可能程序直接在中间运行过程中就崩掉了,我们也不知道这个程序主要问题在哪里,...
  • java - try-finally和try-catch之间的区别有什么区别try {fooBar();} finally {barFoo();}和try {fooBar();} catch(Throwable throwable) {barFoo(throwable); // Does something with throwable, logs it, or ...
  • 使用Try Catch Final块的最佳实践是什么?您更喜欢只使用try finally块而不尝试catch块吗?我一直以为最终尝试捕获是最佳的使用方法。但是,在我正在使用的部分代码中,我看到了这样的代码:尝试{做一点事();}最后{...
  • 这也通过侧面也可以说明了“多重try--catch块和嵌套 try--catch 块的区别”了吧,现在见到阐释下,欢迎拍砖!恳请拍砖! 多重try--catch块:可以解决程序顺序出现的异常,但如果遇到异常时,程序可能会终止; 嵌套...
  • C语言中Try/Catch的实现

    千次阅读 2021-04-07 22:20:02
    C语言中Try/Catch的实现 许多高级语言中都有Try/Catch的实现用于处理异常。例如在C++中 try { // ... do something // ... throw a exception } catch (exception &e) { // handled the specific ...
  • java中trycatch的使用

    2021-02-27 11:37:14
    try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的处理。首先要清楚,如果没有try的话,出现异常会导致程序崩溃。而try则可以保证程序的正常运行下去,比如说:try{int i = 1/0;}...
  • Java里try catch的简单用法: Java里try catch的简单用法: 1、try+catch 程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句 扩展部分: 1、try+catch+finally 程序的...
  • java中try+catch的用法

    2021-03-14 03:13:39
    try就像一个网,把try{}里面的代码所抛出的异常都网住,然后把异常交给catch{}里面的代码去处理。最后执行finally之中的代码。无论try中代码有没有异常,也无论catch是否将异常捕获到,finally中的代码都一定会被...
  • 问:新手学java,在什么情况下要包括try catch啊?答:普及一点基本知识:异常的原理机制当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,...
  • C语言实现try catch处理

    2021-05-23 01:39:04
    我们都知道,在Java、C#等高级程序语言中,都自带有异常处理机制,其基本结构如下:try{程序语句;}catch(Exception ex){异常处理;}这样做不但可以防止程序异常终止,而且在出现错误时可以及时作一些释放资源处理,对...
  • 三、存储过程使用trycatch捕获错误 在存储过程中可以使用trycatch语句来捕获错误,如下: 代码 Create Procedure MyProcedure ( @Param1 nvarchar(10), @param2 nvarchar(10) ) AS Begin Set NOCOUNT ON;...
  • Scala try-catch语句

    2021-02-07 13:10:49
    Scala提供trycatch块来处理异常。try块用于包含可疑代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有任意数量的try...catch块。Scala try catch示例1在下面的程序中,我们将可疑代码封装在try块中...
  • 我被以下代码困惑: class MyException extends Exception... throwing AnotherException caught AnotherException throwing MyException caught Exception 有人可以解释为什么它“跳过”catch(MyException $e)? 谢谢.
  • 我在程序中一直做的是创建一个异常处理程序方法,并在每次创建一个 try/catch 块时调用它 . 很多次我有 Thread.sleep() 方法,我只是将异常发送到一个共同的地方做"global"处理 . 在全局异常处理程序中,您还可以...
  • 来源:小明的学习笔记博客地址:www.cnblogs.com/liruilong/p/13403963.html在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理。对于受检异常,需要我们主动处理。在这之前。...
  • try catch 底层原理

    2021-03-08 22:09:25
    有这样一段程序 public class Main { public static void ... try { int a = 1 / 0; } catch (Exception e) { System.err.println("exception"); return 0; } finally { return 4; } } } 程
  • } catch (Exception $e) { echo $e->getMessage(); } $a->func();}如上,$a 变量仍然可以调用func(),也就是说,在try{}块之外仍可以访问,我的想法是因为$a是因为new产生的对象,在$a调用func...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,690,775
精华内容 1,076,310
关键字:

catch什么意思try