2014-09-02 17 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