質問: calcapp.logics.CalcLogic.hiku(a,b); // もちろんFQCNで書いてもOK System.out.println("足したら" + total + "、引いたら" + delta); } } 【CalcLogic.java】 package calcapp.logics; public class CalcLogic { public static int tasu(int a, int b) { return (a + b); } public static int hiku(int a, int b) { return (a - b); } }
回答: 提示していただいたコードを私のローカル環境で同じディレクトリ構成で コンパイルし、実行しましたが再現しませんでした。 「正しくやったはずだ」という思い込みは捨てて、改めて下記を確認してください。 ・ディレクトリ構成が正しく、誤字脱字もない ・コンパイルが正常に完了している ・実行時のコマンドが`java calcapp.main.Calc`である [コメントのコンパイル方法などを拝見して追記] コンパイル後のクラスファイルはパッケージと同じディレクトリ構造の場所に置かないといけません。 `エラー:メイン・クラスCalc(もしくは完全限定クラス名)が見つからなかったかロードできませんでした` というエラーはそれが守られていないために起きます。 どういう手順でコンパイルおよび実行すればよいのか2パターン書きます。 ### Javaファイルがプロジェクトルート(calcapp/ が置いてあるディレクトリ)にある状態 1. `javac Calc.java CalcLogic.java`でコンパイルします 2. `Calc.class`と`CalcLogic.class`が生成されます。(ここまではやっていた手順と同じ) 3. 生成された`Calc.class`を`calcapp/main/`に移動します。 4. 生成された`CalcLogic.class`を`calcapp/logics/`に移動します。 5. `java calcapp.main.Calc`で実行します。 この手順は修正のたびにファイルの移動が行われるので、非効率です。 実際は次のパターンのように指定のディレクトリにjavaファイルを置いた状態で行うと良いでしょう。 ### Javaファイルがパッケージ通りのディレクトリにある状態 1. `calcapp/main/Calc.java`と`calcapp/logics/CalcLogic.java`がある状態で `javac calcapp\main\Calc.java`でコンパイルします。(`.`ではないので注意) 2. `calcapp/main/Calc.class`と`calcapp/logics/CalcLogic.class`が生成されます。 3. `java calcapp.main.Calc`で実行します。 注意点としてはコンパイル時は`\`(linux系は`/`)、実行時は`.`でパッケージ(ディレクトリ)を表すことです。 どちらかの方法でやってみてください。