2015-09-23 7 views
2
public class a { 
public static void main(String[] args) { 
    System.out.println("Hello, World"); 
    } 
} 

Для приведенного выше кода я могу запустить его javac a.java, а затем java a.Когда я должен установить путь класса?

Но если добавить пакет для него:

package hello; 
public class a { 
public static void main(String[] args) { 
    System.out.println("Hello, World"); 
    } 
} 

Мне нужно добавить путь к классам -cp, чтобы запустить его: Java -cp ../ hello.a

Почему я не нужно установить classpath в первой ситуации? Когда мне нужно добавить -cp?

+0

Я думаю, было бы полезно сначала понять, что такое classpath [см. здесь] (http://stackoverflow.com/questions/2396493/what-i s-а-классы-спутать-и-необходимость-а-человеческое касание для понимания) –

ответ

1

Чтобы ответить на ваш вопрос

Когда я должен установить свой путь к классам

Всегда,, как вы работаете над более сложными проектами вы обнаружите, что ваш путь к классам почти всегда должны быть установлены , Это будет сделано вручную, как вы сделали с командой -cp или вашей IDE.

Чтобы ответить на ваш второй вопрос

Почему мне не нужно, чтобы установить в путь к классам первой ситуации

сначала я должен объяснить немного о к классам. Вкратце classpath существует, чтобы указать VM, где искать ваши файлы. В первой ситуации, так как у вас не было пакета, расположение по умолчанию было использовано для поиска вашего класса, поэтому не было необходимости в classpath. Однако, когда вы сложные вещи и добавлен пакет в этот момент нужен был путь к классам

1

Путь к классам находится там, где java (программа) ищет классы. По умолчанию содержит кучу общесистемных вещей (для JDK), а затем также текущий каталог: ..

Без линии package ваш класс находился в «пакете по умолчанию», который в принципе не представляет собой пакет. Это означает, что его полное имя a (более или менее), и Java будет искать его в файле с именем $CP_ELEM/a.class для каждого элемента CP_ELEM в пути к классам. В случае по умолчанию это составляет ./a.class, что отлично, потому что этот файл существует.

С линией package ваш класс находится в пакете hello, а его полное имя hello.a. Это означает, что java будет искать его в $CP_ELEM/hello/a.class, что составляет ./hello/a.class - которого не существует. Но если каталог, в котором вы находитесь, называется «привет», то java -cp .. hello.a, что составляет поиск в ../hello/a.class, будет работать.

1

Classpath, как сообщает систему, где найти мои классы:
Если у вас нет Java-классов будет пытаться загрузить класс
из каталога по умолчанию (возможно, там, где вы выполняете команду).

Теперь, скажем, вы кладете скомпилированные классы в папке «Bin» и источниках в папке «Src»
Чтобы сообщить системе, чтобы загрузить классы из «бункера» папка, которую вы должны дать ему следующий параметр : -cp bin;


Также я вижу, что вы не понимаете систему упаковки в Java так вот быстро объяснить:
Упаковка, как вы каталог вашего класса, например:
Если вы установили пакет класса в package a;, а ваш каталог пути к каталогу установлен в «bin»
Вам необходимо создать папку «a» в папке «bin», а затем переместить скомпилированный класс там, сделать то же самое для источника файл, но в папке «Src»

Просто сказать, что вы могли бы использовать затмение, которое находится по адресу: http://www.eclipse.org

Если это не поможет, тогда взгляните на это: https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

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