版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块4
常用API和异常目标知识目标:技能目标:素质目标:了解API的概念熟悉常用的API熟悉包的概念理解异常的概念会使用常用的API处理实际问题会定义和使用包会在程序设计中处理异常培养学生善于使用工具的能力鼓励学生进行创新,推进我国软件产业的高质量发展任务4.1使用字符串类【任务导入】任务4.1使用字符串类从传说中的仓颉造字至今,中文字符有长达数千年的演化历史。文字是人类知识传承、文化延续的重要载体。无论古今,大量的数据、资料都以文字的形式记录保存。怎么能更快捷的处理字符?我们需要了解并熟悉String类,以及String类中处理字符串的各种API方法。掌握工具方法,能提高程序的开发效率。API(ApplicationProgrammingInterface,应用程序接口),是一些预先定义好的类和接口,用户可以根据功能需要直接使用,不需要理解内部的实现机制。任务4.1使用字符串类此外,Java为了更好的管理类和接口,将它们以包的形式组织起来,方便程序员的查找和使用。下面介绍几个常用包的名称和用途。java.lang包:java的语言包,是核心包,默认导入到用户程序,包含了基本数据类型的封装类、Object类,数学类,字符串类,系统和运行时类,操作类,线程类,错误和异常处理类等。java.io包:包含了输入输出功能的类和接口,主要用于数据的输入和输出。java.awt包:包含了绘图和图像类和接口,主要用于编写GUI程序。java.util包:包含了实用工具类和接口,如集合类、时间处理模式、日期时间工具等。包:包含了执行与网络有关的类,如Url,Scoket,Seversocket等。java.sql包:包含了处理数据库的相关类和接口。4.4.1String类
字符串就是一连串的字符。Java语言使用String类对字符串进行处理。String类存放在java.lang包中,使用时不需要导入这个包直接用就行。方法功能描述charcharAt(int
index)返回index指定索引处的字符,注意字符串中第一个字符索引是0,最后一个是length()-1。Stringconcat(String
str)将指定的字符串连接到该字符串的末尾。intcompareTo(StringotherString)对字符串内容按字典顺序进行大小比较,通过返回的整数值当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0。booleanendsWith(String
suffix)测试此字符串是否以指定的后缀结尾。booleanequals(Object
anObject)比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。intindexOf(String
str)返回指定子字符串第一次出现的字符串内的索引。任务1字符串类booleanisEmpty()仅当
length()为
0,
返回
true。intlength()返回此字符串的长度。Stringreplace(char
oldChar,char
newChar)返回新的字符串,是用newChar替换所有出现的oldChar
。StringreplaceAll(Stringregex,Stringreplacement)用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,将新的字符串返回。String[]split(String
regex)将此字符串用regex分割为几个字符串。booleanstartsWith(String
prefix)测试此字符串是否以指定的前缀开头。Stringsubstring(int
beginIndex,int
endIndex)返回一个字符串,从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回。StringtoLowerCase()
将所有在此字符
String使用默认语言环境的规则,转换为小写。StringtoUpperCase()
将所有在此字符
String使用默认语言环境的规则,转换为大写。Stringtrim()
返回一个字符串,其值为此字符串并删除任何前导和尾随空格。
publicclassDemo{publicstaticvoidmain(String[]args){//直接赋值创建String类对象Strings1="Java#programming";//使用new关键字创建String类对象Strings2=newString("Java");//小写转大写System.out.println("abc".toUpperCase());//大写转小写System.out.println("ABC".toLowerCase());//String类的equals方法判断字符串是否相等(区分大小写)System.out.println("abcd".equals("ABCD"));//String类的equals方法判断字符串是否相等(不区分大小写)System.out.println("abcd".equalsIgnoreCase("ABCD"));//按字母表顺序比较字符串:两个字符串相同,返回0;//字母顺序在参数中的字符串前,则返回小于0的数,否则返回大于0的数System.out.println("abcd".compareTo("abcd"));System.out.println("abcd".compareTo("wxyz"));System.out.println("wxyz".compareTo("abcd"));//获得某个子串在字符串中首次出现的位置,第一个位置为0System.out.println(s1.indexOf("prog"));//返回5任务1字符串类例4.1字符串String类的使用演示。任务1字符串类例4.1字符串String类的使用演示。//是否包含另一个字符串System.out.println("abcde".contains("bc"));//去除字符串头尾的空格Stringsource="abc123def";Stringstr=source.trim();System.out.println("去除空格前:"+source);System.out.println("去除空格后:"+str);//取字串,从第i个字符取到第k个字符(从0开始编号)System.out.println("取子串:"+"abcdefg".substring(1,4));//字符串替换Stringresult=s1.replaceAll("a","*");System.out.println(s1+"替换后的结果是:"+result);}}//其他类型数据转换为字符串的方法intlen=s1.length();//length方法用于获得字符串的个数StringsLen=String.valueOf(len);//int类型转换为字符串System.out.println(s1+"的长度是"+len);//使用指定的分隔符,拆分字符串,返回一个数组String[]parts=s1.split("#");//以#作为分隔符,拆分s1for(inti=0;i<parts.length;i++){System.out.println("拆分的第"+(i+1)+"部分是:
"+parts[i]);}练一练1、编写程序,统计"Constantdroppingwearsthestone"当中有多少个单词。2、编写程序,将"gdaib"全部修改成大写。4.1.2StringBuffer类StringBuffer类和String类都是用来处理字符串的,都位于java.lang包中,与String类不同的是,StringBuffer类的对象能够被多次的修改,并且不产生新的未使用对象,它主要用于设计创建和操作动态字符串,所以如果需要对字符串进行修改建议使用StringBuffer类。其主要API如下:方法功能描述StringBuffer()构造一个空的字符串缓冲区。StringBuffer(Stringstr)通过指定的字符串来构造StringBuffer对象。4.1.2StringBuffer类StringBufferreverse()将此字符序列倒置。StringBufferdelete(intstart,intend)移除指定范围中的字符。StringBufferdeleteCharAt(intindex)删除指定位置的字符StringBufferinsert(intoffset,Strings)在StringBuffer对象中插入内容,然后形成新的字符串StringBufferreplace(intstart,intend,Stringstr)使用给定String中的字符替换此序列的子字符串中的字符。voidsetCharAt(intindex,charch)修改对象中指定位置index位置的字符为新的字符ch。intlength()返回字符串的长度(字符数)试一试例4.2StringBuffer类的使用演示//直接赋值创建StringBuffer类对象 StringBuffers1=newStringBuffer(); StringBuffers2=newStringBuffer("Javaprogram");//获取字符串缓冲区的长度 System.out.println(s1.length()); System.out.println(s2.length()); //字符串缓冲区中添加内容 s2.append("andCprogram"); System.out.println(s2); //删除指定范围字符 s2.delete(0,4); System.out.println(s2); //修改指定范围字符 s2.replace(0,8,"c#"); System.out.println(s2); //将字符串进行逆序 s2.reverse(); System.out.println(s2);实战演练4-1:统计子串在母串中出现的次数编写程序,统计某一个子串在母串中出现的次数。例如,母串“abcgabcbcabccbabc”,子串“abc”在母串中出现的次数是4。输出结果,如图4.3所示。实战演练4-1:统计子串在母串中出现的次数【任务分析】(1)使用String类处理数据。(2)使用contains()方法,先判断子串是否在母串中存在,不存在直接返回0。如果存在,再使用indexof()方法获取子串在母串中第一次出现的位置,并计数。然后,除去刚才找到的子串,将剩下的串构造一个新的母串,继续寻找。任务4.2使用工具包【任务导入】任务4.2使用工具包程序除了要对字符串进行处理之外,也常常需要对数值型的数据做数学运算。生活和工作中,常常需要比较两个数的大小、三角函数运算等操作;也需要对时间日期进行比较。这些复杂的数学计算、时间比较的功能是否需要程序员自行编程实现呢?如何保证运算和比较的准确性?Java编程语言以工具包的形式,向程序员提供常用数学和日期运算的功能。在工作岗位上,我们也需要根据实际需求情况和软件特点,对使用频率高的功能点进行封装,提高软件的质量。1.常用的数学公式如何表示?2.如何生成随机数?3.能对日期做什么运算?【思考】4.2.1数学类java.lang.Math类是一个包含了两个数学常量和若干基本数学运算方法的类,是编写数学运算类程序时常用的类。4.2.1数学类方法声明功能描述abs()该方法用于计算绝对值sqrt()该方法用于计算方根ceil(a,b)该方法用于计算大于参数的最小整数floor()该方法用于计算小于参数的最小整数round()该方法用于计算小数进行四舍五入后的结果max()该方法用于计算两个数的较大值min()该方法用于计算两个数的较小值random()该方法用于生成一个大于0.0小于1.0的随机值sqrt()该方法用于计算开平方的结果pow()该方法用于计算指数函数的值试一试例4.1字符串String类的使用演示。ublicstaticvoidmain(String[]args){//输出常量ESystem.out.println(“Math.E=”+Math.E);//使用常量PI计算半径为2.3的圆面积System.out.println(Math.PI*2.3*2.3);//求两个数的最小值System.out.println(Math.min(4.0,5));//求两个数的最大值System.out.println(Math.max(4.0,5));//求数据的平方根System.out.println(Math.sqrt(9));//三角函数System.out.println(Math.sin(90*Math.PI/180));//输出0-100之间的一个随机数System.out.println((int)(Math.random()*100));}练一练1、使用数学类,计算90度的余弦值。2、产生100个50以内的随机整数。4.2.2日历类日历类Calendar(java.util包)提供了一系列关于时间的比较和操作的方法,通过它可以更方便的进行时间日期的计算。声明功能描述Calendar.YEAR表示年份Calendar.MONTH表示月份Calendar.DATE表示日期Calendar.WEEK_OF_YEAR表示当前年中的第几个星期Calendar.WEEK_OF_MONTH表示当前月中的第几个星期Calendar.DAY_OF_YEAR表示一年中的第几天Calendar.DAY_OF_MONTH表示一月中的第几天Calendar.DAY_OF_WEEK表示一个星期中的第几天Calendar.HOUR12小时制的小时Calendar.HOUR_OF_DAY24小时制的小时Calendar.MINUTE表示分钟Calendar.SECOND表示秒Calendar.MILLISECOND表示毫秒staticCalendargetInstance()使用默认时区和语言环境获取一个日历intget(intfield)获取日期中某个字段的信息voidset(intfield,intvalue)设置日历的某个字段信息voidadd(intfield,intamount)为某个字段添加/减少指定的值DategetTime()获取此刻日期对象longgetTimeInMills()获取此刻时间毫秒值试一试例4.4日历类常用功能演示。
publicstaticvoidmain(String[]args){ Calendarcalendar=Calendar.getInstance();//创建日历对象表示当前时间
System.out.println("当前的日期时间是:"+calendar.getTime()); System.out.println("年份是:"+calendar.get(Calendar.YEAR)); System.out.println("月份是:"+calendar.get(Calendar.MONTH)); System.out.println("日期是:"+calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("今天是星期:"+calendar.get(Calendar.DAY_OF_WEEK)); System.out.prinltn("时:"+calendar.get(Calendar.HOUR_OF_DAY)); System.out.println("分:"+calendar.get(Calendar.MINUTE)); System.out.println("秒:"+calendar.get(Calendar.SECOND)); //日期运算
calendar.add(Calendar.YEAR,1);//加1年
calendar.add(Calendar.MONTH,1);//加1个月 //日期比较
Calendarcalendar2=Calendar.getInstance(); System.out.println(pareTo(calendar2));System.out.println(calendar.before(calendar2));}【说明】4.2.2日历类Calendar类的get方法,会根据程序员提供的参数,返回不同的时间。这些参数以常数的形式,定义在Calendar类中,例如Calendar.YEAR表示年份、Calendar.MONTH表示月份。16Calendar.before(calendar2),calendar所表示的日期是否在calendar2之前,如果是,返回true。4Calendar.HOUR_OF_DAY获取小时值,0~23表示。3Calendar.DAY_OF_WEEK返回日历对象代表一周中的星期几。返回1表示星期天,返回2表示星期一,以此类推。2Calendar.MONTH返回的月份,是从0开始,即1月份其返回值为0,2月份返回值为1,以此类推。5CpareTo(calendar2)如果两个日期相同,返回0;如果calendar比calenda的日期要早,则返回小于0的数,否则返回大于0的数。例4.5JDK中,还提供了本地化的日期时间类,供程序员进行使用。publicstaticvoidmain(String[]args){LocalDateTimetoday=LocalDateTime.now();DateTimeFormatterfmt=DateTimeFormatter.ofPattern("yyyy-MM-dd");System.out.println(today.format(fmt));System.out.println("年份:"+today.getYear());System.out.println("月份:"+today.getMonth());System.out.println("日期:"+today.getDayOfMonth());System.out.println("调整后的月份:"+today.withMonth(2).getMonth());LocalDateTimestart=LocalDateTime.of(2022,1,1,0,0);LocalDateTimeend=LocalDateTime.of(2022,2,1,0,0);Durationd=Duration.between(start,end);System.out.println(d.toDays());Periodp=LocalDate.of(2022,1,1).until(LocalDate.of(2022,2,1));System.out.println(p.getMonths());}4.2.2日历类练一练编写程序,计算10天后的日期和时间。4.2.3格式化工具在应用程序的设计中,经常需要将系统默认的时间格式转化成自定义的格式,或者将自定义格式转化成系统格式。SimpleDateFormat类(java.text包)是Java中一个常用的日期格式类,该类用来对日期字符串进行解析和格式化输出。代码含义yyyy
4位年份,2021MMHH2位月份,01小时数(24小时制,18点)mm2位分钟数ss2位秒数SSS3位毫秒数ddhh2位日期,05小时数(12小时制,下午6点)试一试publicstaticvoidmain(String[]args)throwsException{//构造方法,括号内自定义的时间格式
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss:SSS"); Calendarcalendar=Calendar.getInstance();//获取当前时间 //日期时间转成特定格式的字符串
StringdateString=sdf.format(calendar.getTime()); System.out.println(dateString); //将字符串转换成日期对象
java.util.Datedatetime=sdf.parse("1990-01-2323:45:06:123"); System.out.println(datetime);}4.2.4包装类使用简单的基本数据类型,可以满足大多数的应用需求,但是它们不具备对象的性质,无法满足一些特殊的需求,这就需要包装类。Java语言对数据的处理,既提供了基本数据的简单类型,比如int,float,double,char等,又提供了相应的包装类,比如Integer,Float,Double等。基本数据类型所对应的包装类如下表:4.2.4包装类基本数据类型包装类boolean
BooleancharintCharacter
IntegerlongLongfloatFloatdoubleDoublebyteshortByteShort试一试publicstaticvoidmain(String[]args)throwsException{Characterc=’q’;charch=c.charValue();//返回字符变量if(Character.isUpperCase(ch)) System.out.println(“Thecharacter“+ch+”isuppercase!”);elseSystem.out.println(“Thecharacter“+ch+”islowercase!”);Integern=10;inti=Value();//获取int数值,将Integer对象转换成int类型System.out.println(i);Integera=Integer.valueOf(53);//将一个整数转换成Integer对象Integerb=Integer.valueOf(“123”);//将一个字符串转换成Integer对象intt=Integer.parseInt(“100”);//获取字符串所对应的十进制整数int类型System.out.println(t);}任务4.3处理异常【任务导入】任务4.3处理异常1.你在学习Java编程的过程中,是否出现过程序崩溃的情况?是什么原因导致了这些情况的出现?你是怎么解决的?
程序的运行环境、程序的代码都具有不确定性,测试能发现程序中的错误,但无法保
证整个程序是完全正确的。一旦程序运行出错,我们应该如何处理?【思考】2.Java的异常处理机制是什么?根据星期id,输出对应的中文信息。从控制台输入1~7之间的任一个数字,程序将根据输入的数字输出对应的中文星期信息。试一试
publicstaticvoidmain(String[]args){
System.out.print("请输入星期id(1至7之间的数字):");
Scannerin=newScanner(System.in);
intweekId=in.nextInt();//
从键盘输入整数
switch(weekId){
case1: System.out.println("星期一");break;
case2: System.out.println("星期二");break;
case3: System.out.println("星期三");break;
case4: System.out.println("星期四");break;
case5: System.out.println("星期五");break;
case6: System.out.println("星期六");break;
case7: System.out.println("星期天");break; default:
System.out.println("输入的不是1至7之间的数字");}}例4.7异常的产生。试一试如果用户没有按系统要求进行输入,例如输入字母“D”,则程序在运行时将会发生异常。4.3.2捕捉异常编程时,判断哪些代码有可能出现异常,将这些语句放入try语句块中。紧接着使用catch语句块,对可能产生的异常进行捕捉。try-catch语句:
publicstaticvoidmain(String[]args){
System.out.print("请输入星期id(1至7之间的数字):"); Scannerin=newScanner(System.in);
try{
intweekId=in.nextInt();//从键盘输入整数
switch(weekId){ case1: System.out.println("星期一");break;
//…..代码同案例4.7
case7: System.out.println("星期天");break; default:
System.out.println("输入的不是1至7之间的数字");
}
}catch(Exceptione){ System.out.println("输入的不是数字!"); e.printStackTrace();
} System.out.println("欢迎使用本软件!");}试一试例4.8try-catch语句的使用。根据星期id,输出对应的中文信息。从控制台输入1~7之间的任一个数字,程序将根据输入的数字输出对应的中文星期信息。练一练运行下面的程序,观察并分析输出结果。publicclassMakeException{ publicstaticvoidmain(String[]args){ Stringname=null; intage=18; try{ System.out.println("姓名长度是"+name.length());
System.out.println(name+"的年龄是"+age); }catch(Exceptione){ System.out.println("程序运行发生了异常,异常是"+e); } System.out.println("程序运行结束"); } }4.3.2捕捉异常try-catch语句块之后,还可以接finally语句块。无论try语句块中,是否发生异常、也无论异常是否有被catch语句块捕获,finally语句块中的代码总会被执行。try-catch-finally语句试一试publicstaticvoidmain(String[]args){Stringname=null;intage=18;try{System.out.println("姓名长度是"+name.length());System.out.println(name+"的年龄是"+age);`}catch(Exceptione){System.out.println("这是catch语句块。程序运行发生了异常,异常是"+e);}finally{System.out.println("这是finally语句块");}System.out.println("程序运行结束");}例4.10try-catch-finally语句的使用。4.3.2捕捉异常多重catch块程序中可能会发生各种各样的异常,使用多个catch语句块,捕捉可能产生的不同异常。异常发生后,程序会根据从上到下的顺序,检查异常类型和catch语句块中的异常类型是否匹配。如果匹配上,则执行对应的catch语句块内容,异常被捕获。捕获异常之后,其它的catch语句将被忽略。这里所说的类型匹配,是指代码运行时的异常类型,与catch语句块中异常类型相同或是其子类。试一试例4.11多个catch块。
publicstaticvoidmain(String[]args){ Scannerin=newScanner(System.in); try{ System.out.print("请输入总成绩:"); inttotal=in.nextInt();//从键盘输入总学时
System.out.print("请输入学科数量:"); intcourseCount=in.nextInt();//从键盘输入课程数目
System.out.println("平均成绩是:"+total/courseCount); }catch(InputMismatchExceptione1){ System.out.println("输入的不是数字!"); }catch(ArithmeticExceptione2){ System.out.println("学科数量不能为0!"); }catch(Exceptione){ System.out.println("异常是:"+e.getMessage());}}三角形的三条边通过键盘输入,输入的数值构不成三角形的话,需要重新输入。练一练抛出异常throw
1.抛出异常throw在编程的过程中,有的异常单靠当前的程序是无法恢复或者处理的。例如用户传入的参数错误、IO设备等硬件的异常。这种情况,我们可以通过trhow关键字,将异常继续抛出,交由功能的调用者去处理异常。试一试
classStudent{ privateStringphone; publicvoidsetPhone(Stringphone){ if(phone.length()==11){ this.phone=phone; }else{//如果电话号码长度小于11,则抛出异常
throwne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小区消防安全评估指南
- 安全生产典范企业讲解
- 2025-2026人教版小学二年级语文期末测试卷上
- 结构专业考试题及答案
- 2025-2026人教版三年级语文上学期卷
- 肠道菌群与NAFLD肝硬化PHG:MDT调节策略
- 2025-2026一年级语文上学期期末测试卷
- 肠狭窄术后腹腔感染的处理策略
- 肠梗阻合并糖尿病患者的血糖管理策略
- 卫生院执业监督管理制度
- 安全生产目标及考核制度
- (2026版)患者十大安全目标(2篇)
- 2026年北大拉丁语标准考试试题
- 临床护理操作流程礼仪规范
- 2025年酒店总经理年度工作总结暨战略规划
- 空气栓塞课件教学
- 2025年国家市场监管总局公开遴选公务员面试题及答案
- 肌骨康复腰椎课件
- 2025年10月自考04184线性代数经管类试题及答案含评分参考
- 2025年劳动保障协理员三级技能试题及答案
- 20以内加减法混合口算练习题1000道(附答案)
评论
0/150
提交评论