C#与JAVA处理异常的方法与区别
作者:蒋固金
error parse new注:文中红部分是读者应注意的地方
在C#和JAVA都提供了异常处理的方法,异常处理通过try、catch和finally 来实现,首先看一下C#中如何处理异常,环境为:Microsoft Visual Studio2010,新建控制台项目:ConsoleTest。
在主类中编写如下代码:
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[]args)
{
Console.Write("请输入一个整数:");
int i=int.Parse(Console.ReadLine());
Console.WriteLine("输入的整数为:{0}",i);
}
}
}
假设输入25,运行结果为:
这是在正常状况下,那么如果我们输入非数字字符会出现什么情况,以hh为例,运行结果为:
这样就出现了异常,系统已经提示未经处理的异常:System.FormatException:输入字符串格式不正确,通过提示,我们可以对异常进行处理,修改后的代码如下:
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[]args)
{
Console.Write("请输入一个整数:");
try
{
int i=int.Parse(Console.ReadLine());
Console.WriteLine("输入的整数为:{0}",i);
}
catch(FormatException fe)
{
Console.WriteLine(fe.Message);
}
}
}
}
还是以hh为例,运行结果如下:
这样就对异常做了处理,提示用户输入的字符串格式不正确,但是这样的提示对于未接触过编程语言的人来说依然是看不懂的,我们可以对代码作如下改动:using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[]args)
{
Console.Write("请输入一个整数:");
try
{
int i=int.Parse(Console.ReadLine());
Console.WriteLine("输入的整数为:{0}",i);
}
catch(FormatException)
{
Console.WriteLine("输入数据错误,只能为整数!");
}
}
}
}
同样以hh为例,运行结果如下:
这样就会显示出我们自己定义的信息,这些都是使用系统帮助我们判断的异常,假如我们要人为的抛出异常该怎么做呢?假设有一个静态方法,方法的作用为接收一个整数,如果整数在0~10范围内,则返回改整数,否则为异常,编写如下代码:
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[]args)
{
Console.Write("请输入一个整数,范围是0~10:");
try
{
int i=int.Parse(Console.ReadLine());
Console.WriteLine("输入的整数为:{0}",getIntDigit(i));
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static int getIntDigit(int i)
{
if(i>=0&&i<=10)
return i;
else
throw new Exception("输入数据范围不在0~10内!");
}
}
}
以5为例,运行结果如下:
再以15为例,运行结果如下:
获取了我们抛出的异常,这样的结果貌似是正确的,可是当我们输入非数字字符hh时,运行结果如下:
这样的显示明显是有问题的,我们可以继续修改代码,代码如下:
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[]args)
{
Console.Write("请输入一个整数,范围是0~10:");
try
{
int i=int.Parse(Console.ReadLine());
Console.WriteLine("输入的整数为:{0}",
getIntDigit(i));
}
catch(FormatException)
{
Console.WriteLine("输入数据错误,只能为整数!");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。