Java报错:cannot find symbol,同目录文件无法识别类
Java编译错误:找不到BankAccount类的排查与解决
问题描述
BankAccount.java和BankTest.java在同一目录下,执行javac BankAccount.java编译正常,但执行javac BankTest.java时出现如下错误:
BankTest.java:3: error: cannot find symbol BankAccount b = new BankAccount( "M J W Morgan", "0012067" ); ^ symbol: class BankAccount location: class BankTest BankTest.java:3: error: cannot find symbol BankAccount b = new BankAccount( "M J W Morgan", "0012067" ); ^ symbol: class BankAccount location: class BankTest BankTest.java:12: error: cannot find symbol BankAccount c = new BankAccount( args[0], args[1] ); ^ symbol: class BankAccount location: class BankTest BankTest.java:12: error: cannot find symbol BankAccount c = new BankAccount( args[0], args[1] ); ^ symbol: class BankAccount location: class BankTest BankTest.java:15: error: cannot find symbol BankAccount c = new BankAccount( args[0], args[1], Double.parseDouble(args[2]) ); ^ symbol: class BankAccount location: class BankTest BankTest.java:15: error: cannot find symbol BankAccount c = new BankAccount( args[0], args[1], Double.parseDouble(args[2]) ); ^ symbol: class BankAccount location: class BankTest
提供的源码
BankAccount.java
public class BankAccount { private String holderName; private double balance; private String number; public BankAccount( String holderName, String number ){ this.holderName = holderName; this.number = number; balance = 0; } public BankAccount( String holderName, String number, double balance ){ this.holderName = holderName; this.number = number; this.balance = balance; } public String getHolderName(){ return holderName; } public void setName( String newName ){ holderName = newName; } public void deposit( double amount ){ balance += amount; } public void withdraw( double amount ){ balance -= amount; } public double checkBalance(){ return balance; } public String toString(){ String s = number + "\t" + holderName + "\t" + balance; return s; } }
BankTest.java
public class BankTest { public static void main(String[] args) { BankAccount b = new BankAccount( "M J W Morgan", "0012067" ); System.out.println( b ); b.deposit( 100 ); System.out.println( b ); b.withdraw( 500 ); System.out.println( b ); System.out.println( "Balance is: " + b.checkBalance() ); if( args.length == 2 ){ BankAccount c = new BankAccount( args[0], args[1] ); System.out.println( c ); } else { BankAccount c = new BankAccount( args[0], args[1], Double.parseDouble(args[2]) ); System.out.println( c ); } } }
解决方法
方法1:同时编译两个文件
执行以下命令,一次性编译所有依赖文件:
javac BankAccount.java BankTest.java
编译器会自动处理类之间的依赖,确保BankAccount的字节码能被BankTest识别。
方法2:指定类路径编译
如果已经单独编译过BankAccount.java,执行命令时显式指定当前目录为类路径:
javac -cp . BankTest.java
-cp .表示将当前工作目录加入类搜索路径,让编译器找到已生成的BankAccount.class文件。
原因分析
Java编译器编译时需要找到依赖类的.class字节码文件。单独编译BankTest.java时,若未指定类路径,部分环境下编译器不会自动搜索当前目录,导致无法找到已编译好的BankAccount.class,从而抛出"cannot find symbol"错误。此外,也可检查当前目录是否存在BankAccount.class,若缺失需重新编译BankAccount.java生成该文件。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

