2013-07-15 6 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()); 
    } 
} 

Странная вещь, что второй оператор импорта работает нормально, но с третьим я

  • не может получить доступ к Employee
  • плохой класс файла: ./Employee.class

Я просто используя javac Hello.java для компиляции

класс сотрудника находится в пакете admin. Структура

папка «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

Что такое спецификатор доступа для класса «Сотрудник»? – Abubakkar

+4

Можете ли вы показать нам исходный код 'Employee', структуру вашего пакета и как вы компилируете файлы? – NINCOMPOOP

ответ

1
package admin; 

import java.util.*; 

public class Employee 
{ 

также Employee.java должны находиться в директории admin. например

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

Я делал обе эти вещи. Когда я копирую и вставляю код в переполнение стека «администратор пакета»; был опущен – jimbo123

0

без изменения кода (без добавления описания пакетов, который является то, что я думаю, что этот вопрос действительно просят), основное исправление будет либо:

  • Компиляция обоих классов вместе (Javac Hello.java админ/Employee.java)
  • Включить в папку администратора в вашем пути к классам во время компиляции (-cp путь туда, где админ папка с .class файл находится, при условии, что уже составлен)

Когда вы укажете ему import admin.Employee, и он находится в той же исходной папке, компилятор может сделать вывод, что вы хотите, чтобы он неявно был скомпилирован. Когда вы импортируете admin. *, Вам нужно включить файл .java в командной строке или включить classpath в файл .class для его компиляции.

+0

Извините, но я не совсем понимаю. Они оба компилируются штрафом отдельно. Я поместил класс Employee в пакет, а затем импортировал его в другой файл, чтобы убедиться, что он будет работать именно так. Я думаю, было бы лучше, если бы я просто нашел другой учебник. Моя книга не очень хорошо объясняет этот раздел. – jimbo123

Смежные вопросы