# 汽车租赁系统 - Car 类说明文档 ## 项目概述 本项目是一个基于 Java 的简单汽车租赁系统核心实体类 (`Car.java`)。该类用于表示一辆汽车的基本属性,并提供了汽车租赁、租金计算以及车辆信息管理等功能。本项目非常适合 Java 初学者学习面向对象编程(OOP)中的封装、构造方法、静态变量以及异常处理等核心概念。 ## 功能特性 - **车辆信息封装**:记录并管理车辆的车牌号、品牌、型号、日租金及租赁状态。 - **全局统计功能**:使用静态变量(`static`)自动追踪系统内创建的车辆总数。 - **数据有效性校验**:在创建对象和更新属性时,针对非法输入(如空字符串、负数租金等)抛出 `IllegalArgumentException`,保证数据的一致性和安全性。 - **租赁状态管理**:提供了租车方法 `rent()`,可避免车辆被重复租赁。 - **租金计算**:根据用户提供的租赁天数动态计算总租金。 ## 类结构说明 ### 核心类:`JavaLearningProject.w3.Car` #### 1. 成员变量 - `private String licensePlate`: 车牌号(只读,创建后不可修改) - `private String brand`: 汽车品牌 - `private String model`: 汽车型号 - `private double dailyRent`: 日租金(默认值为 300.0,可修改) - `private boolean isRented`: 租赁状态(`true` 表示已租出,`false` 表示未租出) - `private static int totalCars`: 系统中注册的总车辆数 #### 2. 构造方法 - `public Car(String licensePlate, String brand, String model, double dailyRent)` 初始化一辆车,并验证参数的合法性,若合法则 `totalCars` 自增 1。 #### 3. 核心方法 - **Getters / Setters**:提供对 `brand`、`model` 和 `dailyRent` 的安全访问与修改。 - `public boolean rent()`:尝试租出车辆。若车辆未租出,则将状态改为已租出并返回 `true`;若已租出,返回 `false`。 - `public double calculateRent(int days)`:计算给定天数的租金。天数必须为正数。 - `public static int getTotalCars()`:获取系统内创建的总车辆数。 ## 使用方法 & 示例代码 您可以参考同目录下的 `CarRunner.java` 进行测试。以下是一个快速使用的代码示例: ```java import JavaLearningProject.w3.Car; public class Main { public static void main(String[] args) { // 1. 创建车辆对象 Car myCar = new Car("京A88888", "Toyota", "Camry", 200.0); // 2. 查看车辆状态 System.out.println("车辆品牌: " + myCar.getBrand()); System.out.println("是否已租出: " + myCar.isRented()); // 3. 租车操作 boolean success = myCar.rent(); System.out.println("租车结果: " + success); // 4. 计算 5 天的租金 double totalCost = myCar.calculateRent(5); System.out.println("5天租金: " + totalCost); // 5. 获取总车辆数 System.out.println("总计车辆数: " + Car.getTotalCars()); } } ``` ## 依赖环境要求 - **JDK 版本**:Java 8 或以上版本。 - **运行环境**:任何支持 Java 运行时的操作系统(Windows, macOS, Linux)。 - **外部依赖**:纯 Java 原生实现,无需依赖任何第三方类库(如 Maven/Gradle)。 ## 编译运行步骤 如果您使用命令行执行本程序,请确保当前处于项目根目录的上级目录(如包含 `JavaLearningProject` 的文件夹)。 **1. 编译代码** ```bash javac JavaLearningProject/w3/Car.java JavaLearningProject/w3/CarRunner.java ``` **2. 运行测试程序** ```bash java JavaLearningProject.w3.CarRunner ``` **3. 输出结果参考** 程序执行结果已保存至本目录下的 `output.txt` 文件中。您可以在其中查看所有可能的场景输出(包含正常情况和异常处理的捕获)。 ## 注意事项 1. **包名路径**:类文件使用了包声明 `package JavaLearningProject.w3;`,在编译和运行时必须严格遵循包目录结构的路径。 2. **只读属性**:`licensePlate` (车牌号) 是车辆的唯一标识,因此在设计上仅提供了 `Getter` 方法,未提供 `Setter` 方法。 3. **异常处理**:在传入空字符串或负数等非法参数时,程序会抛出 `IllegalArgumentException`。在实际开发中,调用方需做好 `try-catch` 处理,避免程序崩溃。