Java编译错误:'类BankAccount是公共的, 应在名为 BankAccount.java 的文件中声明' 如何解决?

在编译Java代码时,你可能会遇到以下错误信息:'类BankAccount是公共的, 应在名为 BankAccount.java 的文件中声明'。 这是因为Java编译器要求每个公共类都要定义在与其类名相同的文件中。

问题分析:

这段代码定义了四个类:BankAccount, Accountant, CashierBank。 错误信息提示BankAccount类是公共的,因此它必须位于名为BankAccount.java的文件中。

解决方案:

将代码拆分成四个独立的文件,每个文件包含一个类:

  1. BankAccount.java:
public class BankAccount {
    private int balance;

    public BankAccount(int initialBalance) {
        balance = initialBalance;
    }

    public synchronized void deposit(int amount) {
        balance += amount;
    }

    public synchronized void withdraw(int amount) {
        balance -= amount;
    }

    public synchronized int getBalance() {
        return balance;
    }
}
  1. Accountant.java:
public class Accountant implements Runnable {
    private BankAccount account;

    public Accountant(BankAccount account) {
        this.account = account;
    }

    public void run() {
        for (int i = 0; i < 10000; i++) {
            account.deposit(1);
        }
    }
}
  1. Cashier.java:
public class Cashier implements Runnable {
    private BankAccount account;

    public Cashier(BankAccount account) {
        this.account = account;
    }

    public void run() {
        for (int i = 0; i < 10000; i++) {
            account.withdraw(1);
        }
    }
}
  1. Bank.java:
public class Bank {
    public static void main(String[] args) {
        BankAccount account = new BankAccount(10000);

        Thread t1 = new Thread(new Accountant(account));
        Thread t2 = new Thread(new Cashier(account));

        t1.start();
        t2.start();

        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println('Final balance: ' + account.getBalance());
    }
}

编译和运行:

将这四个文件保存在同一目录下,然后使用以下命令编译和运行代码:

javac *.java
java Bank

总结:

在Java中,每个公共类都必须定义在与其类名相同的文件中。 这有助于保持代码的组织性和可读性。

Java编译错误:'类BankAccount是公共的, 应在名为 BankAccount.java 的文件中声明' 如何解决?

原文地址: https://www.cveoy.top/t/topic/jmje 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录