エラー: メイン・クラス○○を検出およびロードできませんでした 原因: java.lang.ClassNotFoundException: ○○　が表示されたときの対処表を苦しみながら説明する

今回私は、First.javaファイルを作成した。
このファイルの中身は、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/c14e0fa8-8e01-8b7d-9157-e1f1a261fd0c.png)

実行が成功した際には、コマンドプロンプト画面上に
「Javaを楽しもう！」
と表示される算段だ！

さあ、
javaファイルのコンパイルをして、「First.class」まではできた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/da698582-2be0-6ae2-1450-90e3fed55b2e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/353ea514-18b0-0939-68ae-80c99e662764.png)

さあ、コマンド プロンプトで「java First」と入力！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/15142839-e180-e234-5291-d8a52707fef8.png)

・・・ん？
あれ？文字間違えたかな？えーと、小文字でjava、スペース空けて、大文字のエフ、後は小文字でアイ、アール、エス、ティーっと。そしてエンターキーをターンッ！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/e62c6c15-3085-99d3-9397-58f095f05dd9.png)

・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/a15919e9-7c27-30b2-eb35-a74943c9f65a.png)

ぐわああああ！！
うまくいかない！「Javaを楽しもう！」という文字を表示させるだけなのに！！
このままではJavaを楽しめない！！！

なんとかこの第一関門を突破しなくては！！
ということで勇者Tanympusは原因究明と解決策探しの旅へと出発したのだった。

俺たちの戦いは始まったばかりだ！！

ーーーーーーーー続きーーーーーーーー

ちなみにEclipseで試しに動作確認をしたら、動いた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/4edf3e6e-4d02-6713-9043-df716c33352d.png)

何故コマンドプロンプトでは動かんのじゃあああ

システム環境変数を確認してみた。
JAVA_HOMEは、今回ダウンロードしたC:\Program Files\Eclipse Adoptium\jdk-21.0.6.7-hotspot\になってるし、
PATHは、C:\Program Files\Eclipse Adoptium\jdk-21.0.6.7-hotspot\bin
になってるし、問題ないのではないか。。。

ぐぬぬ、今日のところはここまでか。

ーーーーーーーー続きーーーーーーーー

もしかしてローカルアカウントのユーザー環境変数も変えないといけないのかな。
ネットで調べてみたら、
グローバル変数と同名のローカル変数ではローカル変数が優先されるという事を目にした。
変えてみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/67458fa5-0d08-4de2-8cdf-565d97d1d3a9.png)

ほい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/4eaba720-596e-46f9-1368-ba4251fdc83f.png)

さあやってみよう
一回さっき作ったclassファイルを消して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/9bd0b6ed-749f-f695-f40a-7305369cc3f9.png)

コマンドプロンプトでコンパイルして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/d6a9e466-11d8-68d4-96f7-38cab2ea263b.png)

実行！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/a5078d91-6bb4-4548-8651-5da0e093c8ba.png)

ぐわああああ！！！
関係ない記事に惑わされた！！ネットリテラシー！！！

「ﾋﾟﾛﾘﾛﾘ~ﾝ、ﾃﾃﾃﾃｯﾃｯﾃｯﾃ~、Tanympusはネットリテラシーが１あがった」

やかましいわ！！！！

ーーーーーーーー続きーーーーーーーー
調べてみた中で、今の所考えられるのは
CLASSPATHが通ってない？ということだ。

参考にしたwebサイトを残す。
ITMediaのCLASSPATH設定についての記事
https://atmarkit.itmedia.co.jp/fjava/onepoint/java/jv_clpath.html

前田俊行さんが2001/5/12執筆した記事によると、
「java -classpath <場所><実行するクラス名>」とするといい？
と書かれている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/05fc169f-c479-04fc-e9be-8dff30f72e42.png)

いざ、やってみよう。

javaの後に、スペース、-classpathと書いて・・・
スペース、の後にC:\Java\1と書いて・・・
スペース、クラス名はFirstっと。そしてエンターキーをターンッ！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/8cae2713-f002-6b5c-5a48-8d0aaa6b8e3e.png)

ほわぁ！！！動いた！！！
前田さんありがとうございます！！！

ちなみにこの流れでjava Firstと打ってみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/c9fcd7ee-cd1b-c0d3-a232-d7cf542898ea.png)

ぬうう、だめか。。。

ひとまず、CLASSPATHがキーワードだったことが分かった。
これから、要因の詳細を調べていく。
そして「java First」とだけ打って実行させたい！！

次回！Tanympus死す？デュエルスタンバイ！！！

ーーーーーーーー続きーーーーーーーー
不死鳥のようにファサぁ～っ！
昨日の続きをやっていこうと思う。
前述の参考サイトより、前田さんの記事によると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/5a703e25-cd3b-2fb7-73c1-73238e8d2251.png)
との事なので、やってみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/5be6f3ba-ad1e-76a7-4d8c-1df5728587cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/b8ff5ce7-cac8-f74c-018e-53f2bd663db9.png)

うーーん、
JVMが自動的にカレントディレクトリに指定する際、何かが起こっていて、クラスファイルを探せないということなのかなぁ。
とりあえずわからない事を調べつつ今回は３つまとめる。
①カレントディレクトリとは？
②クラスパスとは？
③CLASSPATHを設定するとどうなるか？

まとめた内容
①・・・
実行中のソフトウェアなどがストレージ（外部記憶装置）のファイルシステム中で現在位置として指示しているディレクトリの事。相対パスでファイルやディレクトリなどを指定する際の基準の位置となる。

②・・・
以下Oracle.comのサイトによると、クラスパスとは、Java実行環境がクラスおよび他のソースファイルを検索するパスのことらしい。
クラスパスの設定は、以下の２つの方法がある。
・JDKツールを呼び出すときに-classpathオプションをつける方法（推奨される方法）
・CLASSPATH環境変数を設定する方法
https://docs.oracle.com/javase/jp/1.5.0/tooldocs/solaris/classpath.html#:~:text=%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%91%E3%82%B9%E3%81%A8%E3%81%AF%E3%80%81Java,%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AB%E3%82%88%E3%82%8A%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82
また、今回の件に関係がありそうな文も参考サイトに書かれていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870858/1aa60fc1-a13c-c48a-a84c-a7b8d449b9bf.png)

今日はここまで。また明日。