2013-07-15 42 views
1

嗨,我正在玩弄創建Java包。Java導入包錯誤

我在名爲admin的文件夾中創建了一個名爲Employee的文件,這個文件正確編譯。在這個包之外,我有另一個導入它的java文件。這是源代碼。

import java.util.*; 
// this works --> import admin.Employee; 
import admin.*; // this doesn't 

public class Hello { 
    public static void main(String[] args) { 
     Employee h = new Employee("James", 20000); 
     System.out.println(h.getName()); 
    } 
} 

奇怪的是,第二個import語句工作正常,但與第三個我得到

  • 無法訪問Employee
  • 糟糕的類文件:./Employee.class

我只用javac Hello.java編譯

員工類在包管理員中。結構爲

該文件夾外部的文件夾「admin」 - >包含「Employee.class」和「Employee.java」 是hello.java文件。

package admin; 
import java.util.*; 

public class Employee 
{ 
private static int nextId; 

private int id; 
private String name = ""; 
private double salary; 

// static initialization block 

static 
{ 
    Random generator = new Random(); 
    // set nextId to a random number between 0 and 9999 
    nextId = generator.nextInt(10000); 
} 

// object initialization block 
{ 
    id = nextId; 
    nextId++; 
} 

// three overloaded constructors 
public Employee(String n, double s) 
{ 
    name = n; 
    salary = s; 
} 

public Employee(double s) 
{ 
    // calls the Employee(String, double) constructor 
    this("Employee #" + nextId, s); 
} 

// Default constructor 
public Employee() 
{ 
    // name initialized to ""--see below 
    // salary not explicityl set--initialized to 0 
    // id initialized in initialization block 
} 


public String getName() 
{ 
    return name; 
} 

public double getSalary() 
{ 
    return salary; 
} 

public int getId() 
{ 
    return id; 
} 
} 
+0

您是否將班級Employee公開? – rAy

+0

什麼是Employee類的訪問說明符? – Abubakkar

+4

你能告訴我們'Employee'的源代碼,你的包結構以及你如何編譯這些文件? – NINCOMPOOP

回答

1
package admin; 

import java.util.*; 

public class Employee 
{ 

Employee.java應在目錄admin。例如

./Hello.java 
./admin/Employee.java 
+0

我做了這兩件事。當我將代碼複製並粘貼到堆棧溢出時,「package admin;」被省略 – jimbo123

0

在不改變代碼(無添加包聲明,這是我認爲這個問題的深意),基本解決將是兩種:

  • 編譯這兩個班一起器(javac Hello.java管理員/ Employee.java)
  • 包含在類路徑中管理文件夾在編譯時(到與.class文件管理文件夾所在-cp路徑,假設這是已經被編譯)

當你告訴它導入admin.Employee,並且它在同一個源文件夾中時,編譯器可以推斷出你想隱式編譯。在導入admin。*時,需要在命令行中包含.java文件,或者將.class文件包含到.class文件中,以便編譯。

+0

對不起,但我不完全明白。它們都單獨編譯好。我將Employee類放入一個包中,然後將其導入到另一個文件中,以查看它是否會以這種方式工作。我認爲如果我找到另一個教程會更好。我的書沒有很好地解釋這一部分。 – jimbo123