Day42--试卷错题

Day42--试卷错题

Java 基础语法试卷

二、填空题(每题 3 分,共 30 分)

  1. 已知一个ArrayList集合list,要获取集合中元素的个数,可以使用list._length_________方法。

    ××××××××××××××××××××××××××××××××××××

    ArrayList集合中,要获取元素的个数,应该使用的方法是size(),正确的写法是**list.size()**

  2. 如果要在子类中调用父类的构造方法,可以使用__________关键字。

    在子类中调用父类的构造方法,需要使用的关键字是 “super”,

三、简答题(每题 10 分,共 30 分)

  1. 简述 Java 中publicprivateprotected修饰符的作用和区别。

    • public:被public修饰的类、成员变量和方法可以在任何类中被访问

    • private:被private修饰的成员变量和方法只能在其所属类的内部被访问,外部类无法直接访问,让类内部的数据只能通过类自身提供的公共方法(比如getset方法等)来间接操作

    • protected:被protected修饰的成员变量和方法可以在其所属类、子类以及同一个包中的其他类中被访问。它提供了一种介于publicprivate之间的访问权限,子类可以继承并访问父类中protected修饰的成员

  2. 解释 Java 中的异常处理机制,包括try-catch-finally语句块的执行流程。

    • 首先执行try块中的代码,如果在try块中没有发生异常,则跳过catch块,直接执行finally块(如果有finally块),然后继续执行try-catch-finally语句块之后的代码。
    • 如果在try块中发生了异常,则立即停止try块中剩余代码的执行,根据异常的类型去匹配catch块中的异常类型,如果匹配成功,则执行对应的catch块中的代码,处理完异常后,再执行finally块(如果有)。如果没有匹配到合适的catch块,则异常会向上层抛出,直到被处理或者导致程序终止。
    • finally块中的代码无论是否发生异常都会被执行,通常用于释放资源等操作,如关闭文件流、数据库连接等,哪怕try块中使用了return语句,finally块依然会执行,并且如果finally块中有return语句,会覆盖trycatch块中的return结果哦(这是个容易混淆的点,也可以提及一下)。
  3. 描述 Java 中方法的参数传递方式,是值传递还是引用传递?并举例说明。

    1. 回答指出了是值传递这点正确,但举例可以更详细完善些呀,例如:
      • 对于基本数据类型,传递的是实际的值,在方法内部对参数的修改不会影响到方法外部的变量。比如:
    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(宽),提供公共的getset方法用于获取和设置属性值,以及一个计算矩形面积的方法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方法,它不应该接收额外的参数ab呀,因为这个方法是用于计算当前Rectangle对象的面积,它应该直接使用类中的lengthwidth属性来计算,所以方法定义修改为public int getArea() { return length * width; }更合适,这样更符合面向对象的设计思路,通过对象自身的属性来完成相关计算操作。

答案:

一、选择题

  1. C 2. A 3. A 4. C 5. A 6. C 7. C 8. A 9. C 10. A

二、填空题

  1. String
  2. a + b
  3. continue
  4. String msg
  5. size
  6. 1, 2, 3
  7. 平方根
  8. super
  9. 自动
  10. 1

三、简答题

    • public:被public修饰的类、成员变量和方法可以在任何类中被访问,具有最大的访问权限。
    • private:被private修饰的成员变量和方法只能在其所属类的内部被访问,外部类无法直接访问,实现了数据的封装和隐藏。
    • protected:被protected修饰的成员变量和方法可以在其所属类、子类以及同一个包中的其他类中被访问。它提供了一种介于publicprivate之间的访问权限,用于在继承关系中控制成员的可见性。
    • Java 的异常处理机制用于处理程序运行过程中可能出现的错误情况,使程序能够更加健壮和稳定。
    • try-catch-finally语句块的执行流程如下:
      • 首先执行try块中的代码,如果在try块中没有发生异常,则跳过catch块,直接执行finally块(如果有finally块),然后继续执行try-catch-finally语句块之后的代码。
      • 如果在try块中发生了异常,则立即停止try块中剩余代码的执行,根据异常的类型去匹配catch块中的异常类型,如果匹配成功,则执行对应的catch块中的代码,处理完异常后,再执行finally块(如果有),然后继续执行try-catch-finally语句块之后的代码。如果没有匹配到合适的catch块,则异常会向上层抛出,直到被处理或者导致程序终止。
      • finally块中的代码无论是否发生异常都会被执行,通常用于释放资源等操作,如关闭文件流、数据库连接等。
  1. 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());
    }
}

你可以根据这份试卷进行自我测试和学习巩固,如有疑问可以随时向我提问。

posted @   1hahahahahahahaha  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示