精华内容
下载资源
问答
  • Try Finally和Try Catch之间的差异可能重复@MP每个人都应该做代码审查,向他们提问是如何学习和改进的。如果try块中的任何代码都可以引发选中的异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常...

    我在复习一些新的代码。该程序只有一个try和finally块。由于catch块被排除在外,如果遇到异常或任何可丢弃的情况,try块如何工作?它是直接去最后一个街区吗?

    Try Finally和Try Catch之间的差异可能重复

    @MP每个人都应该做代码审查,向他们提问是如何学习和改进的。

    如果try块中的任何代码都可以引发选中的异常,则它必须出现在方法签名的throws子句中。如果抛出未经检查的异常,则会从方法中冒泡出来。

    无论是否引发异常,都始终执行finally块。

    第一段不一定是真的。Try块可以嵌套。未选中或未选中的任何未捕获异常都将冒泡出该方法。

    Try块可以嵌套,但我不建议这样做。我不是这样写代码的。

    @达菲莫:"冒泡出方法"是什么意思?

    @Anand只是一些"抛出异常"的稍微非技术性的语言。

    答案很好,有人能解释一下"冒泡出来的方法"是什么意思吗?它被忽略了,还是传递了方法链?

    不忽略;传递方法链。

    关于try/finally的一个小提示:最后一个总是执行,除非

    调用System.exit()。

    JVM崩溃。

    try{}块永远不会结束(例如,无限循环)。

    那么try{..} catch{ throw ..} finally{..}呢?我想最终不会被处决

    在这种情况下,最终仍将调用。只有原始异常丢失。

    如果您之前调用System.Exit(),则也不会执行finally。

    @JYW这就是我在上面列表中第一个项目的意思。

    我不得不说,这涵盖了所有的基础!

    案例4:机器模具/手动关闭

    Java语言规范(1)描述了如何执行EDCOX1×4的执行。没有捕获等价于没有能够捕获给定的可丢弃项的捕获。

    If execution of the try block completes abruptly because of a throw of a value V, then there is a choice:

    If the run-time type of V is assignable to the parameter of any catch clause of the try statement, then …

    If the run-time type of V is not assignable to the parameter of any catch clause of the try statement, then the finally block is executed. Then there is a choice:

    If the finally block completes normally, then the try statement completes abruptly because of a throw of the value V.

    If the finally block completes abruptly for reason S, then the try statement completes abruptly for reason S (and the throw of value V is discarded and forgotten).

    (1)最后执行try catch

    内部最终在将异常抛出到外部块之前执行。

    public class TryCatchFinally {

    public static void main(String[] args) throws Exception {

    try{

    System.out.println('A');

    try{

    System.out.println('B');

    throw new Exception("threw exception in B");

    }

    finally

    {

    System.out.println('X');

    }

    //any code here in the first try block

    //is unreachable if an exception occurs in the second try block

    }

    catch(Exception e)

    {

    System.out.println('Y');

    }

    finally

    {

    System.out.println('Z');

    }

    }

    }

    结果在

    A

    B

    X

    Y

    Z

    最后一个块总是在try块结束后运行,无论try是正常结束还是异常结束,都是由于异常、er、可丢弃。

    如果try块中的任何代码引发了异常,那么当前方法只需重新引发(或继续引发)相同的异常(在运行finally块之后)。

    如果finally块抛出一个异常/错误/可丢弃,并且已经有一个挂起的可丢弃,那么它会变得很难看。坦白地说,我完全忘记了发生了什么(多年前我的认证经历就是这样)。我认为两个被抛弃的人都联系在一起了,但是在"最终"呕吐物,呃,呕吐物吐出来之前,有一些特殊的巫术需要你去做(也就是说,我必须查找一个方法调用)。

    顺便说一下,尝试/最后是一个非常常见的事情做的资源管理,因为Java没有析构函数。

    例如

    r = new LeakyThing();

    try { useResource( r); }

    finally { r.release(); }  // close, destroy, etc

    "最后一点",还有一个提示:如果您真的要放入catch,要么捕捉特定的(预期的)可丢弃的子类,要么只捕捉"可丢弃的",而不是"异常",对于一般的catch all错误陷阱。太多的问题,例如反射错误,抛出"错误",而不是"异常",这些问题将被任何代码为以下内容的"全部捕获"直接忽略:

    catch ( Exception e) ...  // doesn't really catch *all*, eh?

    改为这样做:

    catch ( Throwable t) ...

    见下面卡洛斯·海伯杰的回答,了解难看的部分。

    版本7之前的Java版本允许这三个组合的尝试catch最后…

    try - catch

    try - catch - finally

    try - finally

    无论try或/和catch块中发生了什么,都将始终执行finally块。因此,如果没有catch块,则不会在这里处理异常。

    但是,在代码中的某个地方仍然需要一个异常处理程序——当然,除非您希望应用程序完全崩溃。它完全取决于应用程序的体系结构,即处理程序所在的位置。

    Java try block must be followed by either catch or finally block.

    For each try block there can be zero or more catch blocks, but only one finally block.

    The finally block will not be executed if program exits(either by calling System.exit() or by causing a fatal error that causes the process to abort).

    "在版本7允许之前",是否意味着Java 7和Java 8不允许这三个组合?我怀疑这就是你的意思,但这就是你的答案的含义。

    如果try块中有返回语句,是否执行finally块?

    @拉胡尔是的,最后会被召唤。参考:stackoverflow.com/questions/65035/…

    @aron-用于try-with-resource的新语法,在try关键字后parens中构建的任何内容上自动调用.close()。

    how does the try block work if it

    encounters an exception or anything

    throwable

    异常被抛出到块之外,就像在任何其他未被捕获的情况下一样。

    不管try块是如何退出的,都会执行finally块——不管是否有任何捕获,不管是否有匹配的捕获。

    catch块和finally是try块的正交部分。你可以两者兼得。用Java 7,你就不可能拥有!

    在try块完成后执行finally块。如果在try块离开finally块时有东西被抛出,那么将执行finally块。

    你不试试那个节目吗?它将转到finally块并执行finally块,但不会处理异常。但是,这个例外可以在finally块中被否决!

    展开全文
  • 编译错误 Try没有catch或者Finally
                   

     Syntax error, insert "Finally" to complete BlockStatements
     'try' without 'catch' or 'finally'

    错误样例:

    1. class T {
    2.   void test(){
    3.     try{
    4.       
    5.     }
    6.   }
    7. }


    解决方法:增加catch 或者finally

    1. class T {
    2.   void test(){
    3.     try{
    4.       
    5.     }catch(Exception ex){
    6.       ex.printStackTrace();
    7.     }
    8.   }
    9. }

    或者

    1. class T {
    2.   void test(){
    3.     try{
    4.       
    5.     }finally{
    6.       
    7.     }
    8.   }
    9. }

     

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • private voidrunTask(Runnable task) {final ReentrantLock runLock = this.runLock;...try{/** If pool is stopping ensure thread is interrupted;* if not, ensure thread is not interrupted. This ...

    private voidrunTask(Runnable task) {final ReentrantLock runLock = this.runLock;

    runLock.lock();try{/** If pool is stopping ensure thread is interrupted;

    * if not, ensure thread is not interrupted. This requires

    * a double-check of state in case the interrupt was

    * cleared concurrently with a shutdownNow -- if so,

    * the interrupt is re-enabled.*/

    if ((runState >= STOP ||(Thread.interrupted()&& runState >= STOP)) &&hasRun)

    thread.interrupt();/** Track execution state to ensure that afterExecute

    * is called only if task completed or threw

    * exception. Otherwise, the caught runtime exception

    * will have been thrown by afterExecute itself, in

    * which case we don't want to call it again.*/

    boolean ran = false;

    beforeExecute(thread, task);try{

    task.run();

    ran= true;

    afterExecute(task,null);++completedTasks;

    }catch(RuntimeException ex) {if (!ran)

    afterExecute(task, ex);throwex;

    }

    }finally{

    runLock.unlock();

    }

    }

    展开全文
  • java try没有catch

    千次阅读 2018-06-13 10:44:05
    JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecutorService,即只有try和finally没有catch。 [java] view plain copy print?class X   { &...

    JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecutorService,即只有try和finally没有catch。

    1. class X   
    2. {  
    3.     private final ReentrantLock lock = new ReentrantLock();  
    4.     // …  
    5.    
    6.     public void m()  
    7.     {  
    8.     lock.lock();  // block until condition holds  
    9.     try   
    10.     {  
    11.         // … method body  
    12.     } finally  
    13.     {  
    14.         lock.unlock()  
    15.     }  
    16.      }  
    17. }  
    class X 
    {
        private final ReentrantLock lock = new ReentrantLock();
        // ...
    
        public void m()
        {
        lock.lock();  // block until condition holds
        try 
        {
            // ... method body
        } finally
        {
            lock.unlock()
        }
         }
    }


    为什么要使用这种结构?有什么好处呢?先看下面的代码

    1. public void testTryAndFinally(String name)  
    2. {  
    3.        try  
    4.        {  
    5.            name.length();// NullPointerException  
    6.        }  
    7.        finally  
    8.        {  
    9.            System.out.println(”aa”);  
    10.        }  
    11. }  
     public void testTryAndFinally(String name)
     {
            try
            {
                name.length();// NullPointerException
            }
            finally
            {
                System.out.println("aa");
            }
     }
    

    传递null调用该方法的执行结果是:在控制台打印aa,并抛出NullPointerException。即程序的执行流程是先执行try块,出现异常后执行finally块,最后向调用者抛出try中的异常。这种执行结果是很正常的,因为没有catch异常处理器,所有该方法只能将产生的异常向外抛;因为有finally,所以会在方法返回抛出异常之前,先执行finally代码块中的清理工作。

     

    这种做法的好处是什么呢?对于testTryAndFinally来说,它做了自己必须要做的事(finally),并向外抛出自己无法处理的异常;对于调用者来说,能够感知出现的异常,并可以按照需要进行处理。也就是说这种结构实现了职责的分离,实现了异常处理(throw)与异常清理(finally)的解耦,让不同的方法专注于自己应该做的事。


    那什么时候使用try-finally,什么时候使用try-catch-finally呢?很显然这取决于方法本身是否能够处理try中出现的异常。如果自己可以处理,那么直接catch住,不用抛给方法的调用者;如果自己不知道怎么处理,就应该将异常向外抛,能够让调用者知道发生了异常。即在方法的签名中声明throws可能出现而自己又无法处理的异常,但是在方法内部做自己应该的事情。这可以参考ExecutorService.invokeAny()的方法签名

    1. <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException;  
     <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException;


            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
                </div>
    
    展开全文
  • try没有catch的情况

    2012-12-25 18:17:24
    try{ System.out.println("ok"); ...try没有catch的情况; 这段代码可以编译并运行;以前没遇到过,很惊奇,为什么能这样?既然能这样,为什么不能只有一个try(试了,只有一个try编译报错)
  • 编译错误:Try没有catch或者Finally

    千次阅读 2008-10-09 20:26:00
    Syntax error, insert "Finally" to complete BlockStatements try without catch or finally错误样例:class T { void test(){ try{ } }}
  •  数据库操作、IO 操作等需要使用结束 close()的对象必须在 try -catch-finally 的finally 中 close(),如果有多个 IO 对象需要 close(),需要分别对每个对象的 close()方法进行try-catch,防止一个 IO对象关闭失败...
  • try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的...}catch(Exception e){........}一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让...
  • 开展业务:我从用户那里得到一个输入,执行方法=“发布”并刷新页面,并且在理想的情况下它可以工作(那是作业.)但是,我试图在这个案例中做一个try / catch块用户将字符串输入int字段的位置.int Svolt = 0;doub...
  • try-catch

    2017-07-03 16:44:00
    有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。...
  • 没有try-catchtry-catch-finally的情况下,程序正常执行到某行,在这行报错后,这行后面的代码就不执行了,程序就停止了,中断了。 例如 在有try-catchtry-catch-finally 情况上,在某行执行错误,在...
  • try与catch是搭配使用的,不能只有try没有catch, try{ …//可能产生异常的代码 }catch(ExceptionName1 e1){ …//当产生ExceptionName1类型异常的处理代码 }catch(ExceptionName2 e2){ …//当产生ExceptionName2...
  • 如果内部try没有针对特定异常的validate catch语句,则控制将移至匹配的catch语句所期望的下一个try语句catch处理程序。这将继续进行,直到其中一个catch语句成功执行或完成所有嵌套的try语句为止。如果没有任何...
  • 异常对于我们来讲用处非常的多了,像java中try-catch-finally也是非常常用的,下面一起来看一篇关于java中try-catch-finally异常处理例子,希望文章对各位有帮助。这一小节概述了try-catch-finally 语句是怎样处理...
  • 即,如果try没有异常,则顺序为try→finally,如果try中有异常,则顺序为trycatch→finally。但是当trycatch、finally中加入return之后,就会有几种不同的情况出现,下面分别来说明一下。也可以跳到最后直接看...
  • trycatch

    2018-03-28 20:44:00
    如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容, 如果try中的代码一但出错,程序立即跳入catch中去执行代码,那么try中出错代码后的所有代码就不再执行了. 转载于:...
  • js trycatch

    2020-09-17 10:53:29
    执行try中的代码,如果抛出异常会由catch去捕获并执行,如果没有发生异常 catch去捕获会被忽略掉 注:但是不管有没有异常最后都会执行。 try 测试代码块中的错误 catch 处理错误 throw 创建自定义错误(抛出错误) ...
  • 如何编写没有TryCatch的程序如何编写没有TryCatch的程序如何编写没有TryCatch的程序如何编写没有TryCatch的程序如何编写没有TryCatch的程序
  • try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的...}catch(Exception e){........}一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃。用try的话,则可以让...
  • IDEA如何快速try/catch

    2020-12-18 10:46:10
    IDEA中有一段代码会抛出异常,如果没有使用try/catch则会有错误提示,这个时候就需要在这段代码外使用try/catch进行捕捉异常。 将光标定位到这段代码,按快捷键【CTRL+ALT+T】。 在打开的菜单中选择...
  • try catch

    2018-08-24 17:22:26
    try里面放一段代码,当try里面有错误的时候,系统不会中断整个代码,只是不会执行try后面...当try里面没有错误时,就不会执行catch里面的语句 Error.name的六种值对应的信息: 1,EvalError:eval()的使用与定义...
  • try&catch

    2019-03-04 07:37:50
    try&amp;catch finally 不管有没有捕获到异常,都会执行finally的语句。 若无finally的语句,触碰到异常语句后,则不在继续向下执行。 但有finally的语句,触碰到异常语句后,仍然会执行finally里的语句。 ...
  • try finally没有catch的用法

    千次阅读 2016-12-12 12:01:15
    在Java的trycatch、finally中,try是必须的,catch和finally都不是必须的。 因为捕获异常是必须要有的,而捕获到异常之后,如果不做处理,那就不用写catch,如果需要对捕获到异常之后做处理才需要catch,finally也...
  • try catch机制非常好。那些觉得try catch不行的人,是他们自己的水平有问题,无法理解这种机制。并且这群人写代码不遵守规则,喜欢偷懒,这才造成try catch不好的错觉。详细解释:1.程序要健壮,必须要设计报错机制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,689
精华内容 3,075
关键字:

try没有catch