[原创]c#中的异常处理之基础学习
--------
在编写代码的时候,除了关心一个程序是否正常运行,对于意料之外的突发问题也要能够预料,并能直观地提示!
所以,异常处理是非常重要的:
c#是面向对象的,所以,在c#中,所有的异常都是 System.Exception类的实例。其实呢,检查异常,除了:
try
{
}
catch ()
{
}
一般这个是用来检测整个程序的,局部检测的,我们可以使用关键词 checked 和 unchecked ,简单介绍下,一个例子:
using System;
public class A
{
static int x=1111111111;
static int y=1111111111;
public static void Main() //算术溢出
{
/* 检查异常
checked
{
Console.WriteLine(x*y);
}
*/
//不检查异常,对于常量表达式的,一般都默认为unchecked的,不是常量表达式的那不一定,看情况
unchecked
{
Console.WriteLine(x*y);
}
}
}
-----
try
{
//抛出异常,用throw 但是必须有表达式
}
catch ()
{
//接收,可以有多个catch()来接受特定的异常,这个从从抛出到接收也叫做异常传播
}
finally
{
}
-------------
一个很好的例子,我摘下来了,说明了下关键:
using System;
public class IsTest
{
//函数
static void f()
{
try
{
g();//如果在try里使用throw ,必须有表达式
}
catch(Exception e)
{
Console.WriteLine("Exception :{0}",e);
e=new Exception("f");
throw ;// 想一下,如果变成 throw e; 又是如何?那么,这个捕获的异常会因为在这个catch 中被改变而改变
}
}
//一个直接抛出异常的函数g()
static void g()
{
throw new Exception("g");
}
//主函数
public static void Main()
{
try
{
f();
}
catch(Exception e)
{
Console.WriteLine("Excption in Main():{0}",e.Message);
}
}
}
显示为:
Exception :g
Exception in Main():g
----------
如果,在这个异常定义的最好加上 finally{}会怎么样? 定义:无论什么,如果这个异常定义中有 finally{}的,都要被
调用的!我们也可以改变异常的输出信息,举个小例子:
using System;
public class IsTest
{
public static void Main()
{
try
{
//抛出异常
throw new Exception("哈哈,我自己定义的输出信息!");
}
catch(Exception e)
{
//捕获异常,并输出
Console.WriteLine(e.Message);
}
//有finally
finally
{
Console.WriteLine("我就是还要输出信息!");
}
}
}
在编写代码的时候,除了关心一个程序是否正常运行,对于意料之外的突发问题也要能够预料,并能直观地提示!
所以,异常处理是非常重要的:
c#是面向对象的,所以,在c#中,所有的异常都是 System.Exception类的实例。其实呢,检查异常,除了:
try
{
}
catch ()
{
}
一般这个是用来检测整个程序的,局部检测的,我们可以使用关键词 checked 和 unchecked ,简单介绍下,一个例子:
using System;
public class A
{
static int x=1111111111;
static int y=1111111111;
public static void Main() //算术溢出
{
/* 检查异常
checked
{
Console.WriteLine(x*y);
}
*/
//不检查异常,对于常量表达式的,一般都默认为unchecked的,不是常量表达式的那不一定,看情况
unchecked
{
Console.WriteLine(x*y);
}
}
}
-----
try
{
//抛出异常,用throw 但是必须有表达式
}
catch ()
{
//接收,可以有多个catch()来接受特定的异常,这个从从抛出到接收也叫做异常传播
}
finally
{
}
-------------
一个很好的例子,我摘下来了,说明了下关键:
using System;
public class IsTest
{
//函数
static void f()
{
try
{
g();//如果在try里使用throw ,必须有表达式
}
catch(Exception e)
{
Console.WriteLine("Exception :{0}",e);
e=new Exception("f");
throw ;// 想一下,如果变成 throw e; 又是如何?那么,这个捕获的异常会因为在这个catch 中被改变而改变
}
}
//一个直接抛出异常的函数g()
static void g()
{
throw new Exception("g");
}
//主函数
public static void Main()
{
try
{
f();
}
catch(Exception e)
{
Console.WriteLine("Excption in Main():{0}",e.Message);
}
}
}
显示为:
Exception :g
Exception in Main():g
----------
如果,在这个异常定义的最好加上 finally{}会怎么样? 定义:无论什么,如果这个异常定义中有 finally{}的,都要被
调用的!我们也可以改变异常的输出信息,举个小例子:
using System;
public class IsTest
{
public static void Main()
{
try
{
//抛出异常
throw new Exception("哈哈,我自己定义的输出信息!");
}
catch(Exception e)
{
//捕获异常,并输出
Console.WriteLine(e.Message);
}
//有finally
finally
{
Console.WriteLine("我就是还要输出信息!");
}
}
}