单独尝试处理异常处理

时间:2016-12-19 11:45:24

标签: c#

我在其中一个网站上找到了以下问题和答案。我的问题是终于块会永远执行吗?那为什么他们说b作为答案呢?有人可以帮我理解这个吗?

为给定的代码集选择正确的输出:

class Program
  {
      static void Main(string[] args)
      {            
          try 
          {
              Console.WriteLine("csharp" + " " + 1/0);
          }
          finally
          {
              Console.WriteLine("Java");            
          }
          Console.ReadLine();
      }
  }

可能的答案:

a) csharp 0
b) Run time Exception generation
c) Compile time error
d) Java

答案:b 说明:运行时除以零的错误

4 个答案:

答案 0 :(得分:2)

答案是c。

C#编译器(帮助)在尝试编译编译时可评估常量表达式 SELECT * FROM b where z=(select count(*) FROM a FROM a WHERE x = 1;)} 时会发出编译失败

(在C和C ++中,遇到1 / 0时的行为未定义。)

另外,请注意C#将浮点表达式1 / 0编译为1.0 / 0

答案 1 :(得分:0)

因为try没有catch语句所以无论如何都会抛出异常。 发生异常是因为您的代码除以0操作1/0

答案 2 :(得分:0)

在try-catch-finally中,最终会出现以下情况之一:

1-尝试执行。没有错误发生并最终执行。

2-尝试执行遇到错误。控制器陷入困境。运行捕获代码,默认情况下是抛出,最后执行。

所以默认情况下你的代码是这样的:

class Program
  {
      static void Main(string[] args)
      {            
          try 
          {
              Console.WriteLine("csharp" + " " + 1/0);
          }
          catch
          {
              throw;
          }
          finally
          {
              Console.WriteLine("Java");            
          }
          Console.ReadLine();
      }
  }

答案 3 :(得分:0)

使用C#5.0编译器,我得到了这个编译错误,所以程序根本没有编译:

  

Console.WriteLine("csharp" + " " + 1/0);
  (17:50)除以零

如果我改变程序使用运行时确定的零值,那么我得到输出" Java":

Int32 zero = 1;
try 
{
    zero = 0;
    Console.WriteLine("csharp" + " " + 1/ zero );
}