Day42--试卷错题
Day42--试卷错题
Java 基础语法试卷
二、填空题(每题 3 分,共 30 分)
-
已知一个
ArrayList
集合list
,要获取集合中元素的个数,可以使用list._length_________
方法。××××××××××××××××××××××××××××××××××××
在
ArrayList
集合中,要获取元素的个数,应该使用的方法是size()
,正确的写法是**list.size()**
-
如果要在子类中调用父类的构造方法,可以使用__________关键字。
在子类中调用父类的构造方法,需要使用的关键字是 “
super
”,
三、简答题(每题 10 分,共 30 分)
-
简述 Java 中
public
、private
、protected
修饰符的作用和区别。-
public
:被public
修饰的类、成员变量和方法可以在任何类中被访问 -
private
:被private
修饰的成员变量和方法只能在其所属类的内部被访问,外部类无法直接访问,让类内部的数据只能通过类自身提供的公共方法(比如get
、set
方法等)来间接操作 -
protected
:被protected
修饰的成员变量和方法可以在其所属类、子类以及同一个包中的其他类中被访问。它提供了一种介于public
和private
之间的访问权限,子类可以继承并访问父类中protected
修饰的成员
-
-
解释 Java 中的异常处理机制,包括
try-catch-finally
语句块的执行流程。- 首先执行
try
块中的代码,如果在try
块中没有发生异常,则跳过catch
块,直接执行finally
块(如果有finally
块),然后继续执行try-catch-finally
语句块之后的代码。 - 如果在
try
块中发生了异常,则立即停止try
块中剩余代码的执行,根据异常的类型去匹配catch
块中的异常类型,如果匹配成功,则执行对应的catch
块中的代码,处理完异常后,再执行finally
块(如果有)。如果没有匹配到合适的catch
块,则异常会向上层抛出,直到被处理或者导致程序终止。 finally
块中的代码无论是否发生异常都会被执行,通常用于释放资源等操作,如关闭文件流、数据库连接等,哪怕try
块中使用了return
语句,finally
块依然会执行,并且如果finally
块中有return
语句,会覆盖try
或catch
块中的return
结果哦(这是个容易混淆的点,也可以提及一下)。
- 首先执行
-
描述 Java 中方法的参数传递方式,是值传递还是引用传递?并举例说明。
- 回答指出了是值传递这点正确,但举例可以更详细完善些呀,例如:
- 对于基本数据类型,传递的是实际的值,在方法内部对参数的修改不会影响到方法外部的变量。比如:
public class Main { public static void changeValue(int num) { num = 10; } public static void main(String[] args) { int value = 5; changeValue(value); System.out.println(value); // 输出仍然是 5,因为传递的是值的副本,方法内修改不影响外部变量 } }
- 对于引用数据类型,传递的是对象的引用地址的副本,虽然在方法内部可以通过引用修改对象的属性,但如果在方法内部重新赋值引用变量,不会影响到方法外部的引用变量。例如:
public class Main { public static void changeArray(int[] arr) { arr[0] = 10; // 修改数组元素,通过引用修改了对象(数组)的属性,外部能看到变化 arr = new int[]{20, 30}; // 重新赋值引用变量,相当于让方法内的引用指向了新的数组对象,不会影响外部的引用 } public static void main(String[] args) { int[] array = {1, 2, 3}; changeArray(array); System.out.println(array[0]); // 输出 10,因为前面修改了数组元素生效了,但重新赋值引用没影响外部引用 } }
- 回答指出了是值传递这点正确,但举例可以更详细完善些呀,例如:
四、编程题(每题 10 分,共 10 分)
编写一个Java
程序,定义一个Rectangle
类,包含私有属性length
(长)和width
(宽),提供公共的get
和set
方法用于获取和设置属性值,以及一个计算矩形面积的方法getArea
。在main
方法中创建Rectangle
类的对象,设置长和宽的值,并输出矩形的面积。
package com.liu.exercise;
//一个`Java`程序,定义一个`Rectangle`类,
// 包含私有属性`length`(长)和`width`(宽),提供公共的`get`和`set`方法用于获取和设置属性值,以及一个计算矩形面积的方法`getArea`。
// 在`main`方法中创建`Rectangle`类的对象,设置长和宽的值,并输出矩形的面积。
public class Rectangle {
private int length;
private int width;
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getArea(int a,int b){
return a*b;
}
public static void main(String[] args) {
Rectangle s1 = new Rectangle();
s1.width=3;
s1.length=7;
System.out.println("要计算的矩形面积为:"+s1.getArea(s1.length, s1.width));
}
}
上面的代码有些问题
getArea
方法参数问题:
在Rectangle
类中的getArea
方法,它不应该接收额外的参数a
和b
呀,因为这个方法是用于计算当前Rectangle
对象的面积,它应该直接使用类中的length
和width
属性来计算,所以方法定义修改为public int getArea() { return length * width; }
更合适,这样更符合面向对象的设计思路,通过对象自身的属性来完成相关计算操作。
答案:
一、选择题
- C 2. A 3. A 4. C 5. A 6. C 7. C 8. A 9. C 10. A
二、填空题
- String
- a + b
- continue
- String msg
- size
- 1, 2, 3
- 平方根
- super
- 自动
- 1
三、简答题
-
public
:被public
修饰的类、成员变量和方法可以在任何类中被访问,具有最大的访问权限。private
:被private
修饰的成员变量和方法只能在其所属类的内部被访问,外部类无法直接访问,实现了数据的封装和隐藏。protected
:被protected
修饰的成员变量和方法可以在其所属类、子类以及同一个包中的其他类中被访问。它提供了一种介于public
和private
之间的访问权限,用于在继承关系中控制成员的可见性。
-
- Java 的异常处理机制用于处理程序运行过程中可能出现的错误情况,使程序能够更加健壮和稳定。
try-catch-finally
语句块的执行流程如下:- 首先执行
try
块中的代码,如果在try
块中没有发生异常,则跳过catch
块,直接执行finally
块(如果有finally
块),然后继续执行try-catch-finally
语句块之后的代码。 - 如果在
try
块中发生了异常,则立即停止try
块中剩余代码的执行,根据异常的类型去匹配catch
块中的异常类型,如果匹配成功,则执行对应的catch
块中的代码,处理完异常后,再执行finally
块(如果有),然后继续执行try-catch-finally
语句块之后的代码。如果没有匹配到合适的catch
块,则异常会向上层抛出,直到被处理或者导致程序终止。 finally
块中的代码无论是否发生异常都会被执行,通常用于释放资源等操作,如关闭文件流、数据库连接等。
- 首先执行
- Java 中方法的参数传递方式是值传递。
- 对于基本数据类型,传递的是实际的值,在方法内部对参数的修改不会影响到方法外部的变量。例如:
public class Main {
public static void changeValue(int num) {
num = 10;
}
public static void main(String[] args) {
int value = 5;
changeValue(value);
System.out.println(value); // 输出仍然是 5
}
}
- 对于引用数据类型,传递的是对象的引用地址的副本,虽然在方法内部可以通过引用修改对象的属性,但如果在方法内部重新赋值引用变量,不会影响到方法外部的引用变量。例如:
public class Main {
public static void changeArray(int[] arr) {
arr[0] = 10; // 修改数组元素
arr = new int[]{20, 30}; // 重新赋值引用变量,不会影响外部的引用
}
public static void main(String[] args) {
int[] array = {1, 2, 3};
changeArray(array);
System.out.println(array[0]); // 输出 10
}
}
四、编程题
class Rectangle {
private double length;
private double width;
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return length * width;
}
}
public class Main {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.setLength(5.0);
rectangle.setWidth(3.0);
System.out.println("矩形面积为:" + rectangle.getArea());
}
}
你可以根据这份试卷进行自我测试和学习巩固,如有疑问可以随时向我提问。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具