Javaの 'import'はC/C++の '#include'と同じように動作しますか?具体的には、インポートするライブラリ全体が含まれますか、それともクラスと後続のコードで呼び出されるメソッド?
#include
は、ライブラリの「インポート」も、クラスやモジュールも、両方を実行しません。
#include
ディレクティブは、別のテキストファイル(ソース)の内容を含めるようにプリプロセッサに指示するだけです。それで全部です。
ファイルA#include
ingファイルBの前処理の結果は、ファイルBが#include
ディレクティブが配置された位置でファイルAに貼り付けられた状態で、1つのファイルであるかのようにコンパイラーに渡されます。
わかりやすく説明すると、これは次のようになります。これはすべて、コンパイル、コード生成に対して前発生します。
副作用として、C/C++プリプロセッサをコンパイラとは独立して使用して、any種類のテキストファイル入力を処理することができます。
#include
のようなプリプロセッサステートメントは、コンパイラに渡されることがないため、C/C++でプログラムを作成するために本質的に必要ではないため、「実際にはC/C++言語の一部ではない」と主張することができます。 。
式import
は、インポートするものがないため、(標準の)C/C++プログラミングのコンテキストでは使用されません。
C/C++モジュールは、ソースレベルで前コンパイル前に、またはリンカー後コンパイルによってまとめられます。
#include<stdio.h>
は、このファイルのstdio.hの内容をコピーすることを意味し、import Java.util.ArrayList
は、このファイルでクラスが見つからない場合は、上記のインポート場所を調べてください。 Javaインポートによってファイルのサイズが大きくなることはなく、キーストロークを数回節約するだけです。
Javaでは、import
を使用すると、次のいずれかをインポートします。
import foo.bar.Baz
import foo.bar.*
import static foo.bar.Baz.GRUT
import static foo.bar.Baz.*
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/
Cに関して他の答えがクリアされていないかもしれない1つの側面は、
include in cは、関数プロトタイプを含むプリプロセッサフェーズのヘッダーファイルのみをコピーし、それ以上はコピーしません。実際の関数定義は、基本的なコードのコンパイル後もリンク時に配置されます。
ヘッダーファイルをインクルードし、ソースファイルをインクルードしてコードから関数を呼び出すことで簡単な検証を行うことができます。コンパイルエラーは発生せず、リンク時にのみ定義が見つからないと文句を言います。。
一般的に:
C言語では、コンパイラーが#includeステートメントを検出すると、それらのヘッダーファイルを使用しているかどうかに関係なく、指定されたすべてのヘッダーファイルがインクルードステートメント時にのみロードされます。したがって、静的バインディングと呼ばれます。
ただし、Java言語の場合、コンパイラがインポートステートメントを検出すると、インポートステートメントの時点で.classファイルはロードされません。その時点でクラスを使用している場合は常に次のコード行で対応する.classファイルのみがロードされます。このタイプのロードは、動的ロードまたはロードオンデマンドまたはロードオンフライと呼ばれます。
実際にインポートするものによって異なります。最小のインポート可能なエンティティはクラスであり、最大のエンティティはパッケージです。
したがって、単一のクラスが必要で、完全なパッケージをインポートすると、完全なパッケージが取り込まれます。
import(Javaの場合)は(C++の場合)の使用に似ています-ご存知のとおり、これらは完全に同じではありませんが、非常に似ています。
importは、現在のクラスで使用されているクラス(またはサブパッケージ)を見つけることができるコンパイラーを示します。
含める-スヴェンはここでそれをよりよく説明しました- https://stackoverflow.com/a/3739563/13555