Java编程实践与核心概念解析

15、实现一个名为Car的类,该类模拟一辆沿x轴行驶的汽车,行驶时消耗汽油。提供按给定英里数行驶、向油箱添加给定加仑数汽油的方法,以及获取当前离原点的距离和燃油量的方法。在构造函数中指定燃油效率(英里/加仑)。这个类应该是不可变类吗?为什么是或为什么不是?

这个类不应该是不可变类。因为不可变类的实例一旦构造完成就不能改变,而 Car 类需要提供行驶和加油的方法,这会改变汽车的行驶距离和燃油量,即改变对象的状态,所以不适合设计为不可变类。

16、在RandomNumbers类中,提供两个静态方法randomElement,用于从整数数组或整数ArrayList中获取一个随机元素。(如果数组或ArrayList为空,则返回零)。为什么不能将这些方法作为int[]或ArrayList 的实例方法?

不能将这些方法作为 int[] ArrayList<Integer> 的实例方法,是因为 Java 不允许向数组类型(如 int[] )添加新的实例方法,数组是 Java 内置的特殊类型,其行为和结构是固定的。而对于 ArrayList<Integer> ,虽然它是一个类,但修改标准库中的类来添加自定义实例方法不是一个好的做法,会破坏封装性和可维护性,并且标准库的类通常不应该被直接修改。此外,静态方法更适合这种通用的工具类功能,它不依赖于特定对象的状态。

17、重写Cal类,对System和LocalDate类使用静态导入。

import static java.lang.System.out;
import static java.time.LocalDate.of;
import java.time.DayOfWeek;

public class Cal {
    public static void main(String[] args) {
        int year = 2024;
        int month = 1;
        // 获取该月第一天的日期对象
        var date = of(year, month, 1);
        // 获取该日期是星期几
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();
        // 打印星期几的标题
        out.println(" Mon Tue Wed Thu Fri Sat Sun");
        // 根据星期几的值打印空格,实现缩进
        for (int i = 1; i < value; i++) {
            out.print("    ");
        }
        // 循环打印该月的日期
        while (date.getMonthValue() == month) {
            out.printf("%4d", date.getDayOfMonth());
            // 日期加一天
            date = date.plusDays(1);
            weekday = date.getDayOfWeek();
            if (weekday.getValue() == 1) {
                out.println();
            }
        }
    }
}

上述代码通过静态导入 System.out LocalDate.of 方法,避免了在使用时重复书写类名,使代码更简洁。

18、创建一个 HelloWorld.java 文件,在 ch01.sec01 包中声明一个 HelloWorld 类。将其放入某个目录,但不是 ch01/sec01 子目录。从该目录运行 javac HelloWorld.java。是否会生成类文件?类文件在哪里?然后运行 java HelloWorld。会发生什么?为什么?(提示:运行 javap HelloWorld 并研究警告消息。)最后,尝试运行 javac -d . HelloWorld.java。为什么这样更好?

运行 javac HelloWorld.java 会生成类文件,类文件会在当前目录生成。
运行 java HelloWorld 可能会报错,因为类定义在 ch01.sec01 包中,需要使用完整的包名来运行,即 java ch01.sec01.HelloWorld
运行 javap HelloWorld 可能会给出关于包名不匹配的警告。
使用 javac -d . HelloWorld.java 更好,因为 -d <

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值