我凭记忆写的哦,有语法错误的直接忽略。。具体原题有好几个选项我就懒的列了 static void Main(string[] args)
{
Console.Write(Test());
}static int Test()
{
int i=1;
try
{
Console.Write(i++);
return i;
}
finally{
Console.Write(++i);
}
}
//输出来的结果是啥????
靠查资料的,禁止在这边回答逞能,禁止用工具运行得结果贴答案
{
Console.Write(Test());
}static int Test()
{
int i=1;
try
{
Console.Write(i++);
return i;
}
finally{
Console.Write(++i);
}
}
//输出来的结果是啥????
靠查资料的,禁止在这边回答逞能,禁止用工具运行得结果贴答案
结果很意外。靠DEBUG得到的答案,就不卖弄了,也不贴出来了。
学到了,虽然实际很少用到,但是正如楼上的一位哥们所言 很多出题的放弃治疗。学点奇葩的有备无患。
static void Main(string[] args)
{
Console.Write(Test());
}
static int Test()
{
int i=1;
try
{
Console.Write(i++);//这句先运行,输出1,i++结果在本句不执行+
return i; //这句最后执行,但是返回的i是只经过了i++操作的i,所以此时返回的i为2
}
finally{
Console.Write(++i); //第二句执行这个,此时i已经为2了,++i操作使得输出为3,++i在本句内就可以执行+
}
}
再执行finally中的Console.Write,此时是3
最后返回i,执行Main中的Console.Write,感觉是2,但内部机理不是完全清楚。
static void Main(string[] args)
{
Console.Write(Test());
} static int Test()
{
int i = 1;
try
{
Console.Write(i++);
}
finally
{
Console.Write(++i);
}
return i;
}
这样写就是1,3,3了,因此可以说明如果return i放在try里时,Test()的值已经生成了,即2,如果return i放在try外时,Test()的值还需要经过++i运算才行,即3
错了,如果将return i放在try外面就是1,3,3
原来 finally后才执行 return 强大·
用i=i+1 看的更清楚
static int Test()
{
int i=1;
try
{
Console.Write(i++);//打印1,不解释
return i;//在这里把i复制到寄存器里用于返回,此时寄存器里的值是2(和i不是同一个变量)。
}
finally{
Console.Write(++i);//打印3,不解释
}
}上述代码执行顺序try,finally,return
故打印1,3,2(寄存器里的值,不是i)
我觉得先输出Console.Write(i++);不管你i++还是++i都会先运行完后才输出吧所以是2
然后return i;
到底是先Console.Write(test())还是finally我觉得是finally 所以是3
然后Console.Write(test())返回的i已经被finally加一了所以是3
int i = 1;
try {
System.out.println("num:"+ i++);
return i;
} catch (Exception e) {
// TODO: handle exception
}
finally{
System.out.println("number"+ ++i);
}
return i;
}
finally在return之前执行.
c#是完全面向对象 和c++即面向过程又有部分oo特性不同。