Изменение импорта в Java для замены в * делает это не работает

1

Я пытаюсь более или менее освоить Java без бесконечного костыля, опираясь на IDE, поэтому я делаю это в режиме командной строки в win 7... Чтобы быть уверенным, что происходит. Эти два источника.java работают, затем я вношу изменения в строку импорта, а затем получаю сообщение об ошибке (NO WORKIE THEN !!!). Здесь два фрагмента кода, когда он работает, чтобы начать, затем две строки, чтобы "запустить его", то что не работает.

Суть его - это import "thing.name"; отличается от "import thing. *;" Я подумал, что точка дикой карты должна включать именно это

/** A class to test the CashRegister class */
import animals.CashRegister;
public class ImaMain
{
   public static void main(String[] args)
   {
      CashRegister register = new CashRegister();
      register.recordPurchase(29.50);
      register.recordPurchase(9.25);
      register.enterPayment(50);
      double change = register.giveChange();
      System.out.println(change);      
   }
}

Это основная управляемая часть. Здесь класс, который он использует в другом файле с именем: CashRegister.java, делает CashRegister.class

package animals;
/**
   A cash register totals up sales and computes change due.
*/
public class CashRegister 
{

   public CashRegister()
   {
      purchase = 0;
      payment = 0;
   }

   public void recordPurchase(double amount)
   {
      double total = purchase + amount;
      purchase = total;
   }

   public void enterPayment(double amount)
   {
      payment = amount;
   }

   public double giveChange()
   {   
      double change = payment - purchase;
      purchase = 0;
      payment = 0;
      return change;
   }
   private double purchase;
   private double payment;
}

Я готовлю его с помощью

javac *.java

его счастливый, я скопировал созданный файл.class в подкаталог: "животные", под ним, вернитесь на уровень и запустите его:

java ImaMain
11.25

11.25 - ответ. Совершенно верно? Я стираю уровень parellel.class, чтобы найти файл класса, в котором я ожидаю, в subdir: animals

Теперь я меняю эту строку в основном, чтобы подготовиться к пути более сложного хэдлола, чтобы:

/** A class to test the CashRegister class */
import animals.*;
public class ImaMain
{
   public static void main(String[] args)
   {
      CashRegister register = new CashRegister();
      register.recordPurchase(29.50);
      register.recordPurchase(9.25);
      register.enterPayment(50);
      double change = register.giveChange();
      System.out.println(change);      
   }
}

Одно изменение строки. От import animals.CashRegister; - import animals.*;

Затем javac генерирует эту ошибку:

bad class file: .\CashRegister.class
class file contains wrong class: animals.CashRegister
1 error

Даже не доходит до виртуального шага.

Файл основной части называется: ImaMain.java

Я копирую файл.class, где он идет. Я имею в виду, что он работает, когда импорт более явный.

classpath = .;C:\java\jdk1.7.0_05\lib
  • 0
    Непонятно, где на самом деле находятся файлы или откуда они были скомпилированы. В любом случае, есть несоответствие.
  • 0
    / ** Класс для проверки класса CashRegister / импорт животных. ; открытый класс ImaMain {открытый статический void main (String [] args) {CashRegister register = new CashRegister (); register.recordPurchase (29.50); register.recordPurchase (9,25); register.enterPayment (50); double change = register.giveChange (); System.out.println (изменить); }}
Показать ещё 2 комментария
Теги:

3 ответа

2

Либо вы называете java когда находитесь в подкаталоге животных, либо перемещаете файл CashRegister.class.

Это не имеет никакого отношения к изменению линии импорта.

1

Я копирую созданный файл.class в подкаталог: "животные"

Да, но вы оставили оригинал в каталоге, в котором вы начали. Теперь есть два файла CashRegister.class, один в каталоге верхнего уровня и один в подкаталоге животных. Когда вы запускаете javac снова, он видит, что есть файл CashRegister.class, но он содержит класс с именем animals.CashRegister который должен быть у animals/CashRegister.class.

Вы можете скомпилировать CashRegister с флагом -d в javac который скажет, куда положить сгенерированные .class. Таким образом, вам не придется вручную копировать файлы самостоятельно в подкаталог.

javac -d. CashRegister.java

Это должно положить файл CashRegister.class в каталог animals в текущем каталоге.

  • 0
    Спасибо, мистер Дэйв Конрад, -d действительно очень помогает.
  • 0
    Я все еще в замешательстве, но на более высоком уровне абстракции, SD - это все, что можно получить из вселенной в наши дни. -D действительно помогает, полностью устраняет некоторые расстройства. еще раз спасибо
Показать ещё 1 комментарий
1

Это не имеет смысла на основе вашего объяснения, но эта ошибка:

файл плохого класса:.\Файл класса CashRegister.class содержит неправильный класс: animals.CashRegister 1 error

Делает вид, что структура каталогов неверна. Этот файл должен находиться в таком подкаталоге:

.\animals\CashRegister

Используйте инструмент списка каталогов каталога dir или ls, чтобы проверить путь к вашему javac -cp. <dirs> Команда javac -cp. <dirs> верна.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню