21

Java の「インポート」は C/C++ の「#include」と同じように動作しますか? 具体的には、インポートするライブラリ全体が含まれますか、それとも後続のコードで呼び出されるクラスとメソッドのみが含まれますか?

4

9 に答える 9

26

#includeライブラリもクラスもモジュールも「インポート」しません。

この#includeディレクティブは、別のテキスト ファイル (ソース) の内容を含めるようにプリプロセッサに指示するだけです。それで全部です。

ファイル A とファイル B の前処理の結果は#include、1 つのファイルであるかのようにコンパイラに渡され、ファイル B はファイル A の#includeディレクティブが配置された位置に貼り付けられます。

これを明確に述べると、これはすべて、コンパイル、コード生成の前に発生します。

副作用として、C/C++ プリプロセッサをコンパイラから独立して使用して、あらゆる種類のテキスト ファイル入力を処理することができました。

「実際には C/C++ 言語の一部ではない」などのプリプロセッサ ステートメント#includeは、コンパイラに渡されることはないため、C/C++ でプログラムを記述するのに本質的に必要ないため、と主張する人もいるかもしれません。

importインポートするものがないため、式は (標準) C/C++ プログラミングのコンテキストでは使用されません。

C/C++ モジュールは、コンパイル前にソース レベルで、またはコンパイルにリンカーによってまとめられます。

于 2012-11-22T17:34:45.410 に答える
7

Java では、 を使用する場合import、次のいずれかをインポートします。

  • 単一のクラス:import foo.bar.Baz
  • フルパッケージ:import foo.bar.*
  • クラスの単一の静的メンバー:import static foo.bar.Baz.GRUT
  • クラスのすべての静的メンバー:import static foo.bar.Baz.*
于 2012-11-22T17:35:06.097 に答える
2

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/

于 2012-11-22T18:07:51.620 に答える
1

cに関して他の回答がクリアしていない可能性のある側面の1つは、

include in c は、関数プロトタイプを含むプリプロセッサ フェーズのヘッダー ファイルをコピーするだけで、それ以上はコピーしません。実際の関数定義は、基本コードのコンパイル後、リンク時にまだ配置されています。

ソース ファイルではなくヘッダー ファイルをインクルードし、コードから関数を呼び出すことで、簡単な検証を行うことができます。コンパイル エラーは発生せず、リンク時にのみ、定義が見つからないというエラーが表示されます

于 2013-10-25T05:42:21.807 に答える
0

import (Java の場合) は using (C++ の場合) に似ています。

import は、現在のクラスで使用されているクラス (またはサブパッケージ) を見つけることができるコンパイラを示すことです。

include - Sven はここで説明しました - https://stackoverflow.com/a/3739563/135553

于 2016-07-01T05:14:51.030 に答える
0

実際に何をインポートするかによって異なります。インポート可能な最小のエンティティはクラスであり、最大のエンティティはパッケージです。
したがって、単一のクラスが必要で完全なパッケージをインポートする場合、完全なパッケージが取り込まれます。

于 2012-11-22T17:34:35.130 に答える