简介:这份资源是面向河北工业大学在校生及备考Java期末考试的考生整理的复习题文档,聚焦课程核心考点与常见题型,适合在考前冲刺阶段用于自测与查漏补缺,也可作为课堂知识梳理的辅助材料。压缩包内共1个doc文件,整体约68KB,以文字题目为主,便于打印或直接在电脑上阅读标注。目前已有286人学习下载,说明在校内备考群体中具有一定参考价值。文档收录了部分题目的参考答案,读者可据此对照检验对面向对象、语法基础等知识点的掌握程度,理清答题思路,减少盲目刷题的时间成本。需要提醒的是,答案并非全部覆盖,更适合作为练习与核对工具,配合教材和课堂笔记使用效果更佳。
1. 从一道“送分题”翻车说起:这场 Java 期末到底考什么
先看一道很多人第一眼觉得稳拿分的题:String s1 = new String("xyz"); String s2 = new String("xyz");然后判断s1.equals(s2)和s1 == s2的结果。选项里 true/false 排列组合,正确答案是true false。可每年都有人在这里翻车,把==当成比较内容,或者把equals当成比较地址。这类题就是 Java 期末最典型的考法——不考你写过多大的项目,专挑语言细节里最容易混淆的那一层下手。
这场考试考什么?从题型分布看,选择题占大头,覆盖 Java 语言基础、面向对象、异常、修饰符、接口与继承、常用类库、布局管理器这几块。它不要求你手写完整系统,但要你对“哪个关键字能用、哪个不能混用、默认值是多少、编译能不能过”有肌肉记忆。拿分逻辑很直接:基础概念题靠背和对比,代码阅读题靠逐行推演,编译报错题靠规则清单。适合正在突击期末、想把零散知识点串成答题反射的考生。下面按考点模块拆开讲,每块都落到具体题目和答题思路上。
2. 语言基础与关键字:高频选择题的送分与送命区
2.1 平台无关性、关键字识别与编译命令
Java 区别于其他语言的“独有特点”,标准答案是平台无关(靠字节码和虚拟机实现),不是“面向对象”也不是“多线程”——这两个很多语言都有。这类题面试官最想听的是你能说清“为什么是它独有”,而不是背选项。关键字识别题里,default、abstract、package都是关键字,number不是。判断方法很朴素:Java 关键字全小写,且没有number这个关键字,Number是包装类但不是关键字。
编译命令题也常出:编译 Java 源文件用javac.exe,运行用java.exe。有人把两者记反,血泪经验是记“c 在前,compile 先发生”。Scanner类在java.util包,不在java.lang,这个点几乎每套卷子都出现一次。
// 验证平台无关性的最小结构:源码 -> 字节码 -> 虚拟机执行 public class Demo { public static void main(String[] args) { System.out.println("bytecode runs on JVM"); } } // 编译:javac Demo.java 生成 Demo.class // 运行:java Demo 由 JVM 加载执行上面代码的关键不在语法,而在注释里的两步:javac产出与平台无关的.class,java命令交给本机 JVM 执行。参数上注意运行时不带.class后缀,这是选择题常挖的坑。
2.2 赋值语句与表达式合法性判断
“下面语句正确的是”这类题,考的是左值必须是变量。x+1=5错在左边是表达式;i++=1错在自增结果不能作左值;a++b=1语法本身就不成立;只有x+=1合法,因为它是复合赋值,等价于x = x + 1。答题时先看等号左边是不是一个可赋值的变量,再看复合运算符是否被支持,两步就能排除。
还有一类是方法调用结果推算,比如findSum(1,5)对1到5累加,返回15。这种题不要心算跳步,把循环变量和累加值列成两列,逐轮写出来,比在脑子里跑稳得多。
2.3 真题演练:默认值与静态方法调用
看这道程序输出题:
public class Demo { int x = 1; int y; // 成员变量未显式赋值,默认 0 public static void main(String[] args) { int z = 2; // 局部变量必须显式初始化 Demo t = new Demo(); System.out.println(t.x + t.y + z); // 1 + 0 + 2 = 3 } }输出是3。考点有两个:成员变量y有默认值0,局部变量z没有默认值、必须自己赋值。很多人错在以为y是随机值或编译不过。答题思路是区分“成员变量”和“局部变量”的初始化规则,前者由 JVM 给默认值,后者不初始化就使用会编译报错。
另一道:让method能用类名Test直接调用,方法头要加static,即static void method()。判断依据是“类名调用 = 静态方法”,和返回值、访问修饰符无关。这类题面试官想确认你分得清“属于类”和“属于对象”。
3. 面向对象核心:继承、接口与修饰符的连环坑
3.1 继承范围与访问权限
“子类能继承父类的什么”标准答案是:能继承非私有的方法和状态,私有成员不能被继承(严格说不能被直接访问和继承)。选项里“所有方法和状态”是典型干扰项。访问权限题同理:成员用默认(不写修饰符)时,只能被同一包中的类访问;private只在本类;protected同包加子类;public全部。要让类只被同包访问,就不写任何访问修饰符。
这里有个容易混的点:类的访问修饰符和成员的访问修饰符规则不完全一样,但选择题通常只考成员。答题时先定位“谁访问谁”,再套四档权限表,比死记文字稳。
3.2 接口与抽象类的区别
接口题高频三连:接口和抽象类不是同一概念;实现接口必须实现其所有方法(除非实现类是抽象类);接口之间可以继承,一个类可以实现多个接口。题目里“一个类只能实现一个接口”是错的。还有一道经典:
interface B { int k = 10; // 接口中的变量默认 public static final } public class A implements B { public static void main(String[] args) { A a1 = new A(); int i = a1.k; // 通过实例访问接口常量,合法 System.out.println("i=" + i); // 输出 i=10 } }输出i=10。考点是接口里的变量默认是public static final,必须初始化,且值不可改。有人以为接口变量是实例变量,或者以为通过实例访问会报错,都是踩坑点。答题思路:看到接口里的“变量声明”,先补全public static final,再看有没有赋值。
3.3 修饰符混用:错误选项的识别套路
“下列关于修饰符混用的说法,错误的是”这类题,错误项往往藏在绝对化表述里。逐条过:abstract不能和final并列修饰同一个类(对,一个要继承一个不许继承,矛盾);abstract类中不应该有private成员(这条要小心,抽象类可以有私有成员,只是私有抽象方法不合法,题目表述本身常被设为错误项);abstract方法必须在abstract类中(对);static方法中能处理非static属性(错,静态方法不能直接访问实例属性)。答题时把每条拆成“规则 + 反例”,能举出反例的就是错误项。
提示:修饰符题不要凭语感,把
abstract、final、static、private两两组合列成小表,矛盾组合一眼可见。
4. 异常、字符串与常用类:易错题集中营
4.1 多重 catch 的顺序与 finally 搭配
多重 catch 题问“哪个异常类应最后列出”,答案是Exception,因为它是所有异常的父类,放在前面会截获后面更具体的异常,导致编译报错。顺序原则:子类异常在前,父类异常在后。ArithmeticException、NumberFormatException、ArrayIndexOutOfBoundsException都是具体子类,应排在Exception之前。
能单独和finally一起使用的块是try。finally必须配try,catch可以省略(try-finally合法),但finally不能单独出现。答题时记“try 是入口,finally 是收尾,catch 可选”。
4.2 字符串比较:equals 与 == 的分水岭
回到开头那道题,完整代码和结果:
String s1 = new String("xyz"); String s2 = new String("xyz"); boolean b1 = s1.equals(s2); // 比较内容,true boolean b2 = (s1 == s2); // 比较引用地址,两个新对象,false System.out.print(b1 + " " + b2); // 输出 true falsenew String每次都在堆上创建新对象,所以地址不同、内容相同。如果换成字符串字面量String s1 = "xyz"; String s2 = "xyz";,两者指向常量池同一对象,==才是true。这类题面试官最想听的是你能说清“比较的是内容还是地址”,而不是只报答案。
4.3 类型转换与信息丢失
“会产生信息丢失的类型转换”考的是窄化转换。int a = (int) 8846.0把浮点转整型,小数部分丢失,属于信息丢失;float a = 10是宽化,安全;byte a = 10; int b = -a也是宽化。判断标准:从大范围到小范围、从浮点到整型,通常丢信息;反过来一般安全。答题时先看源类型和目标类型的取值范围,再看有没有小数截断。
4.4 易错点清单:四个最容易丢分的地方
第一,把==和equals混用。错在没区分地址与内容;原因是字符串对象创建方式不同;答对方法是先看有没有new,有new基本地址不同。
第二,以为成员变量不初始化不能用。错在把成员变量当局部变量;原因是没记默认值规则;答对方法是成员变量有默认值(int为 0、boolean为 false、引用为 null),局部变量必须先赋值。
第三,多重 catch 把Exception放前面。错在忽略继承层次;原因是没按“子类在前”排序;答对方法是先列具体异常,父类兜底放最后。
第四,接口变量当成普通实例变量。错在不知道默认修饰;原因是没补全public static final;答对方法是看到接口里的字段先想“常量”。
5. 布局管理器与综合阅读题:最后一块拼图
5.1 容器默认布局与选择题定位
Panel缺省使用的布局管理器是FlowLayout,这是 AWT/Swing 里的固定知识点。常见干扰项是BorderLayout(Frame默认)、GridLayout、CardLayout。答题时把“容器—默认布局”配成对记:Panel对FlowLayout,Frame对BorderLayout。这类题没有推理空间,纯记忆,但每年都有人栽,建议考前用一张小卡片过一遍。
5.2 综合代码阅读的逐行推演法
综合题往往把继承、静态、默认值、字符串揉在一起。答题步骤固定为三步:先标出所有变量声明和初始化位置,再判断每个方法是静态还是实例,最后逐行算值。遇到static方法里访问实例属性,直接判编译错误;遇到未初始化的局部变量,直接判编译错误。把这两条当“红线规则”,能快速排除一半错误选项。
public class Check { static int count; // 静态成员,默认 0 int value = 5; // 实例成员 static void run() { // System.out.println(value); // 编译错误:静态方法不能直接访问实例属性 System.out.println(count); // 合法:静态访问静态 } }注释里那行被屏蔽的代码就是高频错误点:静态方法直接访问实例属性会编译失败。参数说明上,count属于类、value属于对象,静态上下文里没有this,自然拿不到实例属性。掌握这条,综合题里“能否编译”的判断基本不会错。
6. 考场答题节奏:把选择题当规则题打
期末 Java 的选择题,本质是规则判断题,不是编程能力测试。我的做法是把整张卷子分成三类题:记忆题(关键字、包名、默认布局)、规则题(修饰符混用、继承范围、异常顺序)、推演题(代码输出、类型转换)。记忆题靠考前清单过一遍,规则题靠“矛盾组合表”现场排除,推演题靠逐行写值不跳步。
时间分配上,记忆题和规则题控制在每题 30 秒内,推演题留足两分钟。遇到卡住的代码题,先看有没有编译错误选项,有就先排;再看变量是成员还是局部,成员有默认值、局部必须初始化;最后看字符串有没有new。这三板斧能解决大部分阅读题。
注意:不要在一道修饰符题上反复纠结,标记后跳过,回头用“能否举出反例”的方法二次判断,比第一遍死磕效率高。
押题方向上,平台无关性、equals与==、多重 catch 顺序、接口常量、静态方法访问限制、Panel默认布局,这六个点几乎每套卷子都会以不同形式出现,考前把它们各自的“标准答案 + 一个反例”背熟,比刷一百道杂题有用。
从那以后我每次带人复习这门课,都强制先做一件事:把上面六个高频点写成六张卡片,每张正面写考点、背面写一个错误选项和它错在哪,考前只翻卡片不翻书。翻车最多的地方,往往就是卡片背面那行小字没记住。希望帮到你。
本文还有配套的精品资源,点击获取