Java面向对象程序设计案例教程(第二版)习题答案_第1页
Java面向对象程序设计案例教程(第二版)习题答案_第2页
Java面向对象程序设计案例教程(第二版)习题答案_第3页
Java面向对象程序设计案例教程(第二版)习题答案_第4页
Java面向对象程序设计案例教程(第二版)习题答案_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE4 PAGE12习题1一、选择题1.Java语言具有的特点是(D)。A.面向对象 B.跨平台 C.安全 D.以上都正确2.Java语言的跨平台机制是由(B)实现的。A.JavaIDE B.JVM C.html D.GC3.Java源程序文件经过编译后产生的字节码文件的扩展名是(C)。A.exe B.java C.class D.html4.Java编译器会将Java源程序转换为(B)。A.可执行代码 B.字节码 C.机器代码 D.以上都不正确5.JDK安装成功后,(A)目录用于存放Java开发所需要的类库。A.lib B.bin C.demo D.jre6.编译Java程序后生成的面向JVM的字节码文件的扩展名是(B)。A..java程序文件名 B..classC..obj D..exe7.JavaSE的命令文件(java、javac、javadoc等)所在目录是(C)。A.%JAVA_HOME%\jre B.%JAVA_HOME%\libC.%JAVA_HOME%\bin D.%JAVA_HOME%\demo二、简答题1.Java语言有哪些特点?面向对象(Object-Oriented)跨平台性(平台无关性)安全性(Secure)健壮性(Robust)多线程支持(Multithreading)分布式支持(Distributed)高性能(HighPerformance)简单性(Simple)动态性(Dynamic)丰富的标准库(RichAPI)简述Java程序的开发过程。环境配置阶段源码编写阶段编译阶段运行阶段打包部署阶段调试优化阶段举例说明Java平台三个版本的不同应用场合。JavaSE(StandardEdition)核心应用场景:桌面应用示例:IDEA开发工具(基于Swing/JavaFX)技术栈:javafx图形库+jpackage打包工具命令行工具示例:Maven构建工具(纯Java实现)依赖:java.util集合框架+java.io文件操作基础服务端开发示例:SpringBoot单体应用技术栈:网络库+NIO非阻塞IOJavaEE(EnterpriseEdition,现JakartaEE)核心应用场景:分布式企业应用示例:银行交易系统(多模块协作)技术栈:EJB组件+JMS消息队列+JTA分布式事务Web服务开发示例:电商平台后端(高并发场景)技术栈:Servlet+JSP+JPA数据库访问微服务架构示例:Kubernetes管理的云服务技术栈:JakartaREST(JAX-RS)+CDI依赖注入JavaME(MicroEdition)核心应用场景:嵌入式设备示例:智能卡(SIM卡应用)技术限制:CLDC配置(≤512KB内存)功能手机应用示例:诺基亚贪吃蛇游戏技术栈:MIDP移动信息设备简表物联网终端示例:传感器数据采集(低功耗设备)协议支持:BluetoothLE+MQTT安装JDK后如何对JAVA_HOME、PATH环境变量进行设置?它们的作用是什么?一、环境变量设置步骤(以Windows为例)​​1.确定JDK安装路径默认安装路径通常为:C:\ProgramFiles\Java\jdk-<版本号>(如C:\ProgramFiles\Java\jdk-17)。2.配置JAVA_HOME​​打开系统环境变量​​:右键“此电脑”→属性→高级系统设置→环境变量。在“系统变量”中点击​​新建​​。​​变量名​​:JAVA_HOME​​变量值​​:JDK的安装路径(如C:\ProgramFiles\Java\jdk-17)。3.配置PATH在“系统变量”中找到Path→编辑→新建,添加以下两条路径:%JAVA_HOME%\bin(包含java.exe、javac.exe等可执行文件)%JAVA_HOME%\jre\bin(如果存在JRE目录,部分JDK版本可能不需要)4.验证配置打开命令提示符,运行:bash复制java-version#检查Java版本javac-version#检查编译器版本若显示版本号,则配置成功。二、环境变量的作用​​1.JAVA_HOME​​作用:指向JDK的安装根目录,作为其他工具(如Maven、Tomcat)识别JDK的基准路径。为什么需要它?​​许多开发工具和框架(如Gradle、Hadoop)依赖JAVA_HOME来定位JDK,而非直接使用PATH。2.PATH​​作用:将JDK的bin目录加入系统路径,使终端能直接运行java、javac等命令,而无需输入完整路径。为什么需要它?​​系统通过PATH查找可执行文件,配置后可在任意目录下使用Java命令。三、编程题1.通过Eclipse编写编写一个程序,在屏幕上输出“IloveJava!”。publicclassHelloJava{publicstaticvoidmain(String[]args){//输出"IloveJava!"到控制台System.out.println("IloveJava!");}}2.通过Eclipse编写求圆形面积的程序。importjava.util.Scanner;publicclassCircleArea{publicstaticvoidmain(String[]args){//创建Scanner对象用于接收用户输入Scannerscanner=newScanner(System.in);//提示用户输入半径System.out.print("请输入圆的半径:");doubleradius=scanner.nextDouble();//计算圆面积doublearea=Math.PI*radius*radius;//输出结果System.out.println("半径为"+radius+"的圆面积是:"+area);//关闭Scannerscanner.close();}}习题2一、选择题1.下列不属于简单数据类型的是(D)。A.整数类型 B.浮点数类型C.布尔类型 D.类2.下列(D)是合法标识符。A.2end B.-hello C.=AB D.day_73.下列(D)是合法的标示符。A.double B.3x$ C.str@ D.exam2e_ 4.表达式(11+3*8)/4%3的值是(B)。A.31 B.2 C.1 D.05.下列声明和赋值语句错误的是(C)。A.doublew=3.1415; B.Stringstrl="bye";C.floatz=6.74567; D.booleantruth=true;6.下列数据类型转换,必须进行强制类型转换的是(D)。A.byte→int B.short→longC.float→double D.long→int7.下面创建数组的正确语句是(ABD)。A.float

f[][]=new

float[6][6];

B.float

f[]=new

float[6];C.float

f[][]=new

float[][6];

D.float

[][]f=new

float[6][];8.数组a的第三个元素表示为(D)。A.a(3) B.a[3] C.a(2) D.a[2]9.关于数组作为方法的参数时,向方法传递的是(A)。A.数组的引用 B.数组的栈地址C.数组自身 D.数组的元素10.引用数组元素时,数组下标可以是(D)。A.整型常量 B.整型变量C.整型表达式 D.以上均可11.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为(B)。A.24 B.25 C.18 D.1712.下面程序的运行结果是(C)。main(){inta[][]={{1,2,3},{4,5,6}};System.out.print(a[1][1]);}A.3 B.4 C.5 D.6二、简答题1.Java的基本数据类型有哪些?(1)整数类型(IntegerTypes)字节型​短整型整型长整型(2)浮点类型(Floating-PointTypes)​单精度浮点双精度浮点(3)字符类型(CharacterType)​字符型(4)布尔类型(BooleanType)​布尔型float型常量和double型常量在表示上有什么区别?在Java中,float和double是两种不同的浮点数类型,它们在表示上的主要区别体现在字面量后缀、默认类型和精度/范围上。Java的循环有几种形式?它们的格式分别是什么?Java中的循环主要有三种基本形式:while循环​while(条件表达式){//循环体(条件为true时重复执行)}do-while循环​do{//循环体(至少执行一次)}while(条件表达式);//注意分号for循环​for(初始化语句;条件表达式;迭代语句){//循环体}4.数组下标的类型是什么?最小的下标是什么?一维数组a的第三个元素如何表示?数组下标的类型:通常是整数(int、size_t等),有些语言(如Python、JavaScript)也允许使用负数作为反向索引。最小的下标:在大多数语言(如C、C++、Java、Python、JavaScript等)中,数组的最小下标是0(即第一个元素的下标是0)。一维数组a的第三个元素的表示:如果数组的下标从0开始,第三个元素是a[2]。如果某些语言(如MATLAB、R)的下标从1开始,则第三个元素是a[3]。5.数组越界访问会发生什么错误?怎样避免该错误?数组越界访问会触发ArrayIndexOutOfBoundsException(运行时异常),导致程序中断(如果不捕获该异常)。避免方法:手动检查索引范围使用增强for循环(避免索引操作)捕获异常(不推荐作为主要手段)使用工具类方法使用集合类(如ArrayList)三、编程题1.有一个整数数组,其中存放着序列1,3,5,7,9,11,13,15,17,19。请将该序列倒序存放并输出。publicclassArrayReverser{publicstaticvoidmain(String[]args){//初始化数组int[]originalArray={1,3,5,7,9,11,13,15,17,19};//打印原始数组System.out.print("原始数组:");printArray(originalArray);//倒序数组int[]reversedArray=reverseArray(originalArray);//打印倒序后的数组System.out.print("倒序数组:");printArray(reversedArray);}//倒序数组的方法publicstaticint[]reverseArray(int[]array){int[]reversed=newint[array.length];for(inti=0;i<array.length;i++){reversed[i]=array[array.length-1-i];}returnreversed;}//打印数组的方法publicstaticvoidprintArray(int[]array){for(inti=0;i<array.length;i++){System.out.print(array[i]);if(i<array.length-1){System.out.print(",");}}System.out.println();}}2.编写一个程序,提示用户输入学生数量、姓名和他们的成绩,并按照成绩的降序来打印学生的姓名。importjava.util.Scanner;importjava.util.Arrays;importjava.util.Comparator;publicclassStudentGradeSorter{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);//1.获取学生数量System.out.print("请输入学生数量:");intstudentCount=scanner.nextInt();scanner.nextLine();//消耗换行符//2.创建学生数组Student[]students=newStudent[studentCount];//3.输入每个学生的信息for(inti=0;i<studentCount;i++){System.out.println("\n输入第"+(i+1)+"个学生的信息:");System.out.print("姓名:");Stringname=scanner.nextLine();System.out.print("成绩:");doublegrade=scanner.nextDouble();scanner.nextLine();//消耗换行符students[i]=newStudent(name,grade);}//4.按成绩降序排序Arrays.sort(students,newComparator<Student>(){@Overridepublicintcompare(Students1,Students2){//降序排列returnDpare(s2.getGrade(),s1.getGrade());}});//5.输出排序结果System.out.println("\n按成绩降序排列的学生:");System.out.println("");System.out.printf("%-15s%-10s%n","姓名","成绩");System.out.println("");for(Studentstudent:students){System.out.printf("%-15s%-10.2f%n",student.getName(),student.getGrade());}scanner.close();}}//学生类classStudent{privateStringname;privatedoublegrade;publicStudent(Stringname,doublegrade){=name;this.grade=grade;}publicStringgetName(){returnname;}publicdoublegetGrade(){returngrade;}}编写一个程序,获取数组的最大值和最小值。importjava.util.Arrays;importjava.util.Scanner;publicclassMinMaxFinder{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入数组的大小:");intsize=scanner.nextInt();int[]array=newint[size];System.out.println("请输入数组元素:");for(inti=0;i<size;i++){System.out.print("元素"+(i+1)+":");array[i]=scanner.nextInt();}//使用Java8StreamAPIintmax=Arrays.stream(array).max().getAsInt();intmin=Arrays.stream(array).min().getAsInt();System.out.println("\n数组元素:"+Arrays.toString(array));System.out.println("最大值:"+max);System.out.println("最小值:"+min);scanner.close();}}习题3一、选择题1.下列(D)是合法标识符。A.2end B.-hello C.=AB D.day_72.下列(D)是合法的标示符。A.double B.3x$ C.str@ D.exam2e_ 3.若x=5,y=8,则表达式x/y的值为(C)。A.3 B.13 C.0 D.54.表达式(11+3*8)/4%3的值是(B)。A.31 B.2 C.1 D.05.下列循环语句的循环次数是(A)。inti=5;do{System.out.println(i);i--;}while(i!=0);A.5 B.无限 C.0 D.16.下列哪个关键字用于跳出循环?(A)

A.

breakB.

continueC.

returnD.

exit二、简答题1.Java的循环有几种形式?它们的格式分别是什么?在Java中,循环结构主要有4种形式for循环for(初始化;循环条件;迭代语句){//循环体}while循环while(循环条件){//循环体}do-while循环do{//循环体}while(循环条件);增强for循环(for-each)for(数据类型变量名:数组/集合){//循环体}解释Java中的break和continue语句的区别。在Java中,break和continue都是用于控制循环流程的关键字,但它们的执行逻辑和用途有本质区别:break语句作用:立即终止当前所在的整个循环(for、while、do-while)或switch语句。循环或switch中剩余的代码和迭代不再执行,直接跳到循环/结构之后的代码。continue语句作用:跳过当前循环的剩余代码,直接进入下一次迭代(不终止整个循环)。仅适用于循环结构(不用于switch)。三、编程题1.编写一个程序,求1!+2!+…+20!的值。importjava.math.BigInteger;publicclassFactorialSumCalculator{publicstaticvoidmain(String[]args){//计算1!+2!+...+20!的和BigIntegersum=BigInteger.ZERO;System.out.println("计算1!+2!+...+20!的结果:");System.out.println("");for(inti=1;i<=20;i++){BigIntegerfactorial=calculateFactorial(i);sum=sum.add(factorial);//打印每一项的阶乘值System.out.printf("%2d!=%-30d%n",i,factorial);}System.out.println("");System.out.println("总和:"+sum);}//计算阶乘的方法publicstaticBigIntegercalculateFactorial(intn){if(n<0){thrownewIllegalArgumentException("阶乘数不能为负数");}BigIntegerresult=BigInteger.ONE;for(inti=1;i<=n;i++){result=result.multiply(BigInteger.valueOf(i));}returnresult;}}2.编写一个程序,输出100以内的全部素数。publicclassPrimeNumbers{publicstaticvoidmain(String[]args){System.out.println("100以内的素数:");for(inti=2;i<=100;i++){if(isPrime(i)){System.out.print(i+"");}}}//判断是否为素数的方法publicstaticbooleanisPrime(intnum){if(num<2)returnfalse;for(inti=2;i<=Math.sqrt(num);i++){if(num%i==0)returnfalse;}returntrue;}}3.编写一个程序,要求打印输出九九乘法表,效果如下所示:1*1=11*2=22*2=4,1*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81publicclassMultiplicationTable{publicstaticvoidmain(String[]args){//外层循环控制行数(1-9)for(inti=1;i<=9;i++){//内层循环控制每行的列数(1-i)for(intj=1;j<=i;j++){//格式化输出乘法算式System.out.printf("%d*%d=%-2d",j,i,j*i);}//每行结束后换行System.out.println();}}}4.编写一个程序,打印如下图形:****************************publicclassStarTriangle{publicstaticvoidmain(String[]args){//设置三角形的高度intheight=7;//外层循环控制行数for(inti=1;i<=height;i++){//内层循环控制每行星号的数量for(intj=1;j<=i;j++){System.out.print("*");}//每行结束后换行System.out.println();}}}

习题4一、选择题1.下面关于Java中类的说法哪个是不正确的(C)。A.类体中只能有变量定义和成员方法的定义,不能有其他语句B.构造方法是类中的特殊方法C.类一定要声明为public的,才可以执行D.一个java文件中可以有多个class定义2.类是具有相同(A)的集合,是对对象的抽象描述。A.属性和方法 B.变量和方法C.变量和数据 D.对象和属性3.main()方法的返回类型是(C)。A.boolean B.int C.void D.static4.void的含义是(D)。A.方法体为空 B.方法体没有意义C.定义方法时必须使用 D.方法没有返回值5.下面关于类和对象之间关系的描述,正确的是(C)。A.联接关系 B.包含关系C.具体与抽象的关系 D.类是对象的具体化6.下列哪个类声明是正确的(D)。A.publicvoidH1{…} B.publicclassMove(){…}C.publicclassvoidnumber{…} D.publicclassCar{…}7.定义类头时,不可能用到的关键字是(B)。A.class B.privateC.extends D.public8.以下(A)是专门用于创建对象的关键字。A.new B.doubleC.class D.int9.设ClassA为已定义的类名,下列声明ClassA类的对象ca的语句中正确的是(A)。A.ClassAca=newClassA(); B.publicClassAca=ClassA();C.ClassAca=newclass(); D.caClassA;10.利用方法中的(A)语句可为调用方法返回一个值。A.return B.backC.end D.以上答案都不对二、简答题1.类与对象的关系是什么?类与对象的关系是抽象与具体的关系2.如何定义一个类?类中包含哪几个部分?定义一个类语法格式:[访问修饰符]class类名[extends父类][implements接口1,接口2...]{//成员变量(属性)//构造方法//成员方法(行为)//代码块(可选)}一个类通常包含以下4个核心部分:成员变量(属性)构造方法成员方法(行为)代码块(可选)Java的访问限定修饰符有几种,各自的访问权限是什么?在Java中,访问限定修饰符用于控制类、成员变量、方法等的可见性范围,共有4种:public(公开)权限范围:最大被修饰的成员或类可以被任何其他类访问(无论是否在同一个包中)。(2)protected(受保护的)权限范围:同一包内的所有类+不同包中的子类。(子类通过继承访问父类的protected成员)。(3)默认(包私有,不写修饰符)权限范围:仅同一包内的类可以访问。不同包中的类(即使子类)无法访问。(4)private(私有)权限范围:最小仅当前类内部可以访问,其他类(包括子类)均不可见。三、编程题1.编写一个People类,要求如下:(1) People类的属性如下:name:String类对象,代表姓名;age:int类型,代表年龄;sex:char类型,代表性别;height:double类型,代表身高;(2) People类的方法如下:People(Stringn,inta,chars,doubleh):有参构造方法,形参表中的参数分别初始化姓名、年龄、性别、身高。Talk():能输出“你好”。Calculate():计算加法,使用return语句返回23 + 45的值。publicclassPeople{//属性定义privateStringname;privateintage;privatecharsex;privatedoubleheight;//有参构造方法publicPeople(Stringn,inta,chars,doubleh){=n;this.age=a;this.sex=s;this.height=h;}//Talk方法publicvoidTalk(){System.out.println("你好");}//Calculate方法publicintCalculate(){return23+45;}//测试主方法publicstaticvoidmain(String[]args){//创建People对象Peopleperson=newPeople("张三",25,'男',175.5);//调用Talk方法person.Talk();//调用Calculate方法并输出结果System.out.println("23+45="+person.Calculate());}}2.编写一个Point类,有x和y两个属性。再编写一个PointDemo类,并提供一个distance()方法用于计算两点之间的距离,实例化两个具体的Point对象并显示它们之间的距离。publicclassPoint{//属性privatedoublex;privatedoubley;//构造方法publicPoint(doublex,doubley){this.x=x;this.y=y;}//getter方法publicdoublegetX(){returnx;}publicdoublegetY(){returny;}//setter方法publicvoidsetX(doublex){this.x=x;}publicvoidsetY(doubley){this.y=y;}}publicclassPointDemo{//计算两点间距离的方法publicstaticdoubledistance(Pointp1,Pointp2){doubledx=p1.getX()-p2.getX();doubledy=p1.getY()-p2.getY();returnMath.sqrt(dx*dx+dy*dy);}publicstaticvoidmain(String[]args){//创建两个Point对象Pointpoint1=newPoint(1.0,2.0);Pointpoint2=newPoint(4.0,6.0);//计算并显示距离doubledist=distance(point1,point2);System.out.printf("点(%.1f,%.1f)和点(%.1f,%.1f)之间的距离是:%.2f",point1.getX(),point1.getY(),point2.getX(),point2.getY(),dist);}}习题5一、选择题1.下列不属于面向对象编程的3个特征的是(B)。A.封装 B.指针操作 C.多态 D.继承2.下列关于继承性的描述中,错误的是(C)。A.一个类可以同时生成多个子类B.子类继承父类除了private修饰之外的所有成员C.Java语言支持单重继承和多重继承D.Java语言通过接口实现多重继承3.下列对于多态的描述中,错误的是(C)。A.Java语言允许运算符重载B.Java语言允许方法符重载C.Java语言允许成员变量覆盖D.多态性提高了程序的抽象性和简洁性4.关键字super的作用是(D)。A.用来访问父类被隐藏的成员变量B.用来调用父类中被重载的方法C.用来调用父类的构造方法D.以上都是5.下列程序定义了一个类,关于该类,说法正确的是(D)。abstractclassAa{…}A.该类能调用Aa()构造方法实例化一个对象B.该类不能被继承C.该类的方法都不能被重载D.以上说法都不对6.下列关于接口的描述中,错误的是(B)。A.接口实际上是由常量和抽象方法构成的特殊类B.一个类只允许继承一个接口C.定义接口使用的关键字是interfaceD.在继承接口的类中通常要给出接口中定义的抽象方法的具体实现7.下面关于包的描述中,错误的是(A)。A.包是若干对象的集合 B.使用package语句创建包C.使用import语句引入包 D.包分为有名包和无名包两种8.如果java.abc.def中包含xyz类,则该类可记作(C)。A.java.xyz B.java.abc.xyzC.java.abc.def.xyz D.java.xyz.abc9.下列方法中,与方法publicvoidadd(inta){}不能构成重载方法的是(B)。A.publicvoidadd(chara) B.publicintadd(inta)C.publicvoidadd(inta,intb) D.publicvoidadd(floata)10.设有如下类的定义:publicclassparent{intchange(){}}ClassChildextendsParent{}则下面的方法可以加入Child类中的是(B)。A.publicintchange(){} B.finalintchange(inti){}C.privateintchange(){} D.abstractintchange(){}二、填空题1.2.接口是一种只含有抽象方法或(常量)的特殊抽象类。3.Java使用固定于首行的(package)语句来创建包。4.Java的多态性主要表现在(方法重载)、(方法重写)、(对象的多态)三个方面。5.没有子类的类称为(final类),不能被子类重载的方法称为(final方法),不能改变值的量称为(常量)。三、编程题1.建立一个汽车Auto类,包括轮胎个数、汽车颜色、车身重量、速度等成员变量,并通过不同的构造方法创建实例。至少要求:汽车能够加速、减速、停车。再定义一个小汽车类Car,继承Auto,并添加空调、CD等成员变量,覆盖加速、减速的方法。publicclassAuto{//成员变量protectedinttireNum;//轮胎个数protectedStringcolor;//汽车颜色protecteddoubleweight;//车身重量(kg)protecteddoublespeed;//当前速度(km/h)//构造方法1-无参构造publicAuto(){this.tireNum=4;this.color="白色";this.weight=1500;this.speed=0;}//构造方法2-带参数构造publicAuto(inttireNum,Stringcolor,doubleweight){this.tireNum=tireNum;this.color=color;this.weight=weight;this.speed=0;}//加速方法publicvoidspeedUp(doubleincrement){this.speed+=increment;System.out.println("汽车加速至"+this.speed+"km/h");}//减速方法publicvoidspeedDown(doubledecrement){if(this.speed-decrement<0){this.speed=0;}else{this.speed-=decrement;}System.out.println("汽车减速至"+this.speed+"km/h");}//停车方法publicvoidstop(){this.speed=0;System.out.println("汽车已停止");}//显示汽车信息publicvoiddisplayInfo(){System.out.println("汽车信息:轮胎数="+tireNum+",颜色="+color+",重量="+weight+"kg"+",当前速度="+speed+"km/h");}}publicclassCarextendsAuto{//新增成员变量privatebooleanhasAC;//是否有空调privatebooleanhasCD;//是否有CD播放器//构造方法1-无参构造publicCar(){super();//调用父类无参构造this.hasAC=true;this.hasCD=true;}//构造方法2-带参数构造publicCar(inttireNum,Stringcolor,doubleweight,booleanhasAC,booleanhasCD){super(tireNum,color,weight);//调用父类有参构造this.hasAC=hasAC;this.hasCD=hasCD;}//覆盖加速方法(小汽车加速更快)@OverridepublicvoidspeedUp(doubleincrement){this.speed+=increment*1.2;//小汽车加速能力增强20%System.out.println("小汽车快速加速至"+this.speed+"km/h");}//覆盖减速方法(小汽车减速更灵敏)@OverridepublicvoidspeedDown(doubledecrement){if(this.speed-decrement*1.5<0){//小汽车制动能力增强50%this.speed=0;}else{this.speed-=decrement*1.5;}System.out.println("小汽车灵敏减速至"+this.speed+"km/h");}//新增方法-打开空调publicvoidturnOnAC(){if(hasAC){System.out.println("空调已打开");}else{System.out.println("本车无空调功能");}}//新增方法-播放CDpublicvoidplayCD(){if(hasCD){System.out.println("正在播放CD音乐");}else{System.out.println("本车无CD播放器");}}//覆盖显示信息方法@OverridepublicvoiddisplayInfo(){super.displayInfo();//先调用父类方法System.out.println("附加信息:空调="+(hasAC?"有":"无")+",CD播放器="+(hasCD?"有":"无"));}}publicclassAutoTest{publicstaticvoidmain(String[]args){//测试Auto类System.out.println("===测试Auto类===");Autotruck=newAuto(6,"蓝色",3000);truck.displayInfo();truck.speedUp(30);truck.speedDown(10);truck.stop();System.out.println("\n===测试Car类===");//测试Car类CarmyCar=newCar(4,"红色",1200,true,false);myCar.displayInfo();myCar.speedUp(30);//调用覆盖后的加速方法myCar.speedDown(20);//调用覆盖后的减速方法myCar.turnOnAC();myCar.playCD();myCar.stop();}}2.已知一个抽象类AbstractShape如下所示:abstractclassAbstractShape{finaldoublePI=3.14;publicabstractdoublegetArea();publicabstractdoublegetGirth();}编写AbstractShape类的一个子类,使该子类实现计算圆面积的方法getArea()和计算周长的方法getGirth()。publicclassCircleextendsAbstractShape{privatedoubleradius;//构造方法publicCircle(doubleradius){this.radius=radius;}//实现计算圆面积的方法@OverridepublicdoublegetArea(){returnPI*radius*radius;}//实现计算圆周长的方法@OverridepublicdoublegetGirth(){return2*PI*radius;}//获取半径publicdoublegetRadius(){returnradius;}//设置半径publicvoidsetRadius(doubleradius){this.radius=radius;}}publicclassTestCircle{publicstaticvoidmain(String[]args){Circlecircle=newCircle(5.0);System.out.println("圆的半径:"+circle.getRadius());System.out.println("圆的面积:"+circle.getArea());System.out.println("圆的周长:"+circle.getGirth());}}习题6一、选择题1.Java中用来抛出异常的关键字是(C)。A.try B.catch C.throw D.finally2.(A)类是所有异常类的父类。A.Throwable B.Error C.Exception D.AWTError3.在Java语言中,异常处理的出口是(C)。A.try{…}子句 B.catch{…}子句C.finally{…}子句 D.以上说法都不对4.当方法遇到异常又不知如何处理时,下列说法正确的是(B)。A.捕获异常 B.声明异常 C.抛出异常 D.嵌套异常5.自定义异常类时,可以继承的类是(C)。A.Error B.AppletC.Exception及其子类 D.AssertionError6.在异常处理中,将可能抛出异常的方法放在(C)语句块中。A.throws B.catch C.try D.finally7.对于try{……}catch子句的排列方式,下列正确的一项是(A)。A.子类异常在前,父类异常在后 B.父类异常在前,子类异常在后C.只能有子类异常 D.父类异常与子类异常不能同时出现8.下面程序段的执行结果是(B)。publicclassFoo{publicstaticvoidmain(String[]args){try{return;}finally{System.out.println("Finally");}}}A.编译能通过,但运行时会出现一个例外B.程序正常运行,并输出

“Finally引号?撇号?双引号”引号?撇号?双引号C.程序正常运行,但不输出任何结果D.因为没有catch语句块,所以不能通过编译二、填空题1.捕获异常要求在程序的方法中预先声明,在调用方法时用try-catch-(finally)语句捕获并处理。2.Throwable类有两个子类:(Error)类和Exception类。3.Java虚拟机能自动处理(非受检)异常。4.抛出异常,生成异常对象都可以通过(throw)语句实现。三、编程题编写一个程序,从键盘读入5个整数存储在数组中,要求在程序中处理数组越界的异常。importjava.util.Scanner;publicclassArrayInputWithExceptionHandling{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);int[]numbers=newint[5];//定义一个长度为5的数组System.out.println("请输入5个整数:");try{//循环读取5个整数for(inti=0;i<6;i++){//故意越界(i<6而不是i<5)System.out.print("请输入第"+(i+1)+"个整数:");numbers[i]=scanner.nextInt();}}catch(ArrayIndexOutOfBoundsExceptione){System.err.println("错误:数组越界!您输入的数字超过了数组容量(5个)。");}catch(Exceptione){System.err.println("错误:输入无效,请输入整数!");}finally{scanner.close();//关闭Scanner}//打印输入的数组(如果未越界)System.out.println("\n您输入的数组内容:");for(inti=0;i<numbers.length;i++){System.out.println("numbers["+i+"]="+numbers[i]);}}}习题七一.选择题1.Strings="abcdedcba";,则s.substring(3,5)返回的字符串是__B__。A.cd B.de C.cde D.ded 2.下面程序段的输出结果是__B__。StringBuffersb=newStringBuffer("Beijing2022");sb.insert(7,"@");System,out.printin(sb.toString());A.Beijing2022 B.Beijing@2022C.@Beijing2022 D.Beijing2022@ 3.下列程序段的输出结果是__A__。Strings="ABCD";s.concat("E");s.replace("C","F");System.out.printin(s);A.ABCD B.ABCDE C.ABFDE D.EABFD 4.语句System.out.println("ABCD".concat("E").replace("C","F"));的输出结果是__C__。A.ABCD B.ABCDE C.ABFDE D.EABFD 5.下列程序段的输出结果是__B__。StringBuffersb=newStringBuffer("012345");sb.replace(0,4,"8");System.out.println(sb.toString().length());A.4 B.3 C.6 D.5 二.编程题1.统计一个字符串中大写字母、小写字母和数字出现的次数。importjava.util.Scanner;publicclassCharacterCounter{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入一个字符串:");Stringinput=scanner.nextLine();intupperCaseCount=0;//大写字母计数intlowerCaseCount=0;//小写字母计数intdigitCount=0;//数字计数for(inti=0;i<input.length();i++){charch=input.charAt(i);if(Character.isUpperCase(ch)){upperCaseCount++;}elseif(Character.isLowerCase(ch)){lowerCaseCount++;}elseif(Character.isDigit(ch)){digitCount++;}}System.out.println("\n统计结果:");System.out.println("大写字母数量:"+upperCaseCount);System.out.println("小写字母数量:"+lowerCaseCount);System.out.println("数字数量:"+digitCount);scanner.close();}}2.设一个字符串中存放了若干个用逗号分隔的单词,如“hello,good,how,now,happy,boy”,找出包含字母“o”的所有单词。importjava.util.Scanner;publicclassFindWordsWithO{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入逗号分隔的单词(如hello,good,how,now,happy,boy):");Stringinput=scanner.nextLine();//按逗号分割字符串,得到单词数组String[]words=input.split(",");System.out.println("\n包含字母'o'的单词有:");//遍历单词数组,检查是否包含'o'for(Stringword:words){if(word.contains("o")){System.out.println(word);}}scanner.close();}}习题8一.选择题1.使用Iterator时,判断是否存在下一个元素的方法是(D)A.next() B.has() C.hash() D.hasNext() 2.要想在集合中保存没有重复的元素并且按照一定的顺序排列,可以使用集合(B)A.ArrayList B.TreeSet C.HashSet D.HashMap 3.下列程序段的输出结果是(A)HashMap<Integer,Integer>hm=newHashMap<>();hm.put(1,10);hm.put(2,20);hm.put(1,20);hm.put(3,30);hm.put(1,40);System.out.println(hm.keySet().size());A.3 B.5 C.4 D.14.下列程序段的输出结果是(B)HashMap<Integer,Integer>hm=newHashMap<>();hm.put(1,10);hm.put(2,20);System.out.println(hm.getOrDefault(3,30));A.3 B.30 C.0 D.null 5.以下叙述错误的是(B) A.Java中的集合类都位于java.util包中B.List、Set和Map接口都继承自Collection接口C.Set接口的主要实现类有HashSet和TreeSetD.HashMap和TreeMap都是Map接口的实现类二.操作题1.统计一组整数中是3的倍数的数字个数。importjava.util.Scanner;publicclassCountMultiplesOfThree{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入一组整数(用空格分隔):");Stringinput=scanner.nextLine();//分割字符串得到整数数组String[]numbersStr=input.split("");int[]numbers=newint[numbersStr.length];intcount=0;//统计3的倍数的个数//转换字符串为整数,并统计3的倍数for(inti=0;i<numbersStr.length;i++){

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论