版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务4.1学生成绩计算程序设计
【任务目标】(1)掌握数组的声明和创建;(2)掌握一维数组的遍历;(3)掌握数组的排序、查找、比较等操作;(4)掌握多维数组的遍历和处理。【任务陈述】对学生成绩进行统计计算,参加考试的有6名学生,考试成绩分别为94.5、89.0、79.5、64.5、81.5、73.5,计算考试的总分数并保存大于考试平均分的成绩信息,将信息存入数组HighScore中。下一页返回任务4.1学生成绩计算程序设计
1.实现思路(1)打开Eclipse,创建一个类;(2)在类的main()方法中定义一个含有6个元素的整型数组;(3)给数组元素赋值;(4)通过循环完成数组元素相加求和;(5)输出总分,测试运行;(6)计算平均分avgscore;(7)通过getHighScore()方法获得高于平均分的分数信息;(8)最后通过visitAllArray()方法打印高于平均分的分数信息。上一页下一页返回任务4.1学生成绩计算程序设计
2.程序代码上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回任务4.1学生成绩计算程序设计
3.运行结果本任务的运行结果如图4-1所示。【知识储备】4.1.1一维数组1.数组的声明以及创建当处理一组相同数据类型的数据时,为了提高处理效率,需要一种高效的数据结构处理数据。数组是一种在内存中连续存储的、具有相同数据类型的随机存储结构,既可以顺序检索,也可以通过索引直接查找。简言之,数组是相同类型的数据按顺序组成的一种复合数据类型。上一页下一页返回任务4.1学生成绩计算程序设计
1)声明数组声明数组包括数组的名字、数组包含的元素的数据类型。声明一维数组有下列两种格式:格式一:数组元素类型数组名字[];格式二:数组元素类型[]数组名字;例如:floatscore[];double[]girl;charcat[];通过声明数组可以使程序知道,在内存空间中有一个连续的内存区域用于存储某种类型的数据,如上例中的floatscore[]表示在score[]数组中有多个float类型变量,但具体个数不明确。仅通过数组声明floatscore[]是不能在内存中创建出数组的,只能说明有一个float类型的数组名字是score。因此,还要对其分配数组元素空间以指明元素个数。上一页下一页返回任务4.1学生成绩计算程序设计
2)创建数组创建数组实际上就是为数组元素分配内存单元,形成一个数组对象,其使用的关键字与创建对象的关键字相同,均使用new关键字,创建一个数组分为如下步骤:第1步:数组元素类型数组名字[];第2步:数组名字=new数组元素的类型[数组元素的个数];将声明与创建两步合并为一步来完成数组创建的格式如下:数组元素类型数组名字[]=new数组元素的类型[数组元素的个数];上一页下一页返回任务4.1学生成绩计算程序设计
例如:要记录存储4天每天的最高温度,可以先声明一个float类型、名为dayMaxTemperature的数组,然后通过new关键字创建4个连续的float类型的数组元素空间。代码片段如下:也可以合并为一条语句:上一页下一页返回任务4.1学生成绩计算程序设计
2.数组的使用及初始化创建数组之后,可以使用数组索引或下标,下标表示元素在数组中的位置,数组使用的格式如下:例如:floatscore[];score=newfloat[4];score[0]=78.9f;声明数组仅仅是给出了数组名字和元素的数据类型,要使用数组必须为数组分配内存空间,即创建数组。在为一维数组分配内存空间时必须指明数组的长度。上一页下一页返回任务4.1学生成绩计算程序设计
1)为数组分配内存空间并初始化的步骤第1步:数组元素类型数组名字[];第2步:数组名字=new数组元素的类型[数组元素的个数];第3步:数组名字[下标]=初值;2)简化格式数组元素类型数组名字[]={数据1,…,数据m};以上格式的语句未指定数组长度,但通过数据个数可知数组长度是m。例如:以上语句可简化为:floatscore[]={78.9f,80.4f,89.0f,88.5f};上一页下一页返回任务4.1学生成绩计算程序设计
实例4-1:声明并创建存放4个人的考试成绩的一维数组并打印。代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
该程序的输出结果如图4-2所示。3.数组的遍历和排序1)数组的遍历数组的遍历是指使用循环语句获取数组中的每一个元素,通过下标来控制访问具体元素。为了便于访问数组,Java提供了一维数组长度的获取方法,即“数组名.length”,返回数组的长度。上一页下一页返回任务4.1学生成绩计算程序设计
实例4-2:使用数组score保存4个考试成绩并使用for循环语句遍历该数组。代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
该程序的运行结果如图4-3所示。一维数组的遍历比较简单,只要控制一个数组下标就能遍历整个数组,二维数组的遍历要逐行进行循环处理,在每行中使用一维数组的遍历方法,即一一访问每行的列元素,直到所有行访问完毕为止。2)数组的排序数组的排序是按照关键字的大小将数组重新排列,将其变为按关键字由小到大或者由大到小排列。冒泡排序方法的过程是将待排序的数据存放在数组中,自后向前依次两两相互比较,如果后者比前者小,则交换顺序,一直比较到第一个位置,即可将数据序列的第一个最小的数据选出并放在第一个位置。在剩余的数列(除第一个位置外的数据)中再自后向前按上述方法比较,直到整个数列有序为止。上一页下一页返回任务4.1学生成绩计算程序设计
实例4-3:利用简单的冒泡排序,按关键字由小到大排列一组整数。代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回任务4.1学生成绩计算程序设计
该程序的运行结果如图4-4所示。4.使用java.util.Arrays类处理数组java.util包含许多常用的类,Arrays类就是其中的一个,Arrays类提供了数组的一些常用的方法,如排序、查找等。(1)publicstaticvoidsort(数值类型[]a):对指定的数值型数组按数字升序进行排序。在数组排序中设计一个简单的冒泡排序程序进行排序,但Java在工程化设计中经常采用Arrays类的sort()方法来进行排序。该排序算法是一个经过调优的快速排序法,执行效率高,且实施方便快捷,使开发人员很容易实现排序任务。上一页下一页返回任务4.1学生成绩计算程序设计
实例4-4:对无序的10个数字使用Arrays类的sort()方法进行排序。代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
该程序的运行结果如图4-5所示。注意:有序数组对数据的查找效率很高,如果一组有序序列需要频繁查找而较少更新,则建议用有序数组结构,比如输入法中拼音字库中字或词的查找等。(2)publicstaticintbinarySearch(数组,关键字):使用二分搜索算法搜索指定的数值型数组,以获得指定的值。调用该方法前必须对数组进行排序,否则结果不正确。实例4-5:对给定的有序数字序列,使用Arrays类提供的二分搜索算法实现给定关键字的查找。上一页下一页返回任务4.1学生成绩计算程序设计
代码如下:该程序的输出结果如图4-6所示。上一页下一页返回任务4.1学生成绩计算程序设计
使用binarySearch二分搜索算法需先对数据进行排序,再将关键字的值与数组中间元素的值比较。如果小于中间值,则在前半部分继续执行搜索,否则,在后半部分继续搜索,反复进行上述过程,直到找到给定的关键字或未找到给定的关键字。经验:对于数组中的数据需要频繁进行插入、删除操作时,建议不要用数组处理,频繁地移动数据元素使效率降低。可以使用动态数组LinkedList类(在java.util包中),其提供了插入和删除的方法,且有较高的效率。上一页下一页返回任务4.1学生成绩计算程序设计
4.1.2二维数组二维数组和一维数组的使用方法类似。二维数组初始化的步骤如下:第1步:数组元素类型数组名字[][];第2步:数组名字=new数组元素的类型[行数][列数];第3步:数组名字[行下标][列下标]=初值;二维数组初始化的简化定义格式如下:完成二维数组的定义和初始化后,要遍历内容可使用“数组名[行下标].length”来获得每行的长度,使用嵌套循环完成二维数组的遍历,格式如下:上一页下一页返回任务4.1学生成绩计算程序设计
实例4-6:实现一个二维数组的转置,其操作过程是将二维数组表现的矩阵对应的每一个元素number[i][j]置为number[j][i]。转置操作如图4-7所示(对角线数据不变,还是1,5,9)。代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
该程序的运行结果如图4-8所示。上一页下一页返回任务4.1学生成绩计算程序设计
【任务实施】1.实施思路具体见【任务陈述】中的“实现思路”。2.程序代码具体见【任务陈述】中的“程序代码”。【任务拓展】在【任务实施】部分,解决问题的程序使用的是结构较简单的一维数组,在此介绍一个使用一维数组和二维数组的综合实例。上一页下一页返回任务4.1学生成绩计算程序设计
实例4-7:设计一个学生成绩管理系统,定义一个一维数组存储10名学生的名字,定义一个二维数组存储这10名学生的6门课(C程序设计、物理、英语、高数、体育、政治)的成绩。程序应具有下列功能:(1)按名字查询某位同学的成绩。(2)查询某个科目不及格的人数及学生名单。其中,存储学生的名字用字符串数组name表示,数据如下:{"a","b","c","d","e","f","g","h","i","l"}上一页下一页返回任务4.1学生成绩计算程序设计
存储学生各科成绩使用二维整数数组grade,数据如下:{{50,60,70,80,90,10},{40,90,80,60,40,70},{60,80,70,60,40,90},{50,60,70,80,90,10},{60,80,70,60,40,90},{60,70,80,90,70,70},{60,80,70,60,40,90}{60,80,70,60,40,90}{70,80,90,70,70,70},{60,80,70,60,40,90}上一页下一页返回任务4.1学生成绩计算程序设计
实现程序的核心代码如下:上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回任务4.1学生成绩计算程序设计
上一页下一页返回
该程序的运行结果如图4-9所示。任务4.1学生成绩计算程序设计
【任务实训】1.实训目的(1)掌握Java中数组的声明、创建、初始化和使用;(2)理解数组的复制。2.实训内容有一个数列{8、4、2、1、23、344、12},编辑实现以下功能:(1)循环输出数列的值;(2)求数列中所有数值的和;(3)现实猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含该数。上一页返回任务4.2天气预报的数据处理
【任务目标】(1)掌握字符串的长度、比较、连接、提取、查询;(2)掌握分割字符串、大/小写转化等操作的方法;(3)掌握StringBuffer对象的常用方法append()、delete()等;(4)理解String和StringBuffer的区别。【任务陈述】设计实现一个天气预报数据处理功能,能提供在线的信息编辑处理,比如插入、删除和修改,以及查找、替换等功能。对天气预报数据处理的要求为:(1)将每日的天气用字符串数组表示;(2)将每日的天气转为可编辑字符串数组表示;下一页返回任务4.2天气预报的数据处理
(3)将每日的天气的每个空格处替换为“,”,在日期前加序号,格式为“1、2、……”;(4)获得第5日夜间的温度。1.实现思路(1)打开Eclipse,创建一个类WeatherForecast;(2)声明一个String类的对象WeatherForecast;(3)利用String类的求长度、查找子字符串功能,并将天气预报的内容按天分为两个String对象;(4)用数组表示两个String对象;(5)利用String类实现查找、替换、获取长度等操作;(6)利用StringBuffer类实现追加和删除等操作。上一页下一页返回任务4.2天气预报的数据处理
2.程序代码上一页下一页返回任务4.2天气预报的数据处理
上一页下一页返回任务4.2天气预报的数据处理
上一页下一页返回任务4.2天气预报的数据处理
上一页下一页返回任务4.2天气预报的数据处理
3.运行结果本任务的运行结果如图4-10所示。【知识储备】4.2.1创建String字符串Java中的字符串是一连串的字符,与其他计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理。将字符串作为内置的对象处理,允许Java提供丰富的功能特性用于处理字符串。字符串是由字符组成的序列,用双引号括起来,Java语言提供了两种字符串类,一类是不可变的字符串String,另一类是可变的字符串StringBuffer。创建字符串的方式归纳起来有三种:上一页下一页返回任务4.2天气预报的数据处理
(1)第1种,使用new关键字创建字符串。例如:Strings1=newString("山东商业职业技术学院");(2)第2种,直接赋值方式。例如:Strings2="山东商业职业技术学院";(3)第3种,使用连接生成新的字符串。例如:Strings3="山东商业职业技术学院”+”信息技术学院";上一页下一页返回任务4.2天气预报的数据处理
4.2.2String类的常用操作String类包括求字符串长度、比较字符串、搜索字符串、提取子字符串等方法。String表示一个UTF-16格式的字符串。1.计算字符串长度使用length()方法获得字符串中字符的个数。例如:Stringtitle="山东商业职业技术学院";System.outprintln(title.Length());打印得到字符串的长度为:10。上一页下一页返回任务4.2天气预报的数据处理
2.比较两个字符串对象的内容使用equals(ObjectanObject)方法比较字符串与指定的对象,当且仅当参数不为NULL,且为与此对象相同的字符序列的String对象时,结果才为ture。例如:Stringtitle="山东商业职业技术学院";Stringtitle2="山东商业职业技术学院信息技术学院";System.out.println(titlel.equals(title2))打印输出结果为:false。上一页下一页返回任务4.2天气预报的数据处理
3.获得指定位置的字符使用charAt(intindex)方法返回指定索引处的char值,索引范围为0~字符串长度-1。序列的第1个char值在索引0处,第2个在索引1处,依此类推,与数组索引类似。例如:Stringtitle="山东商业职业技术学院信息技术学院";System.out.print(title.charAt(0));//输出字符ˈ山ˈSystem.out.print(title.charAt(title.length()-1);//输出字符ˈ院ˈ上一页下一页返回任务4.2天气预报的数据处理
4.返回字符串第一次出现的位置使用indexOf(Stringstr)方法可以返回第一次出现的指定子字符串在此字符串中的索引。例如:Stringtitle="山东商业职业技术学院信息技术学院";title.indexOf("商业");//得到"商业"字符串的位置是2上一页下一页返回任务4.2天气预报的数据处理
5.获取子字符串使用substring(intbeginIndex,intendIndex)方法可以返回一个新字符串,该新字符串是原字符串中的一个子字符串。例如:Stringtitle="山东商业职业技术学院信息技术学院";title.substring(11,15);//获得内容为"信息技术"的子字符串上一页下一页返回任务4.2天气预报的数据处理
6.拆分字符串使用split(Stringregex)方法按照给定的字符串拆分此字符串。例如:Stringtitle="山东商业职业技术学院信息技术学院"Stringdata[]=newString[2];Datatitle.split("");System.out.println(data[0]);System.out.println(data[1]);打印输出结果分别为“山东商业职业技术学院”和“信息技术学院”。上一页下一页返回任务4.2天气预报的数据处理
7.忽略前导空白和尾部空白使用trim()方法返回字符串的副本,忽略前导空自和尾部空白。Stringgreeting="你好!";Stringname="王先生";Stringtitle=greeting.trim()+name;//title为:你好!王先生上一页下一页返回任务4.2天气预报的数据处理
8.替换旧的字符为新字符方法replace(charoldChar,charnewChar)返回一个新的字符串,该新字符串通过用newChar替换此字符串中出现的所有oldChar得到。例如:Stringtitle="山东商业职业技术学院信息技术学院";title.replace("山","广");此时,title的值为"广东商业职业技术学院信息技术学院"。上一页下一页返回任务4.2天气预报的数据处理
9.StringBuffer对象的创建StringBuffer类和String类一样,也用于代表字符串,但StringBuffer类的内部实现方式不同,因此,StringBuffer类在进行字符串处理时不生成新的对象,在内存使用上要优于String类。在实际应用中,如果需要经常对一个字符串进行修改、插入、删除等操作,则使用StringBuffer类更加适合。但是对于StringBuffer对象的每次修改都会改变对象自身,这是它和String类的最大区别。StringBuffer类位于java.lang基础包中,使用StringBuffer类不需要特殊的导入语句。上一页下一页返回任务4.2天气预报的数据处理
4.2.3StringBuffer类的常用方法1.StringBuffer()StingBuffer()类的构造方法用于构造一个不包含字符的字符串缓冲区,其初始容量为16个字符,创建不包含任何文本的对象,默认的容量是16个字符。例如:StringBuffersb=newStringBuffer()2.StringBuffer(Stringstr)使用该方法构造一个字符串缓冲区,并将其内容初始化为指定的字符串。例如:StringBuffersb1=newStringBuffer("123");上一页下一页返回任务4.2天气预报的数据处理
3.append(Stringstr)该方法用于将指定的字符串追加到此字符串序列。例如:Stringuser="test";StringBuffersqlquery=newStringBuffer("select∗fromuserInfowhereusername=");Sqlquery.append(user);System.out.println(Sqlquery);打印输出结果为“select∗fromuserInfowhereusername=test”。上一页下一页返回任务4.2天气预报的数据处理
4.insert(intoffset,Stringstr)该方法用于将字符串插入字符序列中。例如:Stringtitle="山东信息技术学院”;Title.insert(2,"商业职业技术学院")此时,title的值为"山东商业职业技术学院信息技术学院"。5.toString()该方法用于返回此字符序列中数据的字符串表示形式。例如:StringBuffersb2=newStringBuffer(s);//String转换为StringBufferStrings1=sb.toString();//StringBuffer转换为Sring上一页下一页返回任务4.2天气预报的数据处理
6.replace(intoffset,Stringstr)该方法用于将从start开始到end-1结束的字符串替换为子字符串str。例如:Stringtitle="山东信息技术学院";title.replace(0,2,"深圳");System.out.print(title);打印结果为“深圳信息技术学院”。上一页下一页返回任务4.2天气预报的数据处理
7.substring(intstart,intend)该方法返回一个新的String,String包含此字符序列当前所包含的字符子序列。例如:StringBuffersbx4=newStringBuffer("helloworld!");System.out.printIn(sbx4.substring(6,11).toString());打印结果为“world”。上一页下一页返回任务4.2天气预报的数据处理
8.delete(intstart,intend)该方法用于移除此字符序列的子字符串。例如:StringBuffersbx1=newStringBuffer("TestString");Sbx1.delete(0,4);System.out.printIn(sbx1);打印结果为“String”。上一页下一页返回任务4.2天气预报的数据处理
【任务实施】1.实施思路String类提供了求长度、查找、替换、去掉首尾空格等方法。StringBuffer类提供了追加、删除和插入操作的方法。先定义一个变量存放字符串,然后使用字符串的相关方法实现,定义一个StringBuffer类型的变量用于编辑处理天气信息字符串。具体见【任务陈述】中的“实现思路”。2.程序代码具体见【任务陈述】中的“程序代码”。上一页下一页返回任务4.2天气预报的数据处理
【任务拓展】Java语言提供了专门用于分析字符串的类StringTokenizer(位于java.util包中)。String⁃Tokenizer类可以将字符串分解为独立使用的单词,语言符号之间由定界符(delim)或空格、制表符、换行符等典型的空白字符来分隔,其他字符也可以设定为定界符。1.StringTokenizer类的构造方法StringTokenizer类的构造方法StringTokenizer(Stringstr,Stringdelim)为字符串str构造一个字符串分析器,并使用字符串delim作为定界符。上一页下一页返回任务4.2天气预报的数据处理
2.StringTokenizer类的主要方法及功能(1)StringnextToken():用于逐个获取字符串中的语言符号(单词)。(2)booleanhasMoreTokens():用于判断所要分析的字符串中是否还有语言符号,如果有则返回ture,否则返回false。(3)intcountTokens():用于得到所要分析的字符串中一共含有多少个语言符号。上一页下一页返回任务4.2天气预报的数据处理
实例4-8:使用StringTokenizer统计单词的个数。代码如下:该程序的运行结果如图4-11所示。上一页下一页返回任务4.2天气预报的数据处理
【任务实训】1.实训目的(1)掌握Java中字符串的创建和使用方法;(2)熟悉字符串的常见操作及方法;(3)熟悉StringBuffer类的方法。2.实训内容(1)使用作业提交系统提交Java作业时,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效性检查。(2)编写程序实现对输入的Java源文件名以及邮箱有效性的检查。上一页返回任务4.3除法计算器程序设计
【任务目标】(1)理解异常的概念和用途;(2)掌握使用try-catch-finally语句结构的方法;(3)理解finally语句的用法。【任务陈述】编写一个除法计算器,要求程序在出现除数为零和除数、被除数中有一个不是数字的情况时进行相应的处理。当调用存放在数组中的计算结果时,数组有可能产生索引越界,对这种情况进行捕捉和处理。下一页返回任务4.3除法计算器程序设计
1.实现思路(1)打开Eclipse,创建一个类;(2)在类main()方法中输入两个数相除;(3)输入的两个数以及两个数相除会产生异常,对这段代码进行异常处理;(4)编写测试类,运行程序。上一页下一页返回任务4.3除法计算器程序设计
2.程序代码上一页下一页返回任务4.3除法计算器程序设计
上一页下一页返回任务4.3除法计算器程序设计
3.运行结果本任务的运行结果如图4-12所示。【知识储备】4.3.1异常的概念及其处理机制在生活中,发生异常时人们懂得如何处理,那么在Java程序中又是如何处理异常的呢?Java程序中的异常处理就像人们对平时可能会遇到的意外情况预先想好处理的办法。在程序执行过程中,如果发生异常,程序会按照预定的方法对异常进行处理,异常处理之后程序继续运行。异常处理的机制落实到具体的处理代码中有两种方式:①“捕捉异常”的异常处理方式:对受检异常、运行时异常均适用,捕捉异常的处理语句是try.
.
.catch结构;②“上报异常”的异常处理方式:对于当前的代码不能处理而产生的异常,将其交给调用它的上级进行处理。上一页下一页返回任务4.3除法计算器程序设计
4.3.2异常的分类Java程序中的异常分为系统异常和自定义异常。1.系统异常在Java的系统异常中,Throwable是系统异常的父类,其子类有Error和Exception。Error表示程序运行时发生较少的内部异常,程序无法处理;Exception是程序运行和环境产生的异常,可以捕获和处理。在开发中遇到的异常绝大部分是Exception异常,系统异常的分类如图4-13所示。上一页下一页返回任务4.3除法计算器程序设计
Java中的常见异常如下:(1)ArithmeticException:出现异常算术条件时产生;(2)NullPointerException:应用程序企图使用需要的对象为空时产生;(3)ArrayIndexOutOfBoundsException:数组下标越界时产生(4)ArrayStoreException:程序试图存储数组中错误的类型数据时产生;上一页下一页返回任务4.3除法计算器程序设计
(5)FileNotFoundException:试图访问的文件不存在时产生;(6)IOException:由一般I/O故障而引起,如读文件故障;(7)NumberFormatException:把字符串转换为数值型数据失败时产生;(8)OutOfMemoryException:内存不足时产生;上一页下一页返回任务4.3除法计算器程序设计
2.用户自定义异常Java内置的异常处理机制能够处理大多数常见的运行时的错误,用户也可以自定义异常来处理系统异常无法捕获的异常。4.3.3异常的捕获与处理异常的捕获处理方式主要是使用try.
.
.catch语句结构,将可能出现异常的语句置于try语句体中,当try语句体中的语句出现异常时,即停止当前程序的执行,转到catch语句体中执行异常处理语句。即try语句用于发现异常,而catch语句用于处理异常。上一页下一页返回任务4.3除法计算器程序设计
1.try.
.
.catch语句try.
.
.catch语句的格式如下:上一页下一页返回任务4.3除法计算器程序设计
实例4-9:输入一个整数并判断该整数是奇数还是偶数。代码如下:该程序的运行结果如图4-14所示。上一页下一页返回任务4.3除法计算器程序设计
2.多个catch语句当某个程序块中出现多个异常时,可以使用多个catch语句,每个catch语句捕获一种异常,捕获异常的顺序跟catch语句的顺序有关,当捕获到一个异常时,其他catch语句就不再进行匹配。实例4-10:从键盘输入一个double类型的数字,如果输入的不是double类型的数字则会产生异常。上一页下一页返回任务4.3除法计算器程序设计
代码如下:上一页下一页返回任务4.3除法计算器程序设计
该程序的运行结果如图4-15所示。上一页下一页返回任务4.3除法计算器程序设计
经验在排列cacth语句的顺序时,应该首先捕获最特殊的异常,然后再逐渐一般化,即先捕获子类异常,再捕获父类异常。3.finally语句不管try语句和catch语句中是否会出现异常,finally语句都会执行。finally语句是为异常处理事件提供的一个清理机制,通常用于关闭文件或释放其他系统资源。作为try.
.
.catch.
.
.finally语句结构的一部分,可以省略finally语句,如果存在finally语句,不论try语句中是否发生异常,是否执行过catch语句,都会执行finally语句。上一页下一页返回任务4.3除法计算器程序设计
实例4-11:从键盘接受一个整数数字,不论发生异常与否,都会执行finally语句。代码如下:该程序的运行结果如图4-16所示。上一页下一页返回任务4.3除法计算器程序设计
【任务实施】1.实施思路输入两个数并将两个数相除,在程序运行时,会产生异常的输入问题,如输入数中出现了字母、特殊符号等,则程序无法正确运行下去。本任务采用异常捕获和处理技术保证程序的健壮性。具体见【任务陈述】中的“实现思路”。2.程序代码具体见【任务陈述】中的“程序代码”。【任务拓展】在使用try.
.
.catch.
.
.finally语句结构处理异常时可以通过Exception对象追踪错误信息,以下是几种常用方法。(1)printStackTrace():追踪输出至标准错误流。上一页下一页返回任务4.3除法计算器程序设计
实例4-12:输入课程代号1~3,得到代号对应的课程。代码如下:程序的运行结果如图4-17所示。上一页下一页返回任务4.3除法计算器程序设计
(2)getStackTrace():返回堆栈跟踪元素的数组,每个元素表示一个堆栈帧。数组的第0个元素(假定数据的长度不为0)表示堆栈顶部,是序列中最后的方法调用,该方法可以输出详细异常,包括异常名称和出错位置,便于调试。(3)getMessage():返回该异常的消息字符串,该方法只获取具体的异常名称,如NullPoint空指针异常,则输出信息为空指针。【任务实训】1.实训目的(1)掌握Java的异常处理机制;(2)掌握运用try.
.
.catch.
.
.finally语句结构处理异常的方法。上一页下一页返回任务4.3除法计算器程序设计
2.实训内容编写一个类ExceptionTest,在main()方法中使try.
.
.catch.
.
.finally语句结构实现。(1)在try语句块中,编写两个数相除操作,相除的两个操作数要求程序运行时由用户输入;(2)在catch语句块中,捕获被0除所产生的异常,并输出异常信息;(3)在finally语句块中,输出一条语句。上一页返回任务4.4最大公约数计算器设计
【任务目标】(1)掌握自定义异常的创建和实现抛出的方法;(2)掌握throw()方法的使用;(3)掌握throws()方法的使用;(4)理解throws()和throw()方法的区别。【任务陈述】在数学计算或数字分析中,经常会遇到计算两个数的最大公约数的问题:输入两个正整数,当两个数字有一个不是正整数时会产生异常。当输入非整数数字时,也产生异常。输入无错误后,可计算两个数的最大公约数。下一页返回任务4.4最大公约数计算器设计
1.实现思路(1)打开Eclipse,创建一个类MaxFactor;(2)在类中定义一个方法,完成最大公约数的计算,声明该方法会抛出什么异常,同时在该方法内人为抛出一个异常对象;(3)在main()方法中调用定义的方法,并且捕获方法抛出的异常,并进行处理。上一页下一页返回任务4.4最大公约数计算器设计
2.程序代码上一页下一页返回任务4.4最大公约数计算器设计
上一页下一页返回任务4.4最大公约数计算器设计
上一页下一页返回任务4.4最大公约数计算器设计
3.运行结果本任务的运行结果如图4-18所示。上一页下一页返回任务4.4最大公约数计算器设计
【知识储备】4.4.1自定义异常Java内置的异常能够处理大多数常见的运行时错误。Java中,用户也可以自定义异常。自定义异常通过重载Exception类的构造方法实现。创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义。如果Java提供的系统异常类型不能满足程序设计的需求,则用户可以自己定义异常。用户自定义的异常类型必须是Throwable类的直接或间接子类。Java推荐用户自定义的异常类型以Exception为直接父类。创建用户自定义异常的格式如下:上一页下一页返回任务4.4最大公约数计算器设计
注解:(1)使用关键字extends继承异常类Exception,创建自定义异常类;(2)自定义异常类的构造方法中参数msg用于给自定义异常命名,super()方法用于为其父类赋标识值。实例4-13:定义一个自定义非整数异常。代码如下:上一页下一页返回任务4.4最大公约数计算器设计
4.4.2抛出异常在程序设计时有些异常系统无法判定,当逻辑条件满足某种特定情况时,则要主动(手动)抛出异常,即使用throw语句抛出异常。throw语句的基本格式如下:throw异常实例对象;其中,异常实例对象一定是Thowable类或其子类。例如:上一页下一页返回任务4.4最大公约数计算器设计
4.4.3上报异常如果某方法可以导致一个异常但不处理该异常,则可以使用throws语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人信息保护技术规范
- 大血管置换术后护理常规
- 铁路站场施工方案
- 2026年家具设计师考核试卷及答案
- 化工工程论证报告
- 公司项目竣工审计办法
- 2026年注册计量师职业资格考试题库及答案
- 护理查房基础流程解析
- 护理团队协作
- 丰臀手术预约指南
- 2026年复杂网络中的控制系统仿真研究
- 2025年5月浙江省水务集团下属企业招聘拟聘用人员(一)笔试历年难易错考点试卷带答案解析
- 雨课堂学堂在线学堂云《机械原理及设计(北京航空航天)》单元测试考核答案
- 2026年水土保持法知识题库及答案
- 2026年特种设备日管控周排查月调度记录表模板
- 2025年度中国铁路成都局集团有限公司招聘高校毕业生924人(一)笔试参考题库附带答案详解
- T组合复苏器使用技术
- 维修车辆登记制度规范标准
- 2025年昆山编外辅助性人员笔试及答案
- 《EJT 20197-2018低放可燃固体废物热解焚烧运行要求》专题研究报告深度
- TSMA0011-2020电力红外热像仪性能评估技术规范
评论
0/150
提交评论