版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年大学java期末考试试题及答案一、单项选择题(每题2分,共20分)1.以下关于Java封装特性的描述,正确的是()A.封装要求类的所有属性必须声明为privateB.封装通过访问控制修饰符实现对成员的保护C.封装允许外部直接修改类的私有属性D.封装仅适用于成员方法答案:B解析:封装的核心是通过访问控制(如private、protected)限制成员的访问范围,并非所有属性必须private(如工具类的静态常量可能public),外部需通过方法访问私有属性。2.定义接口时,以下修饰符可以用于方法的是()A.privateB.protectedC.staticD.synchronized答案:C解析:Java8后接口支持static方法(需有方法体),private和protected在JDK9后支持(需为非抽象方法),但synchronized不能修饰接口方法(属于实现细节)。3.执行以下代码,输出结果是()```javaStrings1="java";Strings2=newString("java");System.out.println(s1==s2);```A.trueB.falseC.编译错误D.运行时异常答案:B解析:s1指向字符串常量池中的"java",s2通过new创建新对象(堆内存),==比较引用地址,结果为false。4.关于异常处理,以下说法错误的是()A.try块后可接多个catch块B.finally块中的代码一定会执行(除非JVM退出)C.自定义异常需继承Exception或其子类D.throws关键字用于方法内部抛出异常答案:D解析:throws用于方法声明可能抛出的异常类型,方法内部用throw抛出异常对象。5.以下能正确创建线程的方式是()A.继承Thread类并重写run()方法B.实现Runnable接口并重写start()方法C.继承Callable接口并重写call()方法D.实现Runnable接口并调用run()方法启动线程答案:A解析:创建线程的两种标准方式:继承Thread并重写run(),或实现Runnable并重写run()(需通过Thread对象启动)。Callable需配合FutureTask使用。6.对于ArrayList和LinkedList,以下描述错误的是()A.ArrayList基于动态数组,随机访问效率高B.LinkedList基于双向链表,插入删除效率高(非首尾)C.两者都线程不安全D.都实现了List接口答案:B解析:LinkedList在首尾插入删除效率高(O(1)),中间插入需遍历(O(n)),ArrayList中间插入需移动元素(O(n))。7.以下代码的输出结果是()```javaint[]arr={1,2,3};change(arr);System.out.println(arr[0]);publicstaticvoidchange(int[]a){a[0]=10;}```A.1B.10C.编译错误D.运行时异常答案:B解析:数组是引用类型,方法参数传递的是数组引用,change方法修改了数组元素的值,原数组同步改变。8.关于泛型的作用,以下说法错误的是()A.消除强制类型转换B.允许集合存储任意类型对象C.提高代码类型安全性D.实现编译时类型检查答案:B解析:泛型限制集合只能存储特定类型对象(如List<String>只能存String),避免运行时类型错误。9.执行以下代码,最终i的值是()```javainti=1;switch(i){case1:i+=1;case2:i+=2;case3:i+=3;default:i+=4;}```A.11B.8C.7D.5答案:A解析:switch无break,从case1开始顺序执行:1+1=2→+2=4→+3=7→+4=11。10.以下可以作为HashMap键的类需要满足的条件是()A.必须实现Comparable接口B.必须重写equals()和hashCode()方法C.必须声明为final类D.必须包含无参构造方法答案:B解析:HashMap通过键的hashCode()确定存储位置,通过equals()比较键是否相等,因此需重写这两个方法保证一致性。二、填空题(每空2分,共20分)1.类的成员变量默认初始化时,int类型的默认值是______,boolean类型的默认值是______。答案:0;false2.接口中的成员变量默认修饰符是______,成员方法(JDK8前)默认修饰符是______。答案:publicstaticfinal;publicabstract3.线程的生命周期中,调用start()方法后线程进入______状态,调用join()方法会使当前线程进入______状态。答案:就绪(可运行);阻塞4.使用FileOutputStream写入文件时,若构造方法第二个参数为true,表示______;ObjectOutputStream的______方法用于序列化对象。答案:追加写入(不覆盖原内容);writeObject5.Lambda表达式的语法格式为______,其本质是______的实例。答案:(参数列表)->{方法体};函数式接口三、简答题(每题8分,共24分)1.简述抽象类与接口的区别(至少列出4点)。答案:①定义关键字不同:抽象类用abstractclass,接口用interface。②成员类型不同:抽象类可包含普通成员变量、构造方法、静态方法等;接口(JDK8前)只能有publicstaticfinal变量和publicabstract方法(JDK8后支持default和static方法,JDK9后支持private方法)。③继承与实现关系不同:类只能单继承抽象类,但可实现多个接口。④设计目的不同:抽象类用于抽取子类公共行为("is-a"关系);接口用于定义行为规范("can-do"关系)。⑤访问修饰符限制:抽象类的方法可使用protected等修饰符;接口的方法(JDK8前)默认publicabstract。2.说明Java中如何实现浅拷贝和深拷贝,并举例说明其应用场景。答案:浅拷贝:通过重写Object的clone()方法(需实现Cloneable接口),默认clone()方法为浅拷贝,仅复制对象本身,对象内部的引用类型成员仍指向原对象的同一地址。例如,复制一个包含ArrayList成员的User对象,浅拷贝后两个User对象的ArrayList引用指向同一列表。深拷贝:在浅拷贝基础上,对每个引用类型成员递归调用clone()或通过序列化-反序列化实现。例如,User类包含List成员时,深拷贝需手动newArrayList并添加原列表的所有元素(或列表元素也需支持克隆)。应用场景:浅拷贝适用于对象内部无可变引用类型成员(如仅基本类型);深拷贝用于需要完全独立副本的场景(如多线程中防止共享数据被修改)。3.分析HashMap在JDK7和JDK8中的主要区别(至少4点)。答案:①数据结构:JDK7使用数组+链表;JDK8使用数组+链表+红黑树(当链表长度≥8且数组长度≥64时,链表转换为红黑树)。②插入方式:JDK7采用头插法(新节点插入链表头部);JDK8采用尾插法(新节点插入链表尾部),避免多线程扩容时的循环链表问题。③哈希计算:JDK7的hash()方法计算更复杂(4次位运算+5次异或);JDK8简化为(h=key.hashCode())^(h>>>16),减少碰撞。④扩容机制:JDK7在插入前检查是否需要扩容;JDK8在插入后检查(插入后可能导致链表长度超过阈值)。⑤null键处理:两者都允许null键,但JDK7中null键的哈希值为0,JDK8中null键固定存储在数组0号位置。四、编程题(共36分)1.(12分)设计一个图书管理系统的Book类,要求:属性:书号(ISBN,String类型,非空且长度为13位)、书名(title,String)、价格(price,double,>0)、作者(author,String)提供带参构造方法(参数顺序:ISBN、title、price、author),需对ISBN和price进行校验,校验不通过时抛出IllegalArgumentException(异常信息分别为“ISBN格式错误”“价格必须大于0”)重写equals()和hashCode()方法(仅基于ISBN比较)重写toString()方法,格式为“Book{ISBN='xxx',title='xxx',price=xxx,author='xxx'}”答案:```javapublicclassBook{privateStringISBN;privateStringtitle;privatedoubleprice;privateStringauthor;publicBook(StringISBN,Stringtitle,doubleprice,Stringauthor){if(ISBN==null||ISBN.length()!=13){thrownewIllegalArgumentException("ISBN格式错误");}if(price<=0){thrownewIllegalArgumentException("价格必须大于0");}this.ISBN=ISBN;this.title=title;this.price=price;this.author=author;}@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Bookbook=(Book)o;returnISBN.equals(book.ISBN);}@OverridepublicinthashCode(){returnISBN.hashCode();}@OverridepublicStringtoString(){return"Book{ISBN='"+ISBN+"',title='"+title+"',price="+price+",author='"+author+"'}";}//getters(可选,题目未要求但实际开发需要)publicStringgetISBN(){returnISBN;}publicStringgetTitle(){returntitle;}publicdoublegetPrice(){returnprice;}publicStringgetAuthor(){returnauthor;}}```2.(12分)使用多线程实现一个文件复制工具,要求:主线程输入源文件路径和目标文件路径(控制台输入)创建两个子线程:一个线程读取源文件数据(每次读取1KB),另一个线程将读取的数据写入目标文件使用管道流(PipedInputStream/PipedOutputStream)实现两个线程间的数据传输处理可能的异常(如文件不存在、IO异常)答案:```javaimportjava.io.;importjava.util.Scanner;publicclassMultiThreadFileCopy{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("输入源文件路径:");StringsourcePath=scanner.nextLine();System.out.print("输入目标文件路径:");StringtargetPath=scanner.nextLine();try{PipedOutputStreampos=newPipedOutputStream();PipedInputStreampis=newPipedInputStream(pos);ThreadreadThread=newThread(()->{try(FileInputStreamfis=newFileInputStream(sourcePath)){byte[]buffer=newbyte[1024];intlen;while((len=fis.read(buffer))!=-1){pos.write(buffer,0,len);}}catch(IOExceptione){e.printStackTrace();}finally{try{pos.close();}catch(IOExceptione){e.printStackTrace();}}},"读取线程");ThreadwriteThread=newThread(()->{try(FileOutputStreamfos=newFileOutputStream(targetPath);PipedInputStreampisLocal=pis){byte[]buffer=newbyte[1024];intlen;while((len=pisLocal.read(buffer))!=-1){fos.write(buffer,0,len);}}catch(IOExceptione){e.printStackTrace();}},"写入线程");readThread.start();writeThread.start();readThread.join();writeThread.join();System.out.println("文件复制完成");}catch(FileNotFoundExceptione){System.out.println("错误:文件不存在");}catch(InterruptedExceptione){Thread.currentThread().interrupt();System.out.println("线程被中断");}catch(IOExceptione){System.out.println("IO异常:"+e.getMessage());}finally{scanner.close();}}}```3.(12分)定义一个泛型方法,实现对任意类型列表中元素的排序(要求:支持自定义排序规则,使用Comparator接口),并编写测试代码验证。答案:```javaimportjava.util.ArrayList;importjava.util.Comparator;importjava.util.List;publicclassGenericSorter{//泛型排序方法publicstatic<T>voidsortList(List<T>list,Comparator<?superT>comparator){if(list==null||comparator==null){thrownewIllegalArgumentException("列表或比较器不能为空");}//实现冒泡排序(示例,实际可替换为更高效算法)intn=list.size();for(inti=0;i<n1;i++){for(intj=0;j<ni1;j++){Ta=list.get(j);Tb=list.get(j+1);if(pare(a,b)>0){//交换元素list.set(j,b);list.set(j+1,a);}}}}//测试代码publicstaticvoidmain(String[]a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026东风模具冲压技术有限公司成都冲焊分公司招聘6人备考题库附答案详解(综合题)
- 2026新疆伊犁州奎屯市招聘公益性岗位2人备考题库附参考答案详解(b卷)
- 2026中国电建集团河北工程有限公司海外事业部南方公司副总会计师招聘1人备考题库附答案详解(能力提升)
- 2026上海市公共卫生临床中心人员招聘50人备考题库附答案详解(轻巧夺冠)
- 2026四川自贡市第一人民医院招聘儿科工人1人备考题库含答案详解
- 【部编统编版 三下语文第3单元】《12 一幅名扬中外的画》 文本解读 教材解析 课件
- 2025年睡眠健康报告
- 山区高速公路隧道通风竖井施工方案
- 大型数据中心机房防静电地板施工方案
- 初中英语写作中名词性从句错误类型及其教学干预策略课题报告教学研究课题报告
- 义务教育均衡发展迎检路线及解说词2
- 大型船舶拆除方案范本
- 小作坊卫生规范制度
- 案件不网上公开申请书
- 贸易安全培训讲义课件
- GB/T 13609-2025天然气气体取样
- 教育资源分享平台管理框架模板
- 园林环卫安全培训内容课件
- 神经刺激治疗患者知情同意书模板
- 软件系统上线测试与验收报告
- (2025年标准)圈内认主协议书
评论
0/150
提交评论