2016-08-21 4 views
0

Я совершенно новичок в Java и столкнулся с вопросом, что java-компилятор создает объект одного класса в другом классе. Например:Как компиляция Java создает объекты одного класса в другом классе?

У меня есть класс А, как показано ниже:

class A{} 

У меня есть класс B с основным методом:

class B { 

    public static void main(String[] args){ 

     A a = new A(); 

     System.out.println(a); 

    } 

} 

Вот вопрос: я написал класс А в одном отдельном текстовом файле и класс B в другом txt-файле. Когда я компилирую «Класс B» Как компилятор знает, что «класс A» существует, поскольку в классе B нет следа класса A. Мы не даем путь к классу A, и мы не даем никакой подсказки, чтобы существовал класс A. Но как компилятор java знает и создает объект для класса A в классе B. Это может быть глупый вопрос, но он не позволяет мне продолжать дальше без ответа. Заранее спасибо.

+0

компилятор Java на самом деле выглядит на жестком диске, чтобы найти эти файлы. Вы можете указать путь (ы), который он использует, чтобы искать их вручную с помощью опции -classpath. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html – markspace

+0

Компилятор не создает объект, он просто проверяет совместимость ссылочного типа и доступность этого класса во время компиляции (здесь класс A в классе B). Таким образом, загрузчик классов загружает класс A сначала, а затем загружает класс B, так как класс B зависит от класса A. Создание объекта происходит во время выполнения. Если вы понимаете время компиляции и время выполнения отдельно, большинство ваших сомнений будут решены. ref: http://stackoverflow.com/questions/20796046/flow-of-class-loading-for-a-simple-program, http: // www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html – dkb

+0

-http: //stackoverflow.com/questions/39060422/how-java-compiles-creates -bjects-of-one-class-in-another-class] Спасибо .. @dkb – Javabie

ответ

1

Когда классы находятся в одном пакете, компилятор автоматически их найдет. В противном случае вам нужно добавить выражение «import». Например, import example.classA;

+0

Спасибо .. Julieta ... – Javabie

0

При создании объекта Java есть две основные части: «Создание объекта» и «Создание ссылки на этот объект».
Компилятор проверяет только ссылочную часть. Это означает, что он проверяет тип ссылки (в вашем случае тип имеет класс A). Так что ему не важно, создан ли объект или нет.
Когда файл java скомпилирован, он создает файл .class, и компилятор знает, как найти и прочитать файл класса на локальном диске.

+0

[http://stackoverflow.com/questions/39060422/how-java-compiles-creates-objects-of-one-class-in-another-class] Спасибо @Lashitha Yapa – Javabie

0

Исходные файлы, написанные на языке Java, скомпилированы в файлы .class с помощью инструмента javac.

Есть две вещи, которые Javac нужно запустить:

1) список исходных файлов для компиляции 2) список дорожек на жестком диске, где другие .class или .java (или банки) файлы находятся, если вы ссылаетесь на них в своем исходном коде. Этот список путей называется classpath.

Если вы не указываете аргумент classpath при вызове javac, javac использует ваш текущий каталог для поиска поддерживающих файлов .java или .class (и если у вас есть переменная среды CLASSPATH, она также выглядит там).

В вашем примере, когда javac компилирует ClassA, он видит, что он полагается на ClassB и пытается искать ClassB.java в том же каталоге, что и ClassA.

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

Вы можете прочитать больше о JAVAC здесь: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

+0

Спасибо вы @jrahhali – Javabie

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