关于Catch块的一些问题

原创 2006年06月15日 13:40:00

使用 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 = @"d://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块中不能什么都不做

不小心将一处catch里打印错误的trace删了。于是项目出现了很奇怪的问题:当运行到catch块这边的时候,虽然没有出现错误,但是之后运行的代码的错误都不会再打印了。花费了2天时间,重装2次flex...
  • topfire7
  • topfire7
  • 2011年02月15日 13:59
  • 647

我在Android开发中遇到的一些问题

转载请注明来源:http://blog.csdn.net/KjunChen/article/details/50549538 自己在开发中遇到的一些常见的小问题,记录下来方便查阅。...
  • KjunChen
  • KjunChen
  • 2016年06月01日 09:55
  • 544

Java异常及异常块执行次序(try、catch、finally、return)

Java异常: ①使用try-catch-finally处理异常; ②使用throw、throws抛出异常; ③上边为java异常处理5个关键字。 异常是程序在设计时或运行时产生的错误,异常处理是处理...
  • typa01_kk
  • typa01_kk
  • 2015年04月16日 23:50
  • 2056

Java异常之catch语句块

今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常。原文是Java官方的文档,现翻译如下。红...
  • MOLIILOM
  • MOLIILOM
  • 2015年11月21日 00:05
  • 1372

try-catch-finally块的执行流程

记得前些天看try-catch-finally的东西,在很多博客上看了很多文章,也没有理解的很透彻,今天看到了国外的一个牛人讲的,感觉非常好非常透彻,完全没有云里雾里的感觉,就把它翻译过来。希望能对大...
  • maoyeqiu
  • maoyeqiu
  • 2015年10月23日 00:02
  • 1803

为什么要在catch块里写状态终止代码

public class Test2 { public static String doit() { try { BufferedInputStream...
  • cavvv
  • cavvv
  • 2015年07月31日 22:15
  • 1235

关于云计算,想明白这三个问题,2016才不会虚度

无论这三个问题对于个人和公司的具体行为有多少指导和启示作用,对于个人的长期规划、公司和产品的发展战略来讲,看清楚这三个问题的重要性无论如何强调也不过分。...
  • liuliming3000
  • liuliming3000
  • 2015年12月29日 09:03
  • 969

对try-catch语句块中变量的作用域说明

对try-catch语句块中变量的作用域说明try-catch语句块中变量的作用域,与其它语句块的作用域一样。 在语句块内部定义的变量,作用域在语句块内部,外部不可见。 /*语句块内部*/ ...
  • zou8944
  • zou8944
  • 2016年09月03日 16:40
  • 1102

嵌套try...catch语句

一 介绍 如果在catch区域中也发生了异常,可以在catch区域中再使用一组try...catch语句,即嵌套使用try...catch语句。 语法: try { somestatem...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 10:35
  • 327

Java中finally语句块的深度解析(try catch finally的执行顺序)

首先摆出结论: 1、除了以下2种情况外,不管有木有出现异常,finally块中代码都会执行; ①程序未进入try{}块的执行,如在try之前出现运行时异常,程序终止。 ②程序进入到try{}和c...
  • u014475796
  • u014475796
  • 2016年11月08日 22:25
  • 476
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Catch块的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)