• 締切済み

パッケージについて

いつもお世話になってます。今回は異なるパッケージについてお聞きしたいのですが、違うパッケージのクラスを利用するのには、クラスの先頭にpublicをつけ、利用するときはパッケージ名・クラス名とするか、importを使うかしますよね。そこで、違うファイルは違うフォルダに保存してても実行できるのですか?あと、いくらコンパイルしようとしても、シンボル処理できませんと、利用しようとするクラス、パッケージが出てきます。やはり、同じディレクトリ内でないといけないのか、教えてください。

  • Java
  • 回答数3
  • ありがとう数2

みんなの回答

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> CLASSPATHに追加しろとはどういうことでしょうか? クラスを探しに行くところを教えてあげないといけません。 やりかたは二通り。環境変数で設定するか java を動かすときの オプションで指定するか。 環境変数の設定方法は、OSに依存するのですが FAQ のサイトが 参考になるでしょうか(→参考URL)。 > またまたa-kumaさん、お世話になります(^^)。 実は、私 Java は初心者です。今度、業務で使うはめになり、 勉強がてら回答しています。正確な情報を発信するようには 努めてますが、間違いがあったときには ご容赦 を m(_ _)m

参考URL:
http://www.gimlay.org/~andoh/hatena/java/S004.html#S004-01
koujin
質問者

お礼

返事が遅くなってすみません。 まだイマイチわかってないですが、 とりあえず、参考URLは非常に役立ちそうなので、 もう少し勉強してみます。ありがとうございました。

  • snnk
  • ベストアンサー率60% (3/5)
回答No.2

違うpackage名の物を同一のディレクトリ下で使用しているのでは? もしくは対象パッケージ位置が存在しないか、classpathが指定されていないかでしょう。 例えば、 package hoge1 class Hogehoge1 package hoge2 class Hogehoge2 class Hogehoge という3つのクラスがあるとします。 クラスHogehogeには、パッケージ宣言がされていません。 で、/上にこのファイルを置いているとします。 この場合、Hogehoge1.classは、/hoge1下にHogehoge2.classは、/hoge2下に置いておく必要があります。 /Hogehoge.class /hoge1/Hogehoge1.class /hoge2/Hogehoge2.class という事です。 (この場合、/にはpathが通っていないとダメですけど。)

koujin
質問者

補足

細かい回答ありがとうございます。先ほど、a-kumaさんの補足にも書かせていただきましたが、PATHが通ってないといけないとはどういうことでしょうか?あと、hogehogeのディレクトリの中にhoge1が、さらにその下にhoge2があると言う事で良かったですか? 良ければ、a-kumaさんの補足のほうも見ていただいて回答頂けるとうれしいです。よろしくお願いします。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

Java は良く知らないのですが、その違うファイルが配置されているところを CLASSPATH に追加しろ、ということなのではないですか?

koujin
質問者

補足

またまたa-kumaさん、お世話になります(^^)。 そしてまたしても初歩的質問でCLASSPATHに追加しろとはどういうことでしょうか?snnkさんにも同じようなことを言われていますが、よく分かりません。またしても、コードを記入しておきます。(今回はタイプミスではないと思うのですが・・) お願いします。 package pg; (pgとパッケージにする) //車のクラス public class Car { private int num; private double gas; public Car() { num = 0; gas = 0.0; System.out.println("車を作成しました"); ~(略)~ ここから違うファイルにします。 package pb; (pbのパッケージにする) import pg.Car; (ここでpgをインポートする) class sample6 { public static void main(String args[]) { Car car1 = new Car(); car1.show(); } といった具合です。よろしくお願いします。

関連するQ&A

  • 同一パッケージ内の継承について

    同一パッケージ内で継承したクラス Test2.java をコンパイルすると「シンボルを見つけられません シンボル:クラス Test1」とエラーになります。 --------Test1.java------- package test; public class Test1{ メソッド } ------------------------- --------Test2.java------- package test; public class Test2 extends Test1{ メソッド } ------------------------- Test1.java,Test2.javaとも同一フォルダ(D:\java\test)にあります。 ちなみにカレントディレクトリをD:\java\testにして javac Test2.java でコンパイルしようとしています。 同一パッケージ内のクラスを継承するというのはおかしなことなんでしょうか?また、コンパイルの仕方もあわせてご教示願えれば助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Beanクラスのimportについて

    Beanクラスを作成し、そのBeanクラスをServletでimportしたいのですがコンパイルするとエラーになってしまいます。 Bean(TestBean.java)をsampleパッケージに保存してコンパイルした後に Servlet(Test.java)を ----------------------------------------------- import sample.TestBean; import javax.servlet.*; ・・・・・・・ ・・・・・・・ ------------------------------------------------ として、sampleファイルのひとつ上のディレクトリーに保存してコンパイルすると Test.java:1: シンボルを解釈処理できません。 とエラーになってしまいます。 原因がお分かりになるかた、ご教授をお願いできないでしょうか。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • はじめてのパッケージの使い方

    JAVAでのパッケージの使い方について 教えて下さい。 下記を参考にしました。 Javaの道 > Java基本 > パッケージ -2.パッケージの作成 http://www.javaroad.jp/java_package2.htm サンプルにある通りコンパイルをすると うまく行くのですが カレントのディレクトリを変更すると どうすればいいのかわかりません。 知りたいことは カレントディレクトリPackageBから 別ディレクトリのPackageAをインポートすることは可能でしょうか? やってみた結果は以下となります。 PackageB>javac ExPackage2B.java ExPackage2B.java:3: パッケージ PackageA は存在しません。 import PackageA.ExPackage2A; //(4) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ ExPackage2B.java:7: シンボルを見つけられません。 シンボル: クラス ExPackage2A 場所 : PackageB.ExPackage2B の クラス ExPackage2A ex = new ExPackage2A(); //(6) ^ エラー 3 個 PackageA/ExPackage2A.javaファイル package PackageA; //(1)パッケージPackageAの定義 public class ExPackage2A { //(2)publicなクラスExPackage2Aの定義 public void showClass() { System.out.println("クラスExPackage2Aです。"); } } PackageB/ExPackage2B.javaファイル package PackageB; //(3)パッケージPackageBの定義 import PackageA.ExPackage2A; //(4) public class ExPackage2B { //(5) public static void main(String[] args) { ExPackage2A ex = new ExPackage2A(); //(6) ex.showClass(); //(7) } }

    • ベストアンサー
    • Java
  • packageとimportの関係のコンパイルエラー

    現在JAVAの勉強をしております。 サンプルソースを入力しながら行っております。 カレントディレクトリでコンパイルは正常にできました。 しかし、「packageとimport」の処理を追加しファイルを ディレクトリに移したところうまくコンパイルが通らなく なりました。 パスの間違えかとも思いつつ色々調べているのですが、原因 がつかめません。 検索サイトを使って色々な事例を見てみたのですが、解決 出来ませんでした。 すみませんが、ご指導のほどお願いします。 詳細は下記の通りです。 漏れなどありましたらご指摘していただければ補記します。 JDK:1.3.1 OS:Windows2000ProSP2 ------------------------------------------------------ ディレクトリ D:\JAVAPRESS └─jp └─co └─gihyo └─javapress ├─test │ ATMTest.java │ └─account Account.java CommissionAccount.java コンパイル D:\JavaPress\jp\co\gihyo\javapress\test>javac -classpath D:\JavaPress\Account ATMTest.java ATMTest.java:2: シンボルを解釈処理できません。 シンボル: クラス ATMFrame 位置 : atm の パッケージ import jp.co.gihyo.javapress.atm.ATMFrame; パッケージ ATMTest.javaの内容 package jp.co.gihyo.javapress.test; import jp.co.gihyo.javapress.atm.ATMFrame; import jp.co.gihyo.javapress.account.*; class ATMTest { Account.javaの内容 package jp.co.gihyo.javapress.account; public class Account {

    • ベストアンサー
    • Java
  • パッケージ関連のエラー

    パッケージが含まれるプログラムでのエラーの要因は何がありますか? コンパイルはできたんですが、 エラー:メイン・クラスdig.CalcDigを検出およびロードできませんでした。 と表示されます。 何度も見返しましたが、 ソースコードに書かれたパッケージと同じフォルダに入れてある 名前も間違ってない java フォルダ名.メインクラス名で実行している です。

  • java初心者なのですが、パッケージの所をやってるんですが、異なるパッ

    java初心者なのですが、パッケージの所をやってるんですが、異なるパッケージのクラスを利用する時にpublicと使ってるクラスにパッケージ名をつけてもコンパイルができません。 どうしたらコンパイルできるのでしょうか?

  • 同一パッケージにあるクラスが見つからないエラー

    Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。 tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。 C:\(中略)\mangasearch>javac tagsrch.java tagsrch.java:11: エラー: シンボルを見つけられません public static List<manga> searchByKey(String k[]) throws IOException{ ^ シンボル: クラス manga 場所: クラス tagsrch tagsrch.java:14: エラー: シンボルを見つけられません manga[] list = new manga[cnum]; 同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。 ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。 初歩的質問で申し訳ありませんが、よろしくお願いいたします。 -参考- 1.いろいろ試したこと  1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。  eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。  1-2.クラスパスを入れてコンパイルしてみる。  同一パッケージ内なので、この必要はないはずですが、  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。   下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。  1-1.1-2.の参考URL:http://okwave.jp/qa/q2520327.html  1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。  分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。 publicつけたままだと、 C:\(中略)\mangasearch>javac mangalist.java mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣 言する必要があります となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。 org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。 2.mangalist.java/tagsrch.javaについて mangalist.javaのコンパイルはできています。 mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。 ■mangalist.java package mangasearch; class manga{ フィールド名 ・・・    manga(){    //コンストラクタ    } } ■tagsrch.java public class tagsrch extends manga{ メソッド{     } }

    • ベストアンサー
    • Java
  • パッケージ内でコンパイルできない

    パッケージを作成して,以下のようなディレクトリ構成にしました. . ├── Sample.java └── vehicle   ├── MiniCar.java   ├── SuperCar.java   └── Vehicle.java vehicleディレクトリ内で $ javac SuperCar.java このようにコンパイルしました.ですが, SuperCar.java:3: シンボルを見つけられません。 シンボル: クラス Vehicle public class SuperCar extends Vehicle { ^ エラー 1 個 このようなエラーが出力されました. 同じディレクトリにあれば,ファイルを見つけに行ってくれると思いましたが, なぜコンパイルできないのでしょうか? #ちなみに,階層を1つ登って #$javac Sample.java #これはコンパイルできて,実行もできました. -- Sample.java -- import vehicle.*; public class Sample {    public static void main(String[] args) {      MiniCar mini = new MiniCar(2);      SuperCar scar = new SuperCar("Red");    } } -- MiniCar.java -- package vehicle; public class MiniCar extends Vehicle {   int num;   public MiniCar(int num) {      super(5,10);      this.num = num;   } } -- SuperCar.java -- package vehicle; public class SuperCar extends Vehicle {   String color;   public SuperCar(String color) {      super(10, 20);      this.color = color;   } } -- Vehicle.java -- package vehicle; public class Vehicle {   private int wheel;   private int wheelDiameter;   public Vehicle(int wheel, int wheelDiameter) {      this.wheel = wheel;      this.wheelDiameter = wheelDiameter;   } }

    • ベストアンサー
    • Java
  • 無名パッケージのクラス

    パッケージ化されたクラス(pacA.ClassA)から、無名パッケージ(ClassB)のクラスを参照できるのでしょうか。 状況を詳しく書きますと、 ClassB はコンパイル済みで、pacA.ClassA の中で ClassB を new しています。 pacA.ClassA をコンパイルしたいのですが、ClassB を import できません(コンパイルエラー)。 それとも、ClassB は import する必要がなく、単に私のコンパイルの仕方(classpathの通し方等)が悪かったのでしょうか。 どなたか教えて頂けませんか。

    • ベストアンサー
    • Java
  • Javaのパッケージについて初歩的な質問です

    Javaのパッケージについて質問です このコードの1番最後のZenhanクラスのdoTogameメソッドを呼び出しているところで, パッケージ化していてimportされていないのに クラス名.メソッド名でエラーなしで処理できるのはなぜですか? 同じパッケージ名だからだですか? mainメソッドでimportしてるからですか?教えてください