说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

异常处理问题

编辑:说三道四文库 发布时间:2018-02-21 07:30
HTML文档下载 WORD文档下载 PDF文档下载
using System;

class Meteorologist
{
    private int[] rainfall=new int[12];
private int[] pollution=new int[12];
    
public Meteorologist()
{
    for(int i=0;i < 12;i++)
{
    rainfall[i]=i*3;
    pollution[i]=i*5;
}
}
    public int GetAveragePollution(int index)
{
    rainfall[index]=0;//此处赋值为0,将同时出现两类异常
Console.WriteLine("Opening WeatherXYZ file");
try
{
    return pollution[index]/rainfall[index];    
}
catch(IndexOutOfRangeException exObj)
{
    Console.WriteLine("Entering GetAveragePollution's catch block...");

Console.WriteLine("Error Message: {0}",exObj.Message);
Console.WriteLine("Leaving GetAveragePollution's Catch block.");
return -2;
}
catch(Exception exObj)
{
    Console.WriteLine("Entering GetAveragePollution's catch block...");

Console.WriteLine("Error Message: {0}",exObj.Message); 
    Console.WriteLine("Leaving GetAveragePollution's Catch block.");
    return -3;
}
finally
{
    Console.WriteLine("Closeing WeatherXYZ file");
}
}
}
class Tester
{
    public static void Main()
{
    int index;//private int index;

Meteorologist mete=new Meteorologist();
Console.WriteLine("Entering Main");
Console.Write("Please input thd index: ");
index=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Entering GetAveragePollution......");
Console.WriteLine("The moon is: {0}",mete.GetAveragePollution(index));
Console.WriteLine("Leaving GetAveragePollution");
Console.WriteLine("Leaving Main");
}
}

如果把index设为超出范围,程序将同时抛出两类异常,请问这种情况如果解决,还有如果把index在Main方法里显式声明为private,为什么会报错。

>>如果把index设为超出范围,程序将同时抛出两类异常,请问这种情况如果解决

try catch

>>还有如果把index在Main方法里显式声明为private,为什么会报错。

静态方法只能使用静态变量

UP
try
{
    return pollution[index]/rainfall[index];    
}

这一条语句如果同时抛出两个异常(rainfall[index]=0,index越界),用两个catch语句能够同时捕获吗,为什么运行的时候出现错误,没有执行catch块的语句。
up
不太可能同时抛出异常吧?
pollution[index]的时候就已经异常了!根本就轮不倒除零错。
那有没有可能同时抛出两种以上异常的可能性出现呢?
通常代码最后分解成IL,每一条IL一般情况下只能够抛出一个异常。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘