黑马程序员技术交流社区

标题: 关于异常处理 try catch [打印本页]

作者: 追寻Dream    时间: 2013-9-24 20:44
标题: 关于异常处理 try catch
本帖最后由 追寻Dream 于 2013-9-25 10:42 编辑

1、如何:使用 Try/Catch 块捕捉异常?
2、如何:在 Catch 块中使用特定异常?

请各位高手指教!

作者: 淡忘回忆    时间: 2013-9-24 21:39
try
{
                  //有可能出现问题的代码
}
catch(异常类型 变量)
{
            //处理问题的位置
}
finally{
    //不是必须有
   //强制执行一次的代码
}
作者: 0和1,编程世界    时间: 2013-9-24 21:52
关于第一个问题:使用 Try/Catch 块捕捉异常?
将可能引发异常的代码节放在 Try 块中,而将处理异常的代码放在 Catch 块中。Catch 块是一系列以关键字 catch 开头的语句,语句后跟异常类型和要执行的操作。
下面的代码示例使用 Try/Catch 块捕捉可能的异常。Main 方法包含带有 StreamReader 语句的 Try 块,该语句打开名为 data.txt 的数据文件并从该文件写入字符串。Try 块后面是 Catch 块,该块捕捉 Try 块产生的任何异常。
using System;
using System.IO;
using System.Security.Permissions;
// Security permission request.
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum, All = @"c:\data.txt")]
public class ProcessFile {
    public static void Main() {
        try {
            StreamReader sr = File.OpenText("data.txt");
            Console.WriteLine("The first line of this file is {0}", sr.ReadLine());   
        }
        catch(Exception e) {
            Console.WriteLine("An error occurred: '{0}'", e);
        }
    }
}
关于第二个问题:在 Catch 块中使用特定异常?
发生异常时,异常沿堆栈向上传递,每个 Catch 块都有机会处理它。Catch 语句的顺序很重要。将针对特定异常的 Catch 块放在常规异常 Catch 块的前面,否则编译器可能会发出错误。确定正确 Catch 块的方法是将异常的类型与 Catch 块中指定的异常名称进行匹配。如果没有特定的 Catch 块,则由可能存在的常规 Catch 块捕捉异常。

下面的代码示例使用 Try/Catch 块捕捉 InvalidCastException。该示例创建一个名为 Employee 的类,它带有一个属性:职员级别 (Emlevel)。PromoteEmployee 方法取得对象并增加职员级别。将 DateTime 实例传递给 PromoteEmployee 方法时,发生 InvalidCastException。

示例
using System;
public class Employee
{
   //Create employee level property.
   public int Emlevel
   {
      get
         {
         return(emlevel);
         }
      set
         {
         emlevel = value;
         }
   }
   int emlevel;
}

public class Ex13
{
   public static void PromoteEmployee(Object emp)
   {
   //Cast object to Employee.
   Employee e = (Employee) emp;
   // Increment employee level.
   e.Emlevel = e.Emlevel + 1;
   }

   public static void Main()
   {
   try
      {
   Object o = new Employee();
   DateTime newyears = new DateTime(2001, 1, 1);
   //Promote the new employee.
   PromoteEmployee(o);
   //Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
   PromoteEmployee(newyears);
      }
   catch (InvalidCastException e)
      {
      Console.WriteLine("Error passing data to PromoteEmployee method. " + e);
      }
   }
}公共语言运行库捕捉 Catch 块没有捕捉的异常。根据运行库的配置,或者出现一个调试对话框,或者程序停止执行并出现一个包含异常信息的对话框。
作者: guo329838627    时间: 2013-9-24 22:03
1.
try{}catch(){}
将容易出现异常的代码放到try里面, 当代码中出现异常时则会被cathch捕捉!

2.关于在 Catch 块中使用特定异常,我觉得是看你上面的代码最容易出现什么样的异常!然后再使用特定的异常,要是感觉捕捉不到,可以在加个大的异常捕捉
try{
代码;
}
cath(特定异常 ex)
{
throw ex;
}
cath(Exception ex)
{
throw  ex;
}
作者: -___Is、_C    时间: 2013-9-25 08:56
try-catch 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做的是确保引发适当的异常。
发生异常时每个 Catch 块都有机会处理它。 Catch 语句的顺序很重要。 将针对特定异常的 Catch 块放在常规异常 Catch 块的前面,否则编译器可能会发出错误。 确定正确 Catch 块的方法是将异常的类型与 Catch 块中指定的异常名称进行匹配。 如果没有特定的 Catch 块,则由可能存在的常规 Catch 块捕捉异常。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2