ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Java期末复习:25道高频选择题,覆盖核心考点与易错陷阱

Java期末复习:25道高频选择题,覆盖核心考点与易错陷阱

简介:河北工业大学Java期末考试复习题,是专为该校Java课程备考者整理的复习资料,可帮助解决期末阶段复习资料零散、不知从何下手的难题。题目内容紧贴课程常见考核重点,围绕Java语法、面向对象、异常处理与常用类等核心知识展开练习,并给出部分参考答案,便于快速核验和理清解题思路。虽然仅以单个doc文档形式打包,但内容密度较高,整体大小仅68KB,轻量便携,可在电脑端直接阅读,也可转存至手机随时翻阅。该文档在学习社区中被标注为推荐文档,对期末冲刺的针对性较强,适合考前半个月集中使用,既可逐题自测,也可对照答案查漏补缺,是Java期末复习的实用补充材料。目前已有285人学习,使用热度较好,需要Java期末复习题的同学可直接下载参考。

1. Java期末复习:第一题能全对的人,不一定过得了这25道选择

这份某高校的Java期末考试复习题,看起来只有25道选择题,却是把整学期最容易丢分的点全压在里面了。第一题考“Java语言与其它语言相比独有的特点”,答案是平台无关,很多同学看到“面向对象”就想选,结果栽在“独有”两个字上——C++也面向对象,Java真正独有的卖点是跨平台。这套题的特点是:题目不难,但每个选项都埋了语言细节,比如关键字、继承边界、异常捕获顺序、String比较,全是最爱考的“背了就会、不背就猜”的题型。适合期末前一周用来过考点,也适合面试前拿来自测基础。接下来按考点模块拆开讲,每道题都配上答题思路,你照着过一遍,比闷头刷十套卷子管用。

2. Java语言基础:平台无关、关键字、语句与类型转换的高频考点

2.1 平台无关与关键字:第一题到第三题的固定套路

第一题问独有特点,答案是C平台无关。这类题在期末考试里几乎年年出现,出题人想考的是你对Java“一次编写、到处运行”机制的理解。Java源代码编译成字节码,由JVM解释执行,所以平台无关是它区别于C、C++最核心的特点。答题时别急着选“面向对象”,要先看题干有没有“独有”二字,有就锁定平台无关。

第二题考关键字,问哪个不是Java关键字,答案是B number。Java没有number这个关键字,它是JavaScript里的概念,很多同学被名字迷惑直接选错。记关键字有个土办法:Java关键字都是英文单词,但number、string(小写)、object这些常见词反而不是关键字,String是类名,小写string连类都不是。这类题还有个变体,考哪些是保留字,比如true、false、null严格说是字面量,不是关键字,出题人偶尔会在这上面做文章。

第三题考语句合法性,答案是D x+=1。这题考的是赋值语句的基本语法:赋值号左边必须是变量,不能是表达式。A选项x+1=5左边是表达式,B选项i++=1左边是自增表达式,C选项a++b=1连运算符都不完整。D选项x+=1等价于x=x+1,合法。这类题的关键是记住一句话:赋值号左边只能放变量,右边放表达式。

2.2 类型转换与信息丢失:第十九题的答题模板

第十九题问会产生信息丢失的类型转换,答案是B int a=(int)8846.0。这题是期末考的常客,考的是基本类型转换的精度规则。Java的类型转换分两种:自动转换和强制转换。把小范围类型赋给大范围类型是自动转换,不会丢信息;把大范围类型强制转成小范围类型可能丢精度。

float a = 10; // 合法,int自动转float,不丢信息 int b = (int) 8846.0; // 强制转换,丢失小数点后的部分 byte c = 10; int d = -c; // 合法,byte转int自动提升 double e = 100; // 合法,int自动转double

答题模板就三步:第一步看方向,是宽转窄还是窄转宽;第二步看是否强制转换,有(int)这种强制符就要警惕;第三步看数据本身,小数点后有值就一定丢。面试里如果被问“float f = 3.14;”编译能不能过,答案是不能——3.14默认是double,需要写成3.14f。这是同一考点的另一个马甲,你要能认出来。

2.3 真题演练:对象声明与代码输出题

第四题考对象声明语法,答案是D A a=new A()。A选项float A a写法错误,B选项public a=A()里A()不是合法构造,C选项A a=new int()在new后面跟基本类型。这类题考的是对象创建的完整链:类型、变量名、new、构造方法。少任何一个都不行。

第十题考类的初始化方法,答案是C构造方法。这个考点常和默认值一起考:如果类没有定义构造方法,编译器会提供一个无参默认构造方法,把所有成员变量初始化为默认值。第十六题就是典型,问输出结果:

public class Demo { int x = 1; int y; public static void main(String[] args) { int z = 2; Demo t = new Demo(); System.out.println(t.x + t.y + z); } }

答案是3。x=1,y没有赋值所以是默认值0,z=2,1+0+2=3。这道题的坑在于有人以为y会有随机值,其实Java的实例变量默认值是0,局部变量才必须手动初始化。第16题的D选项解读“t.y默认值为0”就是正确答案的依据。

3. 面向对象高频考点:继承、访问控制、构造方法与static关键字

3.1 继承与访问控制:必须背下来的四条边界

第六题考继承的说法,答案是B子类继承父类的非私有方法和状态。这题每年都有接近三分之一的人错,错在选A“继承所有方法和状态”。Java的继承边界只有一句:private成员不继承,构造方法不继承,其他都继承。出题人常用的干扰项是“只能继承public方法和状态”,这是把访问控制记混了,protected和默认权限的成员在满足条件下也能被继承使用。

第十三题考访问控制,答案是A让该类不使用任何关键字。题目问“能被同一个包中的其他类访问,但不能被这个包以外的类访问”,这就是默认访问权限,也叫包访问权限。不用任何修饰符就是默认权限,而private连同类别的类都访问不了,protected允许子类跨包访问,public对所有类开放。这部分的记忆口诀:public全公开,protected包内外子孙可见,默认只有同包可见,private只有本类可见。

第十七题考接口,答案是B实现一个接口必须实现接口的所有方法。接口和抽象类不是同一概念,接口可以继承接口,一个类可以实现多个接口,这三个都是常考陷阱。第十八题是接口的实战题:

public class A implements B { public static void main(String[] args) { int i; A a1 = new A(); i = a1.k; System.out.println("i=" + i); } } interface B { int k = 10; }

答案是B i=10。接口里的变量默认是public static final的,k就是常量,可以直接访问。这道题藏在i=a1.k里,考的是你知不知道接口属性自带static final属性。想快速判断,看到接口里的变量直接当常量处理,值永远不会变。

3.2 构造方法与无返回值方法:第十题、十一题、十二题连考

第十题前面讲过答案是构造方法。第十一题考static方法头,问“使用类名Test作为前缀就可以调用它”,答案是A static void method()。用类名直接调用的方法必然是static方法,这是静态方法的核心特征。出题人在这里埋了三个坑:没有static就只能通过对象调用,没有void说明有返回值不能直接当语句用,public、protected都是访问控制修饰符,不影响类名调用。

第十二题考的是一段循环求和:

int findSum(int m, int n) { int sum = 0; for (int i = m; i <= n; i++) { sum += i; } return sum; }

调用findSum(1, 5),返回1+2+3+4+5=15,答案是D。这题虽然简单,但有人把i<=n看成i<n,算出10。还有人在for循环里习惯性写i=0,完全忽略m是参数,直接加0到5。期末卷子上这种题属于送分题,错在审题不细。

3.3 修饰符混用:第二十五题与第十四题的双胞胎考点

第十四题和第二十五题是同一道题的变形,都问“修饰符混用的说法错误的是”,答案是D static方法中能处理非static的属性。这句话是错的,static方法不能直接处理非static属性,因为static方法不依赖对象存在,而非static属性必须通过对象访问。

另外三个选项也要记牢:abstract不能与final并列修饰同一个类,因为abstract类必须被继承才能使用,final类禁止继承,两者矛盾;abstract类中不应该有private成员,因为private方法子类看不到,无法被重写实现;abstract方法必须在abstract类中,但abstract类可以没有abstract方法。这道题的知识点密度很高,期末卷常常原样考,面试里也经常被拿出来当热身题。

4. 异常处理与选择语句:catch顺序、finally与流程控制的踩分点

4.1 多重catch的排列顺序:第七题、第八题的核心逻辑

第七题问哪个块能和finally一起用,答案是A try。try-finally是合法组合,catch可以省略,但try不能省略。这里有一个容易被忽略的细节:try-finally可以直接搭配,表示无论是否异常都要执行finally里的清理代码。只有catch没有try,或者只有finally没有try,都是编译错误。

第八题问多重catch里哪个异常类应最后一个列出,答案是C Exception。异常捕获的顺序规则是:子类在前,父类在后。如果父类排在前面,子类异常永远没机会被捕获,编译器直接报错。Exception是所有异常类的父类,必须放最后。

答题时记住这个顺序表:

捕获顺序异常类说明
1ArithmeticException算术异常,具体子类
2NumberFormatException数字格式异常,具体子类
3ArrayIndexOutOfBoundsException数组越界,具体子类
4Exception所有异常的父类,兜底

面试里这道题的升级版是问“多个catch块中第一个catch是Exception会怎样”,答案是编译错误,因为后续catch永远执行不到。只要记住“先具体后通用”六个字,这类题就稳了。

4.2 选择语句描述:第九题的排除法

第九题问对选择语句描述错误的是,答案是A“根据某一条件重复执行一部分代码直到满足终止条件为止”。这句话描述的是循环语句,不是选择语句。选择语句的作用是根据条件控制程序流程,改变执行顺序,支持嵌套,条件满足就执行对应分支。

这题本身不难,但它提醒了一个重要考点:选择语句和循环语句的区别。期末喜欢出这种概念辨析题,把循环的表述放在选择语句的选项里。判断技巧只有一个——看到“重复执行”就是循环,看到“控制流程、改变顺序”就是选择。

4.3 补充考点:switch漏写break的后果

选择题里没直接考switch,但第九题的“选择语句可以嵌套使用”暗示了switch-case也是选择语句家族的一员。期末卷子里switch最常见的考法是问漏写break会发生什么:执行完匹配的case后继续执行下一个case,直到遇到break或switch结束,这种现象叫case穿透。

回答这类题时要说完整:case穿透不是错误,是Java的语法设计,但实际开发里通常是bug来源。出题人如果问“下列代码输出什么”,看到case后面没有break,就要把后面每个case都执行一遍再算结果,这是易错点,后面单独讲。

5. 易错题与常见失分点:String比较、默认值、接口常量、类名与文件名

5.1 String比较题:equals与==的区别,年年有人错

第十五题是这套卷子里最经典的送命题,考String的equals和==区别。题目代码是:

String s1 = new String("xyz"); String s2 = new String("xyz"); boolean b1 = s1.equals(s2); boolean b2 = (s1 == s2); System.out.print(b1 + " " + b2);

答案是A true false。错在哪:大部分同学知道==比较引用地址,但被new String("xyz")迷惑,以为两个字符串内容相同地址也相同。真相是,new String会创建新对象,s1和s2指向两个不同地址,所以==是false;equals比较内容,所以是true。

为什么错:这里的关键是“new”关键字,只要看到new String,就说明创建了新对象,地址必然不同。如果写成String s1="xyz"; String s2="xyz";,由于字符串常量池的机制,s1==s2就是true。面试里最常问的变体就是这个,一题两答。

怎么答对:看到String比较,先看有没有new,再看比的是内容还是地址。用equals就是内容,用==需要判断是否指向同一个字符串常量池对象。推荐的口诀是“new过就不同,没new可能同”。

5.2 成员变量默认值题:y没赋值凭什么等于0

第十六题的易错点是有人选编译错误或者随机值。错在哪:不清楚实例变量和局部变量的初始化规则。为什么错:把局部变量“必须初始化才能使用”的规则套到实例变量上。实例变量(类的成员变量)在对象创建时由系统赋默认值:int是0,double是0.0,boolean是false,引用类型是null。局部变量没有默认值,不初始化就编译报错。

怎么答对:先判断是成员变量还是局部变量,再套规则。成员变量一定有默认值,局部变量必须手动初始化。t.y是成员变量,所以是0。这道题还容易考构造方法内的赋值顺序,如果构造方法里给y赋了值,那t.y就不是0,要仔细看题。

5.3 接口常量题:k为什么不需要创建对象就能访问

第十八题很多人选“程序有编译错误”。错在哪:以为接口的变量必须通过实现类的对象才能访问。为什么错:没记住接口变量的隐式修饰符——接口里声明变量默认是public static final,static意味着直接通过接口名或实现类名就能访问,final意味着不能修改。代码里a1.k能访问是因为实现类继承了接口的常量,k等于10。

怎么答对:看到接口里的变量,先写注释“这是常量”,再做题。接口常量访问的两种方式都要会:接口名.k或者实现类对象.k。如果把题目改成“k=20;”,答案就是编译错误,因为final变量不能重新赋值。面试里还会扩展问接口和抽象类的区别,这里要补充一句:接口里的方法默认是public abstract,Java 8之后有default方法,但变量永远是常量。

5.4 类名与文件名题:Demo和demo的大小写陷阱

第十六题的类名是demo,文件名是Demo.java。错在哪:有人纠结类名和文件名必须一致,认为编译会失败。为什么错:这个规则只对public类生效。文件名必须与public类的类名一致,但非public类可以用任何名字命名。第十六题的类demo没有public修饰,所以文件名Demo.java是合法的。

怎么答对:先看类有没有public修饰,再看文件名是否匹配public类的类名。如果类声明为public class Demo,文件名必须是Demo.java;如果没有public,文件名可以随意,但代码规范和考试默认都用一致的写法。面试里如果问“一个Java文件可以有几个public类”,答案是只能有一个,这也是高频题。

6. 临考磨枪:25道选择题的20分钟复盘法与押题方向

考试前别盲目刷题,先把这25道题按错误原因分类。我自己的习惯是把错题归成三类:知识点遗忘、审题失误、概念混淆。知识点遗忘的题重新背一遍对应考点,比如访问控制修饰词表、异常捕获顺序;审题失误的题圈出题干里的“独有”“错误”“不是”这些字眼,考试时先划出来再作答;概念混淆的题写在一张纸上,考前只看这些对比,比如equals和==、实例变量和局部变量、接口和抽象类。

选择题的时间分配也要有策略。25道选择,建议20分钟内完成,每道题不超过40秒。遇到需要心算代码结果的题,比如第十二题和第十六题,先写结果再对照选项,别在脑子里转。遇到完全没见过的题目,先排除明显错误的选项,再在剩余选项里找最熟悉的那个。Java期末选择题有个规律:基础概念题占70%,代码阅读题占20%,细节陷阱题占10%,把握住基础概念就能稳过。

押题方向有三个可以重点关注。第一是String相关,特别是new String和字符串常量池的对比,这几乎是每次必考。第二是异常处理的顺序,尤其是父类异常放前面的编译错误。第三是接口和抽象类的区别,题干常问“下列说法正确的是”。这三块在这套复习题里都有对应题目,搞懂它们就等于抓住了复习的主线。如果你手里有这份文档的部分答案,建议先把答案遮住做一遍,再对照答案逐题分析——从那以后我每次复习都强制走一遍“先做题、后看答案、再写一句错因”,靠着这套方法,期末复习效率至少翻一倍。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表