类无法实例化

时间:2013-11-01 00:24:58

标签: java

我创建了一个名为Account的类。然后我实例化类型类的对象。所有代码都保存在TestAccount文件中。但系统给我一个错误,如下所示

  

线程“main”java.lang.ExceptionInInitializerError中的异常       at testaccount.TestAccount.main(TestAccount.java:8)   引起:java.lang.RuntimeException:无法编译的源代码 - 类帐户是公共的,应该在名为Account.java的文件中声明       在testaccount.Account。(TestAccount.java:20)       ......还有1个   Java结果:1

以下是我的代码:

package testaccount;

public class TestAccount
{
public static void main(String[] args)
{

Account Account1=new Account();
Account1.setId(1122);
Account1.setBalance(20000);
Account1.setAnnualInterestRate(4.5);
System.out.println("The monthly interest rate is " + Account1.getMonthlyInterestRate());
System.out.println("The balance after the withdrawal is "+ Account1.withdraw(2000));
System.out.println("The balabce after the deposit is " + Account1.deposit(3000));

}

}

public class Account 
   {
      private int id;
      private double balance;
      private double annualInterestRate;
      private static long dateCreated;

      public Account()
      {
          id=0;
          balance=0;
          annualInterestRate=0;
          dateCreated=System.currentTimeMillis();
      }

      public Account(int newId,double newBalance)
      {
          id=newId;
          balance=newBalance;
      }

      public int getId()
      {
          return id;
      }
      public void setId(int newId)
      {
           id=newId;
      }

      public double getbalance()
      {
          return balance;
      }
      public void setBalance(double newBalance)
      {
           balance=newBalance;
      }

      public double getAnnualInterestRate()
      {
          return annualInterestRate;
      }
      public void setAnnualInterestRate(double newAnnualInterestRate)
      {
           annualInterestRate=newAnnualInterestRate;
      }

      public static long getDateCreate()
      {
          return dateCreated;
      }

      public double getMonthlyInterestRate()
      {
          return (annualInterestRate/12);
      }

      public double withdraw(double newWithdraw)
      {
          return (balance-newWithdraw);
      }

      public double deposit(double deposit)
      {
          return (balance+deposit);
      }
}

有人可以告诉我我做错了吗?

2 个答案:

答案 0 :(得分:1)

您必须制作一个名为Account.java的新文件,并将您的帐户类放在那里。这是因为当您从另一个类呼叫帐户时,jvm将查找Account.class,如果您的帐户类位于名为TestAccount.class的文件中,则无法找到它。

否则编译器不会编译您的文件

只要你的两个类都在同一个包(文件夹)中,你就不必做任何特殊的事情来“链接”这两个类。

当然,除非您想要嵌套类,否则您将Account类放在TestAccount类中。虽然我不推荐这个,因为它非常混乱。

答案 1 :(得分:0)

这不是一个好的实践,并且已经存在的解决方案更好,但您可以在TestAccount中移动Account类并使其成为静态(在类定义前放置静态)。那也行。