标签: finally

最后关闭连接和声明

哪个更适合finally块:

finally {
        try {
            con.close();
            stat.close();
        } catch (SQLException sqlee) {
            sqlee.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

要么:

finally {
        try {
            if (con != null) {
                con.close();
            }
            if (stat != null) {
                stat.close();
            }
        } catch (SQLException sqlee) {
            sqlee.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

java connection finally jdbc try-catch

7
推荐指数
3
解决办法
3万
查看次数

为什么我的finally块不能在C#中工作?

我一直在帮助同事在他们的代码中调试一些奇怪的行为.以下示例说明了这一点:

static void Main(string[] args)
{
    string answer = Sample();
    Console.WriteLine(answer);
}

public static string Sample()
{
    string returnValue = "abc";

    try 
    {
         return returnValue;
    }

    catch (Exception)
    {
         throw;
    }

    finally
    {
         returnValue = "def";
    }
}
Run Code Online (Sandbox Code Playgroud)

这个样本有什么回报?

你认为因为finally块,它返回"def",但事实上,它返回"abc"?我已经逐步完成了代码并确认了finally块实际上已被调用.

真正的答案是你不应该首先编写这样的代码,但我仍然对这种行为感到困惑.

编辑:根据一些答案澄清流程.

当您单步执行代码时,finally将在返回之前执行.

重复: 尝试中真正发生的事情{return x; } finally {x = null; 声明?

c# finally

6
推荐指数
2
解决办法
3061
查看次数


在finally块中设置reference = null?

我的一位同事null在最后的块中提到了参考.我认为这是胡说八道.

public Something getSomething() {
    JDBCConnection jdbc=null;
    try {
        jdbc=JDBCManager.getConnection(JDBCTypes.MYSQL);
        ...
    }
    finally {
        JDBCManager.free(jdbc);
        jdbc=null; // <-- Useful or not?
    }
}
Run Code Online (Sandbox Code Playgroud)

你怎么看呢?

java exception-handling exception finally

6
推荐指数
2
解决办法
1744
查看次数

Delphi - 尝试finally块是由编译器保证正确执行的吗?

我知道这也是在其他主题上讨论过的,我所问的正是这个问题的标题.

是否有这样的情况,当try/finally终于不会执行?

 try
  //some error here
 finally
  //code that MUST be executed
 end;
Run Code Online (Sandbox Code Playgroud)

我不是在讨论如何使用try..except/finally块,我只是想问这是否会发生.

LE:Application.Terminate /拔掉您的计算机是特殊情况.

delphi exception finally try-catch delphi-2006

6
推荐指数
1
解决办法
2027
查看次数

在try/catch块之后使用finally块与编写代码

据我了解,以下两个例子应该做同样的事情.为什么第一个被认为更好?

1:

try {
  riskyMethod();
}
catch(Exception e) {
  //handle exception
}
finally {
  cleanUp();
}
Run Code Online (Sandbox Code Playgroud)

2:

try {
  riskyMethod();
}
catch(Exception e) {
  //handle exception
}
cleanUp();
Run Code Online (Sandbox Code Playgroud)

编辑:该示例是在Java中,但我想知道一般的块的概念,如在任何语言中使用

exception-handling finally try-catch

6
推荐指数
2
解决办法
5050
查看次数

终于在C#中阻止了吗?

两个条件有什么区别?每次运行method1或method2时,都应该有一个运行所需的代码块.在我看来,2方法是相同的.

// example method1
void Method1(void)
{
    try
    {
        // do something
    }
    catch (Exception ex)
    {
        // do something
    }
    finally
    {
        // do something whenever method1 runs
    }
}

// example method2
void Method2(void)
{
    try
    {
        // do something
    }
    catch (Exception ex)
    {
        // do something
    }

    // do something whenever method2 runs
}
Run Code Online (Sandbox Code Playgroud)

最后块对我来说似乎没必要.

c# finally

6
推荐指数
1
解决办法
1697
查看次数

java skips catch子句直接跳到apache pdfbox中

在这一个我的头发上,我的双手.

我正在使用Apache PDFBox,因为我想在JAVA中逐行阅读pdf文件并稍后处理内容.但是我有以下问题..我在一个单独的java程序(在main方法中)使用了下面的代码,它在那里工作正常.但是,当我在我的tomcat服务器applet中使用它与石英调度程序一起出现问题时,我无法弄清楚原因.请记住,我将工作单独测试程序中的下面的行复制粘贴到我自己的大项目中,所以它是完全相同的代码.然而,在我更大的项目中,程序一直运行到String x1 = .. line,我放了一个断点.当我试图跨过它并没有'给出任何错误,控制台输出或任何东西,并跳过catch子句直接到最后.我在catch子句中加入了断点,它们没有被触发.

这是我的代码:

    PDFTextStripper stripper;
    PDDocument doc = null;      
    try{
      doc = PDDocument.load("00026614_F_21Jan2013-18Feb2013.pdf");
      stripper = new PDFTextStripper();
      String x1= stripper.getText(doc);    //SOMETHING GOES WRONG HERE
      //break up the file content returned as a string into individual lines
      List<String> ans= Arrays.asList(x1.split("\r\n"));//THIS IS NEVER REACHED
    }
    catch(Exception e){
        e.printStackTrace();    //THIS IS NEVER REACHED EITHER
    }
    finally{
       if(doc!=null) //IT GOES FROM STRING X1 STRAIGHT TO HERE.
       doc.close();
    }
Run Code Online (Sandbox Code Playgroud)

我得到的唯一输出来自LOG4J,它必须为程序的其他部分进行初始化,最后几行输出是

34212 [DefaultQuartzScheduler_Worker-1] DEBUG org.apache.pdfbox.util.PDFStreamEngine  - processing substream token: PDFOperator{Tm}
34212 …
Run Code Online (Sandbox Code Playgroud)

java apache finally try-catch pdfbox

6
推荐指数
1
解决办法
2065
查看次数

使用Java中的资源尝试时出错

我有这个方法,我正在尝试使用Java SE 7的资源.

private void generateSecretWord(String filename){

        try (FileReader files = new FileReader(filename)){
            Scanner input = new Scanner(files);
            String line = input.nextLine();
            String[] words = line.split(",");
            Collections.shuffle(Arrays.asList(words));
            if (words[0].length()>1){
                secretWord = words[0];
                return;
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        finally {
            if (files!=null) files.close(); 
        }

    }
Run Code Online (Sandbox Code Playgroud)

我在finally块中得到编译错误,files cannot be resolved to a variable 我在文件中引用了文件try with block.为什么我会收到此错误以及如何解决?

谢谢

java finally try-catch-finally try-with-resources

6
推荐指数
2
解决办法
1万
查看次数

当使用RxJS observables在可观察的返回后采取行动时,'do'和'finally'之间的差异是什么?

关于RxJS dofinallyRxJS 之间的差异,我没有看到很好的文档.我的目标是仅在Observable返回数据时才采取行动,但看起来他们都会对失败采取行动.

  • do说" 为可观察序列中的每个元素调用一个动作,并在可观察序列的优雅或异常终止时调用一个动作. "

observable可能返回多个元素?

  • finally说" 在源可观察序列正常或异常终止后调用指定的操作".

我希望有人会解释是否重要,或者是否有更好的替代方法.

    getData(choice): void {
        this.dataService.getTableData(choice, 'mainCalls.php')
            .do( () => this.defineWidth() )
            .subscribe(tableData => this.tableData = tableData,
                err => {
                    console.log(err);
                }
            );
    }

    ngOnInit() {
        this.getData('getTableData');
    }
Run Code Online (Sandbox Code Playgroud)

defineWidth是一个依赖于Observable返回的数据的函数.我愿意接受建议并阅读有关替代方法的材料,以实现我想要的目标.

finally observable rxjs angular

6
推荐指数
1
解决办法
3848
查看次数