Проблема новичка в Java: классы одного и того же пакета обращаются друг к другу? - PullRequest
4 голосов
/ 03 мая 2010

Классы принадлежат одному и тому же ПКГ. Они в рубрике, имя ПКГ.

  • В общем, как классы могут обращаться друг к другу в одном и том же файле?

Error

javac PackTest.java
PackTest.java:8: cannot find symbol
symbol  : class PriTest
location: class pacc.PackTest
  System.out.println(new PriTest().getSaluto());
                         ^
1 error

Классы в пакете PKG

$ cat PackTest.java 
package pacc;
import java.io.*;

public class PackTest
{
    public static void main(String[] args)
    {
        System.out.println(new PriTest().getSaluto());
    }
}
$ cat PriTest.java 
package pacc;

public class PriTest
{
    public PriTest(){}
    private String saluto="SALUTO FROM PriTest";
    public String getSaluto(){return saluto;}
}

PKG имени реж.

$  find .. -type d -name "pacc"
../pacc
$ ls ../pacc 
makefile  PackTest.java  PriTest.java
$ ls
makefile  PackTest.java  PriTest.java

Решено!

$ cat makefile 
p:
    javac ./pacc/PackTest.java
    java pacc/PackTest
$ make p
javac ./pacc/PackTest.java
java pacc/PackTest
SALUTO FROM PriTest

Ответы [ 5 ]

6 голосов
/ 03 мая 2010

Убедитесь, что файлы находятся в одном каталоге с тем же именем, что и пакет. Также убедитесь, что путь к классам установлен правильно.

Пакеты имитируют структуру каталогов - «Test.java» в пакете «org.example.test» можно найти в «org / example / test / Test.java».

Следующие файлы для меня скомпилированы:

 $ javac -cp "." *.java

И я побежал с

 $ cd ..
 $ java pacc.PackTest

Здесь нет проблем.

Кстати, Apache Ant обычно предпочитают make-файлам во вселенной Java.

2 голосов
/ 03 мая 2010

МОЖЕТ (так что не убивайте меня, пожалуйста), это решение:

В терминале перейдите в корень вашего Java-проекта (поэтому пакет по умолчанию, в вашей ситуации, родительский каталог папки pacc).
Затем введите: javac pacc.PackTest.java

Я не использую компилятор вручную. Моя IDE делает это для меня.

1 голос
/ 03 мая 2010

Если вы привыкли к подходу C и C ++ к компиляции каждого файла отдельно, вы можете быть удивлены, узнав, что компилятор Java работает лучше всего, когда вы даете ему весь проект для компиляции всего сразу.

Apache Ant - это часто используемый инструмент для создания Java-проектов. Он делает работу по вызову javac для вас. Это работает лучше для Java, чем make(1).


Компилировать как:

H:\test\so>javac pacc/PackTest.java pacc/PriTest.java

Вы должны находиться в root вашего проекта, а не в папке pacc.

0 голосов
/ 05 мая 2010

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

А до тех пор полезно подумать над этими проблемами, чтобы глубже понять разработку Java.

Что касается ANT, то сейчас стоит потратить время на это. Makefiles не предлагает вам дальнейшего обучения программированию.

0 голосов
/ 03 мая 2010

Получить иде, как IntelliJ IDEA. Java настолько сложна и раздута, что поможет, так что вам даже не придется заниматься такими банальными вещами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...