• ベストアンサー

JAVAで外部ファイルをインクルード

JAVAの初心者です。 Cのヘッダファイルみたいに、自分で作った外部ファイルをインクルードするには import 文を使ってメインのクラスの前にいれれば良いとおもうのですが、その 認識で間違ってないでしょうか。 また、そのファイルは、あらかじめコンパイル済みである必要があるのか、読み込み側となるソースファイルと同じディレクトリにおいておけば単純にコンパイルが済むのか。 説明が伝わりにくいかと思いますが、どうかよろしくお願いします。

  • alx
  • お礼率97% (112/115)
  • Java
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

javaのimport文は、C言語のインクルードとは全く違います。 C言語の#includeは、他のソースファイルを自分のソースに挿入することを意味しますが、 javaのimport文は、パッケージ名を省略したクラスのパッケージ名をコンパイラに教えるためのものです。 従って、ソースファイル中のクラス名を完全な形で記述するなら、import文は書く必要がありません。 例えば、java.util.ArrayListを使いたい場合、 ソース中の記述を全て、 java.util.ArrayList list = new java.util.ArrayList(); のように、パッケージまで指定するのであれば、 import java.util.ArrayList; の記述は必要ありません。 逆に、 ArrayList list = new ArrayList(); のように記述したいのであれば、ArrayListがどのパーケージのものかをコンパイラに教えるため、 import java.util.ArrayList; あるいは、 import java.util.*; の記述が必要です。

alx
質問者

お礼

詳細な回答ありがとうございました。 たぶん、C の#define みたいなものかと自分なりに理解してみました。 持っていた書籍が初心者向けなため、パッケージの作り方まで指南がありませんでしたが、お答えをきっかけに情報を集め自作することができました。 これからもコツコツ精進していきたいと思います。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

CのインクルードとJavaのimportでは概念が違います。 #includeでは、ソースファイルをそこに挿入するわけですが、 importはパッケージ外のクラスを使えるようにするものです。 importするものは、ソースファイルではなく、 コンパイルして.classファイルにしておく必要があります。 (ただし適切なディレクトリに置いておけば、 自動的にコンパイルしてくれます) 同じパッケージのクラスファイルは、 importする必要はありません。 で「同じパッケージ」というのは、二つ意味があります。 package文を使った場合で、同じパッケージ宣言をしていること。 package文を使わない状態(無名パッケージ)で、 同じディレクトリに入っていること、です。

alx
質問者

お礼

ありがとうございました。 お教えていただいた情報を元に調べてみた結果、 ようやく概念がわかりました。 たぶん、C の#define みたいなものかと。

関連するQ&A

  • javaを使用しています。

    Java初心者です。Javaのバージョンは6で、Program Fileの中にインストールしました。 現在、Javaを使用しているのですがコンパイルの実行をするために javac ソースファイル名を入力したのですが、「Javacは内部コマンドまたは外部コマンド 操作可能なプログラムまたはバッチファイルとして認識されていません」と出ます。この場合、なにが原因だと思いますか? 後、ディレクトリを移動するためにCドライブにファイルを作りました。 メモ帳を使用し、ソースファイルを作成し、ファイル名はSample1.javaとしましたが、このファイルを保存するときは作成したディレクトリに保存すればいいのでしょうか?

    • ベストアンサー
    • Java
  • ヘッダーファイルでは、他のヘッダーファイルをインクルードできないのか

    Javaを仕事で使っています。 最近趣味でC++を始めました。色々形式の違いに戸惑っています。 C++では関数を宣言しなければならないので、クラス名と同じヘッダーファイルにそのクラスで使う関数を宣言して、それをインクルードしています。 そこで今、壁にぶちあたりました。 あるクラス(仮にFooとします)の関数で、他のクラス型(Hogeとします)を引数に取りたいので、ヘッダーファイルにそれを宣言しようとしているのですが、コンパイルエラーになってしまいます。 Foo.hは以下のような感じ。 #include Hoge.h 中略 GetHoge(Hoge hoge); コンパイルエラーでは error C2011: 'Hoge' : 'class' 型の再定義 などと言われます。 クラスとその同名のヘッダーファイル、という形式を変えずに 他のクラス型を引数にとる関数を作るには、どうしたらよいのでしょうか? C++に関しては全くの素人です。詳しい方、ご教示願います。

  • GCCの#includeパスの設定方法?

    RedHat Linux 8.0をインストールしています。adaptec社のAHA1542を使いたいのですが、自動認識してくれません。 色々調べた結果、/etc/modules.confに alias scsi_hostadapter aha1542.o を記述する事で、使用可能と言う事がわかりました。 しかし私のシステムでは、aha1542のソースとヘッダーファイルはありますが、オブジェクトがありません。 GCCにてコンパイルさせたら、大量のエラーメッセージが出力されます。ソースを見ると、 1) #include <linux/******.h> 2) #include <asm/*****.h> 3) #include "*****.h" と3種類の#include文があります。 3)は、ソースと同一ディレクトリーでOKだと思いますが、他の2種類のパスの設定方法がわかりません。 <linux/ <asm/ の部分を自分のシステムに合ったパスに置き換える(GCCに認識させる)には、どうすれば良いのでしょうか? どうか、宜しくお願い致します!

  • JavaでAPIのI/Fはどう認識してるのか?

    例えば、C言語だと、 リンクの画面で、.lib を指定したり、 使いたいクラスのヘッダファイルをincludeすることで、 自分が作っているプログラムが、「他のクラスを使える」という状況になると思っています。 で、JAVAでは、 どのような仕組みで、他のクラスや、APIのI/Fを認識しているのでしょうか? 特に、色んなアドオン?API? は、jar提供が多いと思うのですが、 クラスファイルすらないと、I/Fを認識しようにも、認識できないのでは?と感じています。 また、以下の認識は正しいでしょうか? クラスファイルが提供されている場合は、classpathを設定すると、 そのディレクトリ配下のクラスのインタフェースを認識できる。 ※また、できれば、C言語での 「ヘッダファイルをincludeすること」と「リンクの画面で、.lib を指定すること」の意味の違いを知りたいです。 どちらも、「他のクラスのインタフェースを認識するためにすること」であるのに、 どうしてそれぞれが必要なのでしょうか?? .

    • ベストアンサー
    • Java
  • JAVAのSIPのAPIの使い方について

    JAVAでSIPのAPIを利用しようと試みているのですが、なかなか上手くいきません。 サンプルを見つけて、トライしているのですが、コンパイル時に エラーとなり先へ進むことが出来ません。 ソース http://liffey2.ld.infoseek.co.jp/java/jain/Example.txt 上記ソースの初めに import jain.protocol.ip.sip.*; import jain.protocol.ip.sip.address.*; import jain.protocol.ip.sip.header.*; import jain.protocol.ip.sip.message.*; とあるので、このようにディレクトリを作成して 各クラスファイルを設置しても、エラーとなります。 とりあえず、上記ソースがコンパイルできるようには どういった手順を踏めば宜しいでしょうか? もしくは、JAVAのSIPのAPIの使い方が分かりやすく説明がある サイトがあればそういったサイトを教えて頂けると非常にありがたく思います。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • VC++のインクルード方法について

    VC++2008にて他フォルダファイルをincludeしたいと思いましたが ディレクトリが異なる為に、 4>d:\vss\xlmap\lib\fmfc\fmDbfFile.h(6) : fatal error C1083: include ファイルを開けません。'shapefil.h': No such file or directory と、エラーが出てしまい、コンパイルができません。 どのようにヘッダーファイルをincludeすればよいのでしょうか? お力添えして頂けたら幸いです。 宜しくお願いします。

  • コンパイルエラー「include ファイルを開けません」

    あるプログラムをコンパイルしたところ、 下記コンパイルエラーが発生しました。 ヘッダファイルが開けないようなのですが、 これは自分の開発環境に必要なファイルが足りないのでしょうか? 解決する方法が分からないので、ご存知の方おられましたら ご教示お願い致します。 環境はVC++2005でフルインストールしています。 fatal error C1083: include ファイルを開けません。'WtsApi32.h': No such file or directory

  • java import文のエラー

    javaのソースで、パッケージをimportして使用するための簡単なサンプルを作成しました。 import文でクラス名まで指定すれば問題ないのですが、*を利用するとコンパイルエラーとなってしまいます。 コンパイル時にクラスパスを指定するのかと思って試してみましたが、やはりエラーでした。 回避方法をご存知の方いらっしゃいましたら、教えていただけますでしょうか。 なお、java/javacは、1.5.0_14を使用しています。 ■ソースコード(1) <C:\Work\Test\PackTest.java> package Test; public class PackTest{   public static void methodA(){     System.out.println("パッケージ成功");   } } ■ソースコード(2) <C:\Work\UsePack.java> import Test.*;     //import Test.PackTest; なら成功 class UsePack{   public static void main(String args[]){     PackTest.methodA();   } } ■エラー例(1) >javac -d . PackTest.java (これは成功) >javac UsePack.java   UsePack.java:5: PackTest にアクセスできません。   クラスファイル .\PackTest.java は不正です。   ファイルにクラス PackTest が含まれていません。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。     PackTest.methodA(); ■エラー例(2) >javac -d . PackTest.java (これは成功) >javac -classpath C:\Work\Test UsePack.java   UsePack.java:1: パッケージ Test は存在しません。   import Test.*;   ^   UsePack.java:5: PackTest にアクセスできません。   クラスファイル C:\Work\Test\PackTest.class は不正です。   クラスファイル Test.PackTest に不正なクラスがあります。   削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。      PackTest.methodA();      ^

  • ヘッダファイルを使わずに定義する方法

    新しい関数を使ったソースを古いOSでコンパイルすると、外部シンボル...Aが未解決になります。 ヘッダファイルでその関数のプロトタイプを書くとコンパイル可能になると思いますがヘッダファイルを使わずに*.cppにプロトタイプを書くようなことは可能ですか? __declspec(import) DWORD Win7OnlyEx(LPTSTR);

  • 自作インクルードファイル

    こんにちわ。 いまVC++6.0で開発しようとしています。 自作のincludeファイルを作成し,親プログラムをコンパイルしようと しますが,そのincludeファイルが親プログラムと同じパスに あるときはコンパイルできますが, 別のフォルダに置くと, fatal error C1083: インクルード ファイルがオープンできません。 'XXXXXX.H': No such file or directory cl.exe の実行エラー と出てしまいます。 そこで[設定]の"インクルードファイルのパス"の箇所を 自作インクルードファイルがある場所に設定したのですが, やはり同じエラーメッセージが出ます。 どうすれば読めるようにできるのでしょうか? 教えてください。 よろしくお願いします。

専門家に質問してみよう