异常捕捉try-catch-finally

本文问答内容:

Q:catch和finally中的代码都在什么时候执行?

A:catch在try中出现异常时对异常进行捕捉;finally中的代码无论try中的代码是否发生异常都会执行,一般进行资源回收等。

1、异常的根类为Exception。异常类一般都继承自Exception

try

{

String s = null;

s.ToString();

}

catch (NullReferenceException ex)

{

Console.WriteLine("为空"+ex.Message);

}

e就是发生异常的异常类对象,变量名只要不冲突就任意。

NullReferenceException都继承自Exception异常类

我们也可以自己创建一个异常类继承自Exception

创建自己的异常类

class ExceptionTest1 : Exception
{
public ExceptionTest1(String msg)
: base(msg)
{
}
}

throw 创建自定义异常类对象

static void SetAge(int nianling)
{
if (nianling < 0)
{
throw new ExceptionTest1("age不能小于0");
}
else
{
Program.age = nianling;//静态方法和静态属性不能用this,无效。使用类名点
}

}

2、在异常处理中,一旦try里面有问题了,放弃try代码块异常点之后的代码,直接跳到catch里面执行。如果try代码后还有代码,则处理完catch后还会继续执行。

3、多个异常的处理

try

{

int a = 10;

int b = 0;

Console.WriteLine(a / b);

int[] arr = { 1, 2, 3 };

Console.WriteLine(arr[3]);

}

catch (DivideByZeroException ae)

{

Console.WriteLine("除数不能为0");

}

catch (IndexOutOfRangeException ae)

{

Console.WriteLine("数组越界异常");

}

可以catch住父类异常,这样就可以抓住所有子类异常了,但是强烈不建议大家这样做,特别是不要没理由的catch(Exception ex)

4、好的异常处理习惯:

不要只是把异常catch住什么都不做或者只是打印一下,这不是正常的“异常处理”。

不知道怎么处理就不要catch,出错总比“隐藏报错信息”好。这样以为“不会出错了”,其实是把异常“吃掉了”,会让程序陷入逻辑混乱状态,要科学合理的处理异常。

可以try…catch;可以try…finally;也可以try…catch…finally

下面示例绝不允许!

try

{

string s=null;

s.ToLower();

}

catch(Exception ex)

{

throw ex;//抓住了异常,又再次抛出异常。我师父说教人这样写的这叫狗屎作者

}

finally

{

Console.WriteLine(“finally执行了”);

}

时间: 2024-10-16 00:30:18

异常捕捉try-catch-finally的相关文章

SQL Server Try Catch 异常捕捉

SQL Server Try Catch 异常捕捉 背景 今天遇到一个关于try catch 使用比较有意思的问题.如下一段代码: SELECT @@TRANCOUNT AS A BEGIN TRY BEGIN TRAN SELECT @@TRANCOUNT AS A1 INSERT INTO A2A ( ID1 ) VALUES ( 'A' ) COMMIT TRAN; END TRY BEGIN CATCH SELECT @@TRANCOUNT AS A2 ROLLBACK TRAN; SE

C# 异步编程Task整理(二)异常捕捉

一.在任务并行库中,如果对任务运行Wait.WaitAny.WaitAll等方法,或者求Result属性,都能捕获到AggregateException异常. 可以将AggregateException异常看做是任务并行库编程中最上层的异常. 在任务中捕获的异常,最终都应该包装到AggregateException中.一个任务并行库异常的简单处理示例如下: static void TestTwo() { Task t1= Task.Factory.StartNew(() => { throw n

Android全局异常捕捉

// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler;

从头认识java-18.2 基本的线程机制(8)多线程的异常捕捉

这一章节我们来讨论一下多线程的异常捕捉. 1.普通情况的异常 package com.ray.ch17; public class Test { public static void main(String[] args) { try { new ThreadA().run(); } catch (Exception e) { System.out.println("捕捉到异常"); } } } class ThreadA implements Runnable { @Override

php错误及异常捕捉

原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a)   set_error_handler 一般用于捕捉  E_NOTICE .E_USER_ERROR.E_USER_WARNING.E_USER_NOTICE 不能捕捉: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING. 一般与trigger_

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

Java多线程——&lt;七&gt;多线程的异常捕捉

一.概述 为什么要单独讲多线程的异常捕捉呢?先看个例子: public class ThreadException implements Runnable{ @Override public void run() { throw new RuntimeException(); } //现象:控制台打印出异常信息,并运行一段时间后才停止 public static void main(String[] args){ //就算把线程的执行语句放到try-catch块中也无济于事 try{ Execu

iOS开发——错误总结&amp;异常捕捉

异常捕捉 1 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 2 3 工欲善其事,必先利其器,下面的方法可以给多些信息,让你看到堆栈执行顺序,在哪里崩溃的,也就能大概给个思路,确定问题的症结. 4 5 在 AppDelegate.m 类实现之前加入: 6 7 8 9 void UncaughtExceptionHandler(NSException *exception) { 10 11 // 获取异常相关信息 1

JAVA 处理程序异常,(try、catch、finally),(thorws)

一.try语句: try{//这里写可能出现异常的程序} catch(Exception e){//这里写如果出现异常怎么处理的程序} 二.throws语句 语法:函数方法()  throws Exception {} 三.try语句示例: import java.util.Scanner; public class Index{ public static void main(String[] args){ Scanner in = new Scanner(System.in); try{ S

(插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

最近 做些准备性得工作和有意思的事情.所以最近做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发者 很头疼的一件事,还有就是一些莫名得错误 有时候也会困扰着我们.现在,unity已经封装得挺好了,及时出现数组越界,和空对象这样严重得错误也不会崩溃,听着挺好,但是这给开发者带了很多烦恼啊.因为有时候可能出错了 你要跟就不知道 ,在什么地方出得错误啊.所以我们要想办法去解决这个问题. 我们都知道及时app崩溃,其实后台还是在运行得 只不过是 到