Я пытаюсь более или менее освоить 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
Либо вы называете java
когда находитесь в подкаталоге животных, либо перемещаете файл CashRegister.class
.
Это не имеет никакого отношения к изменению линии импорта.
Я копирую созданный файл.class в подкаталог: "животные"
Да, но вы оставили оригинал в каталоге, в котором вы начали. Теперь есть два файла CashRegister.class, один в каталоге верхнего уровня и один в подкаталоге животных. Когда вы запускаете javac
снова, он видит, что есть файл CashRegister.class, но он содержит класс с именем animals.CashRegister
который должен быть у animals/CashRegister.class
.
Вы можете скомпилировать CashRegister с флагом -d
в javac
который скажет, куда положить сгенерированные .class
. Таким образом, вам не придется вручную копировать файлы самостоятельно в подкаталог.
javac -d. CashRegister.java
Это должно положить файл CashRegister.class в каталог animals
в текущем каталоге.
Это не имеет смысла на основе вашего объяснения, но эта ошибка:
файл плохого класса:.\Файл класса CashRegister.class содержит неправильный класс: animals.CashRegister 1 error
Делает вид, что структура каталогов неверна. Этот файл должен находиться в таком подкаталоге:
.\animals\CashRegister
Используйте инструмент списка каталогов каталога dir
или ls
, чтобы проверить путь к вашему javac -cp. <dirs>
Команда javac -cp. <dirs>
верна.