Java | Пользовательский созданный пакет не существует - PullRequest
1 голос
/ 21 марта 2020

Цель

  • Я хочу иметь возможность создать пакет и вызвать его.
  • В качестве альтернативы я хотел бы создать отдельные файлы для моего метода (чтобы избежать наличия классов x в одном файле).

Настройка

Вот мой LetterGrader. java file:

package grade.util;
import java.util.*;
import java.io.*;

public class LetterGrader {
  private void readArgs() {
          System.out.println("Hello, read CLA!");
  }
}

Вот мой TestLetterGrader. java file:

import java.util.*;
import java.io.*;


public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}

Выполнение шагов

  1. Сначала я компилирую LetterGrader:
    • Этот авто создает файл bin / grade / util / LetterGrader.class

      java c -d bin -sourcepath sr c src / grade / util / LetterGrader. java

Вот мой рабочий каталог на данный момент

Во-вторых, я компилирую TestLetterGrader:
  • Это не удалось

javac -d bin -sourcepath sr c src / grade / util / TestLetterGrader. java

Сообщение об ошибке:

src/grade/util/TestLetterGrader.java:6: error: cannot find symbol
    LetterGrader letterGrader = new LetterGrader(); // instantiate
    ^
  symbol:   class LetterGrader
  location: class TestLetterGrader

Вопрос

  • Я считаю, что я неправильно понимаю, как вызывать классы из отдельных файлов (в том же месте). Как я могу выполнить 1064 * это?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Спасибо @ maratone c за руководство.

Моя первоначальная ошибка заключалась в том, что я неправильно понимал / неправильно назначал переменную присваивания classpath при запуске программы через терминал. Ниже помог мне.

Компиляция и запуск Java программы (на P C)

• Установка рабочего каталога (скажем, JavaBook) C:\> cd JavaBook

• Компиляция HelloWorld . java C:\JavaBook> javac -d bin src\HelloWorld.java

• Запустить программу C:\JavaBook> java -classpath bin HelloWorld

Кроме того, упрощенный подход ко всем файлам моих классов находится в одном месте. Мне не нужно было беспокоиться о classpath. Но не идеально, так как у меня много файлов для работы.

Что касается создания пакета, я собираюсь немного поиграться с java, прежде чем использовать его. Я думаю, что мне нужно укрепить свое понимание.

Спасибо за помощь!

0 голосов
/ 22 марта 2020

Вы импортируете класс, который находится в папке bin. Не делай так, чтобы это не сработало. Вам не нужно импортировать, потому что классы находятся в одном месте. Сделайте пакет в папке sr c и поместите туда классы. Удалите package grade.util и переименуйте его в пакет, в который вы помещаете классы.

Структура файла:

src
 \ 
  \
  yourpackage 
       \
        \
    LetterGrader.java   TestLetterGrader.java

Затем удалите все в папке сборки и скомпилируйте классы. Java сделает его магией c. Вам нужно беспокоиться о папке bin, она предназначена только для хранения скомпилированных классов.

Классы будут выглядеть так:

//package name that you created
package yourpackage;

public class LetterGrader {
//need to be public when calling from another class
public void readArgs() {
        System.out.println("Hello, read CLA!");
}
}

И

//folder that you placed the .java files
package yourpackage;
//without any import

public class TestLetterGrader {
  public static void main(String[] args) {
    LetterGrader letterGrader = new LetterGrader(); // instantiate
        letterGrader.readArgs(); // call method
  }
}

Ваш второй вопрос:

Вы можете использовать классы из других папок, но вы должны импортировать их, и они должны находиться в папке sr c.

Скажите, что у вас есть класс A. java в папке Second и класса B. java в папке Main. В этом случае вы импортируете папку import Second.A;, а затем вызываете класс A a = new A(); Если у вас есть метод, который вы хотите вызвать, просто выполните: a.yourmethod();

Вам нужно изменить private void ... на public void..., потому что вы не можете вызывать private вне класса.

Когда вы запускаете скомпилированные классы, они должны находиться в одной папке.

...