2014-09-02 47 views
1

我想或多或少地掌握Java没有无边的拐倚在IDE的,所以我在赢得7的命令行模式下做到这一点......为了确保发生了什么。这两个源代码.java的工作,然后我在导入行中进行更改,然后出现错误(无需劳动!!!)。这是当它开始工作时的两段代码,然后是两条线来“运行它”,然后什么都不起作用。在java中更改import替代*使其不工作

它的本质是导入“thing.name;”不同于“导入的东西。*;” 我认为外卡焦点是使正是这种

/** 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是答案。完美的权利? 我抹掉中并行级别的.class所以它的查找类文件,我想到,在子目录:动物

现在我改变主此行的方式更加复杂stuffola准备,:

/** 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

目前还不清楚这些文件实际存在于哪里,或者它们是从哪里编译而来的。无论哪种方式,都有不匹配的地方。 – 2014-09-02 23:15:34

+0

/**一个类来测试CashRegister类*/ 进口动物。*;公共类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); } } – 2014-09-02 23:15:47

+0

ImaMain.java位于子目录C:\ temp_72 – 2014-09-02 23:17:09

回答

2

要么你叫java当你在子目录动物或您移动CashRegister.class文件了。

这与更改导入行无关。

1

这是没有根据你的解释意义,但这个错误:

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

使它看起来像目录结构不正确。此文件必须在这样的子目录:

.\animals\CashRegister

使用dirls目录列表工具来验证相对于你的javac -cp . <dirs>命令的路径是正确的。

1

I copy the created .class file into subdirectory: 'animals'

是的,但你留在你启动目录中的原始。现在有两个CashRegister.class文件,一个在顶级目录和一个子目录中的动物。当您再次运行javac时,它会看到存在CashRegister.class文件,但它包含名为animals.CashRegister的类,该类应位于animals/CashRegister.class中。

您可以使用-d标志将CashRegister编码为javac,该标志将告诉它将生成的.class文件放在哪里。这样,您就不必手动将文件自己复制到子目录中。

javac -d . CashRegister.java

这将会使CashRegister.class文件在animals目录在当前目录下。

+0

谢谢您,Mr.Dave Conrad -d真的有帮助很大。 – 2014-09-03 00:28:02

+0

我仍然感到困惑,但是在更高层次的抽象层面上,sd这些天都离开了宇宙。 -d确实有所帮助,完全可以消除一些混乱。再次感谢你 – 2014-09-04 15:24:49

+0

有时候,我们的目标只是为了在更高和更高的抽象层次上感到困惑,直到这个层次高于你想要做的事情的水平。 – 2014-09-04 15:49:50