引言

在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下。

try..catch语法

try-catch语句由一个try块后跟一个或多个catch子句构成,这些子句制定不同的异常处理程序。

引发异常时,公共语言运行时(CLR)会查找处理此异常的catch语句。如果当前执行的方法不包含这样的catch块,则CLR会查看调用当前方法的方法,然后会遍历叠用堆栈。如果找不到catch块,则CLR会向用户显示一天有关未处理的异常的消息并停止执行程序。

try块包含可能导致异常的保护代码。该块一直执行到引发异常或成功完成为止。

     class Program
{
static void Main(string[] args)
{
object o = null;
try
{
//强制转换 null 对象的尝试引发 NullReferenceException 异常
int i = (int)o;
} catch (NullReferenceException ex)
//1.虽然可以使用不带参数的 catch 子句捕捉任何类型的异常,但不推荐这种用法。 通常,您应该只捕捉那些您知道如何从中恢复的异常。 因此,应该总是指定一个从 System.Exception 派生的对象参数。
//2.在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。 这种情况下 catch 子句的顺序很重要,因为会按顺序检查 catch 子句。 将先捕获特定程度较高的异常,而不是特定程度较小的异常。 如果对 catch 块进行排序以使永远不能达到后面的块,编译器将产生错误。
//3. int i = (int)o; 很有可能引发NullReferenceException异常,所以将此catch放在前面
//4.如果将catch (Exception ex)放在第一个,将不会达到后面的块,编译器将产生错误。
{
Console.WriteLine(ex.Message);
}
catch (DivideByZeroException div)
{
Console.WriteLine(div.Message);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}

try-catch的基本语法如上面所述,try-catch的执行顺序是:try块中的代码执行出现异常将执行catch块中的代码,如果try块中的执行没有错误,将try块中的代码执行完,不会执行catch块中的语句。

try-catch-finally:不管是否有异常,finally块中的代码都会执行,finally块常用于资源的释放等。

try-catch的笔试题

第一种:值类型的

         static int GetResult()
{
int a = ;
int b = ;
int n = ;
try
{
int k = a / b;
return n;
}
catch (Exception ex)
{ Console.WriteLine(ex.Message);
throw;
}
finally//不管有没有发生异常 finally都会执行
{
n++; }
}

可能你已经知道结果了:1,为什么呢?咱们可以看看反编译的代码,你就会清楚为什么了。

第二种:引用类型的

 static Person GetResult()
{
int a = ;
int b = ;
Person p = new Person();
p.Age = ;
try
{
int k = a / b;
return p;
}
catch (Exception ex)
{ Console.WriteLine(ex.Message);
throw;
}
finally//不管有没有发生异常 finally都会执行
{
p.Age++;
}
}

那么返回的这个person的age是多少呢?先看反编译的结果:

结果为:2

总结

这个题考察还是try-catch-finally的执行顺序,以及引用类型和值类型,这里总结这个,只是换个角度重新学习一下。希望对你有所帮助。

[c#基础]关于try...catch最常见的笔试题的更多相关文章

  1. [c#基础]关于const和readonly常见的笔试题剖析

    引言 有那么几天没更新博客了,发现到了不得不写的地步,总是有那么个声音在强迫自己,虽然工作很累,但是有些东西不写出来,不能原谅自己.今天为什么总结这两个关键字的区别,总觉得这两个关键字的用法用的太习惯 ...

  2. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

  3. 【笔试必备】常见sql笔试题(30题)

    sql是测试从业者必备的技能之一,基本上也是笔试必考内容. 所以,不要让sql拖了后腿,有些测友一遇到多表关联查询就犯晕,甚至连单表的执行顺序都没搞懂,下面简单介绍下,顺便给一些题供大家练习. 单表执 ...

  4. 常见sizeof 笔试题

    最近面试过程中遇到了很多很多sizeof的问题. 现在总结一下: #include <stdio.h> #include <string.h> void fun(int arr ...

  5. Java 基础常见知识点&面试题总结(中),2022 最新版!| JavaGuide

    你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 上篇:Java 基础常见知识点&面试题总结(上),2022 最新 ...

  6. Java 基础常见知识点&面试题总结(下),2022 最新版!

    你好,我是 Guide.秋招即将到来,我对 JavaGuide 的内容进行了重构完善,同步一下最新更新,希望能够帮助你. 前两篇: Java 基础常见知识点&面试题总结(上),2022 最新版 ...

  7. Android开发面试经——3.常见Java基础笔试题

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  8. Android开发面试经——2.常见Android基础笔试题

     标签: androidAndroid基础Android面试题Android笔试题 2015-03-12 15:04 3361人阅读 评论(3) 收藏 举报  分类: Android开发(29)  版 ...

  9. HTML5常见的面试题,基础知识点

                                                                                    HTML5常见的面试题 一.HTML 常 ...

随机推荐

  1. USACO . Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often co ...

  2. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  3. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  4. Redis的使用场景 by 杨卫华

    转载自新浪微博架构师杨卫华的博客 http://timyang.net/tag/redis/,省略了部分内容 按:杨卫华在2010年就已经测试了Redis的性能,并给出了初步的结论:“Redis性能惊 ...

  5. [LeetCode] Distinct Subsequences 不同的子序列

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  6. 《如何正确学习JavaScript》读后小结

    在segmentfault上读的一篇学习JavaScript路线的文章,做个小结. 一.简介.数据类型.表达式和操作符 (1)<JavaScript权威指南>前言1-2章&< ...

  7. web兼容学习分析笔记-margin 和padding浏览器解析差异

    二.margin 和padding浏览器解析差异 只有默认margin的元素 <body>margin:8px  margin:15px 10px 15px 10px(IE7) <b ...

  8. Mysql的连接状态

    对应mysql的连接,任何时刻都有一个状态.表示mysql当前正在做什么. command里面的状态: sleep:线程正在等待客户发送新的请求. query:正在执行查询或者正在将结果发送客户端 这 ...

  9. vue.js第七课

    条件渲染 v-if template v-if v-show v-else v-if 与 v-show   handlebars.js 1.v-if 如果我们想一次 控制 多个元素呢? 我们可以吧一个 ...

  10. JVM_七种垃圾收集器介绍

    本文中的垃圾收集器研究背景为:HotSpot+JDK7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的算法. JVM会从年轻代和年 ...