第1章C语言基础ppt课件.ppt

上传人:小飞机 文档编号:2133057 上传时间:2023-01-15 格式:PPT 页数:89 大小:2.63MB
返回 下载 相关 举报
第1章C语言基础ppt课件.ppt_第1页
第1页 / 共89页
第1章C语言基础ppt课件.ppt_第2页
第2页 / 共89页
第1章C语言基础ppt课件.ppt_第3页
第3页 / 共89页
第1章C语言基础ppt课件.ppt_第4页
第4页 / 共89页
第1章C语言基础ppt课件.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《第1章C语言基础ppt课件.ppt》由会员分享,可在线阅读,更多相关《第1章C语言基础ppt课件.ppt(89页珍藏版)》请在三一办公上搜索。

1、高级程序设计,地球科学与技术学院测绘系,前 言,教材:C#程序设计与案例教程,杨树林、胡洁萍编著,清华大学出版社,2007.08参考书:C#入门经典(第6版),(美)沃森、内格尔等著,齐立波翻译,清华大学出版社,2015.3上课时间:周二上午3-4节,东环306,第1-10周周四上午1-2节,东环306,第1-2、4、7、9周上机时间:周二下午7-8节,微602,第3-10周周四下午9-10节,微602,第3、6、8周,课程主要内容,第1章 C#语言基础第2章 面向对象程序设计第3章 GUI程序设计第4章 图形、图像程序设计第5章 数据库程序设计第6章 流和文件第7章 线程(不讲)第8章 网络

2、程序设计(不讲)第9章 ASP.NET(不讲),第1章 C#语言基础,第1章 目录,1.1 C#概述1.2 C#语言基础1.3 控制语句1.4 数组1.5 异常处理,1.1 C#概述,1、.NET概述2、什么是C#3、Visual Studio.Net集成开发环境4、初识C#程序5、命名空间,1.1.1.NET概述,.NET是微软公司推出跨平台、跨语言开发平台。,机器语言,汇编语言,高级语言,硬件依赖高,硬件依赖低,可移植性低,可移植性高,可复用性低,可复用性高,1.1.1.NET概述,FORTRAN,C,.NET(C#),源代码复用,二进制码复用,Java,跨平台,跨语言,1.1.1.NET

3、概述,.NET Framework体系结构,操作系统,公共语言运行时(CLR),VC+.Net,C#,VB.Net,VJ#,.Net Framework 类库(FCL),1.1.1.NET概述,CLR和MSIL(CIL),日语,汉语,翻译,英语(中间语言),1.1.1.NET概述,CLR和MSIL(CIL),托管代码,1.1.1.NET概述,CLR和MSIL(CIL),编译C#|-程序集(.exe、.dllMSIL)、元信息数据信息、可选资源图片、声音)|(Microsoft Intermediate Language 微软中间语言)|-.NET CLR(Common Language Run

4、time 公共语言运行库)|-JIT编译(Just-In-Time,称为即时编译,仅在需要时才编译MSIL)|机器代码,1.1.1.NET概述,CLR和MSIL(CIL)有了CLR,保证了.NET 中一种语言具有的功能其他语言也都具有。Microsoft 中间语言(MSIL)由一组特定的指令组成,这些指令指明如何执行代码。JIT 编译器的主要工作是将普通 MSIL 代码转换为可以直接由 CPU 执行的计算机代码。系统进程可以轻松读取 MSIL 代码。,1.1.1.NET概述,.NET组成NET平台包括.NET框架-NET框架(Framework)是开发平台的基础公共语言运行时(CLR).NET

5、类库.NET开发工具等组成部分。.NET编程语言(C+.NET C#.NET VB.NET).Visual Studio.NET集成开发环境,基本框架类,WinForms,ADO.Net 和 XML 类,.Net Framework,.Net Framework 类库,ASP.NET,CLS,CLR,CTS,1.1.1.NET概述,.NET版本,1.1.1.NET概述,CLS(Common Language Specification):不同语言程序之间相互通用必须遵守的规则和限制。CTS(Common Type System):CLS中对数据类型的规定。,1.1.1.NET概述,1.1.2

6、什么是C#,C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C+派生而来,继承了其强大的性能,同时又以.NET 框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯海尔斯伯格主持开发,微软在2000年发布了这种语言。原Borland公司的首席研发设计师安德斯海尔斯伯格(Anders Hejlsberg)在微软开发了Visual J+1.0,很快的Visual J+由1.1版本升级到6.0版。SUN公司认为Visual J+违反了Java开发平台的中立性,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PD

7、C 2000)上,发表新的语言C#。C#语言取代了Visual J+,语言本身深受 Java、C 和 C+的影响。,版本 C#版本变化和.Net Framework版本变化一样,新版本总是在旧版本基础上增加了新的功能或增强了已有功能。,1.1.2 什么是C#,1.1.2 什么是C#,语言特征,相对于C和C+,C#在许多方面进行了限制和增强:指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用。对象不需要被显式释放,代替为当不存在被引用时通过垃圾回收器回收。只允许单一继承(single inheritance),但是一个类可以实现多个接口(interfa

8、ces)。C#比C+更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而布尔型同整型,及枚举型同整型不允许隐含转换。数组声明语法不同(int a=new int5 而不是 int a5)。属性支持,使用类似访问成员的方式调用。,1.1.3 Visual Studio.NET集成开发环境,Visual Studio集成开发工具不同版本旧的版本分类新的版本分类,Microsoft Visual Studio起始页,新建项目对话框,代码编辑器,用于编写源代码。“工具箱”,用于使用鼠标迅速开发可视化界面。解决方案资源管理器,用于查看和管理项目文件和设置。项目设计器,

9、用于配置编译器选项、部署路径、资源及更多其他内容。属性窗口,用于配置用户界面中控件的属性和事件。Visual Studio 调试器,用于对程序进行测试。类视图,用于根据类型(而不是文件)在源代码中导航。对象浏览器,用于查看.NET Framework 程序集和 COM 对象中可用的方法和类。,Visual Studio.NET集成开发环境,属性窗口,1.1.4 初识C#程序,【例1-1】一个简单的控制台程序。,C#语言使用类来组织和包装代码,所有可执行代码都必须包含在类中。using指令用于声明程序中使用的系统类所在的命名空间。如:Console类包含在System命名空间中。,/声明系统命名

10、空间using System;using System.Collections.Generic;using System.Linq;using System.Text;/用户自定义命名空间namespace Exam_1_1/程序开始类:Program/class Program/应用程序的主入口方法:Main/static void Main(string args)Console.WriteLine(请输入你的名字:);string username=Console.ReadLine();Console.WriteLine(欢迎0进入C#世界!,username);,1.1.4 初识C#程

11、序,【例1-1】一个简单的控制台程序。,注释方式:单行注释/注释内容多行注释/*注释第1行注释第n行*/文档注释/文档注释 即XML注释,将文档注释的内容转为XML文档保存。,/声明系统命名空间using System;using System.Collections.Generic;using System.Linq;using System.Text;/用户自定义命名空间namespace Exam_1_1/程序开始类:Program/class Program/应用程序的主入口方法:Main/static void Main(string args)Console.WriteLine(请

12、输入你的名字:);string username=Console.ReadLine();Console.WriteLine(欢迎0进入C#世界!,username);,1.1.4 初识C#程序,【例1-1】一个简单的控制台程序。,Main方法:Main 方法是 C#控制台应用程序或窗口应用程序的入口点,程序控制流在该处开始和结束。Main 在类或结构的内部声明。Main 方法必须是静态的,且不应该是公用的(默认访问级别是 private)但不要求所在类或结构是静态的。Main 的返回类型有两种:void 或 int。Main 方法可以包含命令行参数 string,也可以不具有这样的形参。,1.

13、1.4 初识C#程序,【例1-1】一个简单的控制台程序。,控制台输入、输出使用.NET Framework中 System 命名空间中的Console类提供的输入输出方法。输入:Console.Read();/读取一个字符 Console.ReadLine();/读取一行字符输出:Console.Write();/以文本形式输出 Console.WriteLine();/以文本形式输出并换行 若输出若干变量值,则用 0 表示第一项,1 表示第二项,依此类推,如:,int year=1066;string battle=Battle of Hastings;Console.WriteLine(T

14、he 0 took place in 1.,battle,year);,1.1.4 初识C#程序,【例1-2】一个图形界面程序。设计一个程序,界面上用一个文本框输入姓名,单击“确定”按钮后,在文本框中显示“欢迎XXX进入C#世界!”,运行结果如下图所示。,1.1.5 命名空间,命名空间类似于文件系统中的文件夹,可以看作相关类的一个容器。命名空间分为两类:用户定义的命名空间、系统定义的命名空间。系统命名空间:NET Framework 本身有八十多个命名空间,每个命名空间中有上千个类。System.Drawing:提供了GDI+基本绘图功能;System.IO:提供数据文件读写等功能;Syste

15、m.Collections:提供了列表、队列等集合操作用户定义的命名空间是在代码中定义的命名空间。,1.1.5 命名空间,namespace 命名空间名称 用户代码命名空间可以嵌套命名空间的使用使用using指令能够引用给定的命名空间或创建命名空间的别名(using 别名)。using 别名=类或命名空间名;如:using System;using System.Drawing;using StatisticalData;,namespace StatisticalData class FileHandling public void Load()/code to load statistic

16、al data namespace Images class FileHandling public void Load()/code to load an image file class Program static void Main()StatisticalData.FileHandling data=new StatisticalData.FileHandling();data.Load();Images.FileHandling image=new Images.FileHandling();image.Load();,1.1.5 命名空间,系统定义的命名空间,1.2 C#语言基础

17、,1、基本编码规则2、数据类型3、数据类型转换4、常量与变量5、装箱与拆箱6、运算符,1.2.1 基本编码规则,C#语言中,标识符是以字母、下划线(_)或开始的一个字符序列,后面可以跟字母、下划线、数字。C#语言区分大小写。具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字或关键字。书写规则每行语句以;结尾。空行和缩进被忽略。多条语句可以处于同一行,之间用分号分隔即可。注释:有3种方式。,1.2.2 数据类型,数据类型分类1:可分为内置类型和构造类型。,数值型常数的表示见教材p16.,1.2.2 数据类型,数据类型分类2:按数据的存储方式,可分为值类型和引用类型。,说明:1、

18、所有的数据类型是以类的形式组织的;2、数据类型的根基类是object类;3、定义值类型变量时,直接使用即可;定义引用型变量时,需先使用new分配内存,但string类型除外。,1.2.2 数据类型,类型的层次结构称为通用类型系统CTS(Common Type System),1.2.2 数据类型,类型的层次结构称为通用类型系统CTS(Common Type System),值类型各种值类型总是含有该类型的一个值。每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在原来的内存位置。C#的值类型可以归类如下:内置类型(Simple type)

19、枚举类型(Enumeration type)结构类型(Structure type),1.2.2 数据类型,1.2.2 数据类型,值类型内置类型整数,1.2.2 数据类型,值类型内置类型实数值类型内置类型字符型Unicode 字符是 16 位字符,用于表示世界上大多数已知的书面语言。,1.2.2 数据类型,值类型内置类型字符型值类型内置类型布尔型布尔型只有true、false两个值,且不对应于任何整数值。,char chars=new char4;chars0=X;/Character literal chars1=x0058;/Hexadecimal chars2=(char)88;/Cas

20、t from integral type chars3=u0058;/Unicode foreach(char c in chars)Console.Write(c+);/Output:X X X X,1.2.2 数据类型,值类型枚举类型默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。enum Days Sat,Sun,Mon,Tue,Wed,Thu,Fri;也可以更改默认值。enum Days Sat=1,Sun,Mon,Tue,Wed,Thu,Fri;enum和整型之间的转换需要用显式类型转换来完成,即使用强制转换。int x=(int)Days.Sun;或 x=Con

21、vert.ToInt32(Days.Sun);注:Convert可以转换字符串。【例1-3】定义一个职称枚举类型,输出类型中所有枚举常量。,1.2.2 数据类型,值类型结构类型用 struct 关键字定义的,如:public struct PostalAddress/Fields,properties,methods and events go here.结构与类共享大多数相同的语法。但结构是值类型,类是引用类型,且结构不支持继承。,1.2.2 数据类型,值类型结构类型【例1-4】结构与类的比较(即值类型与引用类型的比较)。,public struct MyStruct public int

22、a;public void Output()Console.WriteLine(结构成员 a=0,a);class Program static void Main()MyStruct x;x.a=100;x.Output();,1.2.2 数据类型,引用类型和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的地址(引用)。引用类型包括:object、string、数组、类、接口、委托等。其内容在后续的章节中介绍。object类是.net 类型层次结构的根,所有类型(用户定义类型、引用类型和值类型)均是直接或间接从 object 继承的。因为它是所有类型的基类,所以可把任何类

23、型的值赋给它,例如:object theObj=123;即:装箱(值类型 Object类型)拆箱(Object类型 值类型),1.2.3 数据类型转换,分为:隐式转换和显式转换隐式转换:系统默认,不需要加以说明。需要注意的是:字符类型:可以隐式转换为整型或浮点型,但不存在其他类型到字符类型的隐式转换。数值类型:低精度类型可以隐式转换为高精度类型,反之会出现异常。在浮点型和decimal类型之间不存在隐式转换,因此,这两种类型之间必须使用显示转换。,ushort destinationVar;char sourceVar=a;destinationVar=sourceVar;Console.Wr

24、iteLine(sourceVar val:+sourceVar);Console.WriteLine(destinationVar val:+destinationVar);,1.2.3 数据类型转换,隐式转换,1.2.3 数据类型转换,显式转换:即强制转换,需要指定要转换到的类型。方法一:(类型名称)变量名称;注:如不强制转换则程序出现编译错误。,double x=1234.7;int a;/Cast double to int.a=(int)x;System.Console.WriteLine(a);,1.2.3 数据类型转换,显式转换方法一:(类型名称)变量名称;,int source

25、Var=7;byte targetVar;targetVar=(byte)sourceVar;Console.WriteLine(32位有符号整数:0,sourceVar);Console.WriteLine(8位无符号整数:0,targetVar);,1.2.3 数据类型转换,显式转换方法一:(类型名称)变量名称;此时出现溢出现象,可采用checked(expression)检查。,int sourceVar=281;byte targetVar;targetVar=(byte)sourceVar;Console.WriteLine(32位有符号整数:0,sourceVar);Console

26、.WriteLine(8位无符号整数:0,targetVar);,1.2.3 数据类型转换,显式转换方法二:使用System.Convert类,可以检查溢出。,*,【例1-5】float a=15.5f;int b=(int)a;/截断double c=a;int d=Convert.ToInt32(a);/四舍五入Console.WriteLine(转换类型前变量 a 的值为:0,a);Console.WriteLine(显式转换为 int 类型后的值为:0,b);Console.WriteLine(隐式转换为 double 类型后的值为:0,c);Console.WriteLine(使用C

27、onvert类ToInt32方法转换int类型后的值为:0,d);char e=a;byte f=Convert.ToByte(e);Console.WriteLine(字符a使用Convert类ToByte方法转换为byte类型的值为:0,f);string value=124;/Convert可以转换字符串为数值型Console.WriteLine(字符串124使用Convert类ToInt32方法转换为int类型的值为:0,Convert.ToInt32(value);,1.2.3 数据类型转换,1.2.4 常量和变量,符号常量变量命名规范Hungarian notation(匈牙利命名

28、法):在组成变量的单词前,加上小写字母、下划线作为前缀,以识别变量的作用域、类型等。如:m_strLastName(表示类的成员变量)strLastName(表示函数内的局部变量)camelCase(骆驼命名法):组成变量的单词中,除第一个单词首字母小写外,其余单词首字母大写。如:lastNamePascalCase(帕斯卡命名法):组成变量的每个单词的首字母大写。如:LastNameMicrosoft建议:简单变量使用camelCase,函数等使用PascalCase。,const int speedLimit=55;const double pi=3.1415926535897932384

29、6264338327950;,1.2.5 装箱与拆箱,装箱(boxing):装箱是值类型到 object 类型或到某一引用类型的隐式转换。对值类型进行装箱会在堆栈中创建对象变量,并将该值复制到对象变量指向的堆中。,int i=123;object o=(object)i;/boxing,1.2.5 装箱与拆箱,装箱(boxing):装箱是值类型到 object 类型或到某一引用类型的隐式转换。对值类型进行装箱会在堆栈中创建对象变量,并将该值复制到对象变量指向的堆中。,class TestBoxing static void Main()int i=123;object o=i;/Implici

30、t boxing i=456;/Change the contents of i System.Console.WriteLine(The value-type value=0,i);System.Console.WriteLine(The object-type value=0,o);/*Output:The value-type value=456 The object-type value=123*/,1.2.5 装箱与拆箱,拆箱(unboxing):是从 object 类型或某一引用类型到值类型的显式转换。操作包括:检查对象变量,以确保其指向的装箱值是需转换的值类型.将该值从对象变量中

31、复制到值类型变量中。,int i=123;/a value type object o=i;/boxing int j=(int)o;/unboxing,1.2.6 运算符,根据运算类型,常用运算符可以分为以下几类:算术运算符赋值运算符关系运算符逻辑运算符位运算符,1.2.6 运算符,算术运算符,1.2.6 运算符,赋值、复合赋值运算符,1.2.6 运算符,关系运算符,1.2.6 运算符,逻辑运算符,1.2.6 运算符,位运算符(二进制运算)【例】,int x=4,y=5,z;z=x,1.2.6 运算符,运算符优先级,1.3 控制语句,分支结构ifelse语句switch语句循环结构while

32、语句dowhile语句for语句foreach语句,1.3.1 分支结构,ifelse语句,if(result=true)Console.WriteLine(The variable is set to true.);else Console.WriteLine(The variable is set to false.);,if(x 10)if(y 20)Console.Write(Statement_1);else Console.Write(Statement_2);,if(Condition_1)/Statement_1;else if(Condition_2)/Statement_2

33、;else if(Condition_3)/Statement_3;else/Statement_n;,1.3.1 分支结构,switch语句,int caseSwitch=1;/输入caseSwitch switch(caseSwitch)case 1:Console.WriteLine(Case 1);break;case 2:Console.WriteLine(Case 2);break;default:Console.WriteLine(Default case);break;,int n;/输入n值switch(n)case 1:case 2:case 3:Console.Write

34、Line(Its 1,2,or 3.);break;default:Console.WriteLine(Not sure what it is.);break;,1.3.2 循环结构,while语句dowhile语句,int n=1;while(n 6)Console.WriteLine(Current value of n is 0,n);n+;,int x=0;do Console.WriteLine(x);x+;while(x 5);,1.3.2 循环结构,for语句for(初始值;循环条件;更新值)循环体,for(int i=1;i 10;i+)for(int j=1;j=i;j+)C

35、onsole.Write(0*1=2,-2,i,j,i*j);/-2是占位符 Console.WriteLine();,1.3.2 循环结构,foreach语句用于集合类元素的枚举,如数组、字符串、列表、队列、堆栈等。foreach(数据类型 变量 in 集合表达式)循环体;主要用于元素值的读,不建议用于元素值的更改以避免产生不可预知的副作用。,1.3.2 循环结构,foreach语句,int fibarray=new int 0,1,2,3,5,8,13;foreach(int i in fibarray)System.Console.WriteLine(i);,string S=欢迎光临青

36、岛;foreach(char a in S)System.Console.WriteLine(a);,for(int i=0;i S.Length;i+)System.Console.WriteLine(Si);,1.3.2 循环结构,循环终止语句break语句 用于终止所在循环或所在的 switch 语句。continue语句 用于终止本次循环,开始下一次循环。,1.4 数组,按照数组的维数,数组可分为三类:一维数组多维数组交错数组,1.4.1 一维数组,声明方法:数据类型 数组名;注:数组为引用类型,在使用前必须先分配空间。可以在声明数组时进行初始化:或初始化的简化形式:,int arra

37、y=new int5;string stringArray=new string6;,int array=new int 1,3,5,7,9;string weekDays=new string Sun,Mon,Tue,Wed,Thu,Fri,Sat;,int array=1,3,5,7,9;string weekDays=Sun,Mon,Tue,Wed,Thu,Fri,Sat;,1.4.1 一维数组,可以在声明数组变量时不为其分配空间,当在程序中将数组分配给此变量时必须使用 new 运算符。,int array;string weekDays;array=new int 1,3,5,7,9;

38、/OK/array2=1,3,5,7,9;/Error weekDays=new string Sun,Mon,Tue,Wed,Thu,Fri,Sat;,1.4.1 一维数组,数组元素的遍历for形式for(int i=0;i数组名.length;i+)/can use 数组名i for each elementforeach形式foreach(类型 变量 in 数组名)/can use 变量 for each element,1.4.2 多维数组,声明:声明时初始化:如果声明一个数组变量时不为其分配空间,在程序中必须先使用 new 运算符将一个数组分配给此变量:,int,array=new

39、int4,2;int,array1=new int2,2,3;,int,array2D=new int,1,2,3,4,5,6,7,8;int,array3D=new int,1,2,3,4,5,6,7,8,9,10,11,12;,int,array5;array5=new int,1,2,3,4,5,6,7,8;/OK/array5=1,2,3,4,5,6,7,8;/Error,1.4.2 多维数组,Array类的常用方法、属性使用方法:数组名.方法名()、数组名.属性名,【例1-6】二维数组的输出。,1.4.3 交错数组,交错数组:也称为“数组的数组”,交错数组是一维数组,且每个元素自身又

40、是一个一维数组。作为元素的数组无需为相同的大小。声明 或还需给各元素分配空间 或同时赋初值,int jaggedArray=new int3;,int jaggedArray;jagged=new int3;,jaggedArray0=new int5;jaggedArray1=new int4;jaggedArray2=new int2;,jaggedArray0=new int 1,3,5,7,9;jaggedArray1=new int 0,2,4,6;jaggedArray2=new int 11,22;,int jaggedArray=new int34;,1.4.3 交错数组,声明

41、时也可赋初值 或简化形式,int jaggedArray=new int new int 1,3,5,7,9,new int 0,2,4,6,new int 11,22;,int jaggedArray=new int 1,3,5,7,9,new int 0,2,4,6,new int 11,22;,int jaggedArray=1,3,5,7,9,0,2,4,6,11,22;,1.4.3 交错数组,/Declare the array of two elements:int arr=new int2;/Initialize the elements:arr0=new int5 1,3,5,

42、7,9;arr1=new int4 2,4,6,8;/Display the array elements:for(int i=0;i arr.Length;i+)System.Console.Write(Element(0):,i);for(int j=0;j arri.Length;j+)System.Console.Write(0,arrij);System.Console.WriteLine();,1.5 异常处理,程序存在两类错误:编译错误(build error)错误列表窗口调试工具(Debug)运行错误(runtime error):称为异常(exception)编译时无法预期的

43、错误,如数组越界、被 0 除等。TryCatchFinally结构,1.5 异常处理,调试方法设置断点(Break Point)、逐句跟踪、值跟踪(局部变量窗口、监视窗口)“局部变量”窗口:显示当前函数的局部变量“监视”窗口:自定义要监视的内容信息输出控制台输出:Console.Writeline();Debug的“输出”窗口:System.Diagnostics.Debug.Writeline();MessageBox.Show();,1.5 异常处理,TryCatchFinally结构将可能有异常的代码放入Try块中,并用Catch块捕捉和处理异常,Finally块放入相关的后处理代码。t

44、ry 块必须与 catch 或 finally 块一起使用,并且可以有多个 catch 块。,try/Code to try here.catch(SomeSpecificException ex)/Code to handle exception here.finally/Code to execute/after try(and possibly catch)here.,try/Code to try here.catch(SomeSpecificException ex)/Code to handle exception here.,try/Code to try here.finall

45、y/Code to execute after try here.,1.5 异常处理,TryCatchFinally 结构,static void Main()/Input for test purposes.Change values/to see exception handling behavior.int a=new 10,20,30,40;try a4=50;Console.WriteLine(元素值=0,a4);catch(IndexOutOfRangeException e)Console.WriteLine(数组越界.);/Console.WriteLine(e.Message

46、);,【例1-7】,1.5 异常处理,TryCatchFinally 结构执行过程:当 try 块中代码发生异常时停止执行。若存在 catch 块,则检查相应的异常类型是否匹配;如果没有 catch 块,则直接执行 finally 块。若存在多个 catch 块,则依次检查各异常类型是否匹配。若某个 catch 块匹配了异常类型,则执行其包含的代码;再执行 finally 块。若没有匹配的 catch 块,而 finally 块存在,则执行 finally 块代码。多个 catch 块的匹配顺序是从顶部到底部,但是,只执行最匹配的一个 catch 块。如果没有与任一指定异常类型的 catch

47、块相匹配,则执行不带异常类型的 catch 块(如果有的话)。因此应将最具体异常类型的 catch 块放在最前面。,1.5 异常处理,TryCatchFinally 结构,static void Main()System.IO.StreamReader sr=null;try sr=new System.IO.StreamReader(D:test.txt);Console.WriteLine(sr.ReadLine();catch(System.IO.FileNotFoundException ex)/put the more specific exception first System.Console.WriteLine(ex.Message);catch(System.IO.IOException ex)/then,put the less specific exceptions System.Console.WriteLine(ex.Message);catch(System.Exception ex)/put the most common exception last System.Console.WriteLine(ex.Message);finally/各块必须有括号,即使只有一条语句 sr.Close();/本例中,sr.Close()是错误的,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号