«импорт» в Java против «#include» в C / Stack Overflow

Действует ли «импорт» в Java так же, как «#include» в C / C ++? В частности, будет ли он включать всю библиотеку, которую он импортирует, или он будет просто включать классы и методы, которые вызываются в последующем коде?

19

Решение

#include не выполняет ни того, ни другого, ни «импорта» библиотек, ни классов, ни модулей.

#include директива просто говорит препроцессору включать содержимое другого текстового файла (источника). Это все.

Результат предварительной обработки файла А #includeЭтот файл B передается компилятору, как если бы он был одним файлом, причем файл B вставляется в файл A в том месте, где #include Директива была размещена.

Чтобы объяснить это так: все это происходит предшествующий для любой компиляции, генерации кода.

В качестве побочного эффекта препроцессор C / C ++ может использоваться независимо от компилятора для обработки любой вид ввода текстового файла.

Можно утверждать, что операторы препроцессора, такие как #include «на самом деле не являются частью языков C / C ++», поскольку они по сути не нужны для написания каких-либо программ на C / C ++, поскольку они никогда не передаются компилятору.

Выражение import не используется в контексте (стандартного) программирования на C / C ++, так как нечего импортировать.

Модули C / C ++ объединяются либо на уровне исходного кода предшествующий для компиляции или компоновщика после сборник.

24

Другие решения

#include<stdio.h> означает скопировать содержимое stdio.h в этот файл,
в то время как import java.util.ArrayList означает, что если вы не можете найти класс в этом файле, посмотрите на вышеупомянутое местоположение импорта. Импорт Java не увеличивает размер вашего файла, он просто экономит несколько нажатий клавиш.

8

В Java, когда вы используете importВы импортируете либо:

  • один класс: import foo.bar.Baz
  • полный пакет: import foo.bar.*
  • один статический член класса: import static foo.bar.Baz.GRUT
  • каждый статический член класса: import static foo.bar.Baz.*
6

C / C ++ #include Директива происходит на этапе предварительной обработки, и на простом английском языке она означает «в этом месте вставьте весь заголовочный файл (или любой текстовый файл, если хотите), который указан в качестве параметра». Новый стандарт C ++ будет иметь модули (наконец) и может быть или не быть похожим на импорт Java (зависит от того, как он будет реализован). Подробнее об этом предложении C ++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3347.pdf

В Java 8 также будет улучшена поддержка модульного программирования. Увидеть: http://openjdk.java.net/projects/jigsaw/

2

Зависит от того, что вы на самом деле импортируете. Самый маленький импортируемый объект — это класс, самый большой — пакет.
Так что если вам нужен один класс и импортировать полный пакет, он принесет полный пакет.

0

Я думаю, что один аспект, который другие ответы могли бы не прояснить относительно

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

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

0

импорт (в Java) аналогичен использованию (в C ++) —
Как вы понимаете, они не совсем одинаковы, но очень похожи.

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

включите — Свен объяснил это лучше здесь — https://stackoverflow.com/a/3739563/135553

0

В общих чертах:

На языке c, когда компилятор сталкивается с оператором #include, все указанные файлы заголовков будут загружены только во время оператора include, независимо от того, используем мы эти файлы заголовков или нет. Следовательно это называется статическим связыванием.

Но в случае языка Java, когда компилятор встречает оператор импорта, файл .class не будет загружен во время оператора импорта. В следующих строках кода всякий раз, когда мы используем класс, будет загружен только соответствующий файл .class. Этот тип загрузки называется динамической загрузкой или загрузкой по требованию или загрузкой на лету.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector