我在其中一个网站上找到了以下问题和答案。我的问题是终于块会永远执行吗?那为什么他们说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 说明:运行时除以零的错误
答案 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 );
}