01_Javaとは

対象:C言語経験者 / Javaの背景・思想・仕組みを理解します


■ 1. Javaが生まれた背景

● 1990年代のプログラミング事情

C言語を学んだ今なら分かると思うが、当時は次のような問題があった。

問題具体的に何が起きるか
OSごとに書き直すWindows用・Linux用・Mac用と別々にコンパイルが必要
メモリ管理ミスfree()忘れ・二重free・未初期化ポインタでクラッシュ
配列の境界チェックなしa[10](サイズ3の配列)が書けてしまい、メモリ破壊
Javaはこれらの問題を「仕組みで解決する」言語として1995年に登場した。
名前の由来:もともとは「Oak(オーク)」という名前だったが商標登録済みだった。 チームがよく通ったコーヒーショップで議論中、ジャワコーヒーから「Java」に決定。技術的な意味はない。

■ 2. Javaの3つの目標

Java WORA どこでも動く (目的) 安全性 壊れにくい設計 (設計思想) JVM 差を吸収する仮想機械 (手段) 「どこでも動く安全なプログラム」
Javaの設計思想の3本柱

■ 3. なぜ「どこでも動く」のか

● C言語とJavaの実行フローの違い

C言語 hello.c(ソースコード) gcc(コンパイル) hello.exe (Windows専用の機械語) Windowsで直接実行 Linuxでは動かない ❌ Java Hello.java(ソースコード) javac(コンパイル) Hello.class (バイトコード・OS非依存) JVM(java コマンド) Windows ✅ Linux ✅
左:C言語はOS専用の実行ファイルを生成 / 右:JavaはJVMが差を吸収してどこでも動く
本質:JavaはOSの上ではなく「JVMの上」で動く。
JVMさえあればどのOSでも同じ.classファイルが動く。これがWORA(Write Once, Run Anywhere)。

● JDK / JRE / JVMの関係

JDK(Java Development Kit)― 開発ツール一式 JRE(Java Runtime Environment)― 実行環境 JVM Java仮想マシン 標準 ライブラリ 開発ツール javac (コンパイラ) その他デバッグ等
JDK ⊃ JRE ⊃ JVM の包含関係
用語役割コマンド
JVM.classを読んで実行する仮想マシン内部で動く
JREJVM+標準ライブラリ。実行に必要なセット
JDKJRE+開発ツール(javacなど)。開発に必要javac / java

■ 4. C言語との安全性の違い

● C言語の「危険な操作」とJavaの対応

C言語(危険) Java(安全) 未初期化ポインタ → クラッシュ int *p; *p = 10; ポインタ操作自体ができない設計 参照型で安全に管理 メモリ解放忘れ → メモリリーク malloc/free を手動管理 GC(ガベージコレクション)が自動解放 free() 不要 配列範囲外 → メモリ破壊 a[10] = 5;(サイズ3の配列) 例外(ArrayIndexOutOfBoundsException) プログラムが止まるだけでメモリは壊れない
Javaはそもそも「危険な操作をできない設計」にしています
安全な代わりに少し遅い(GCが動くため)。これはトレードオフ。
Cは速いが危険。Javaは安全だが少し遅い。用途で使い分ける。

■ 5. 誤解しやすいポイント

● JavaとJavaScriptは別物

JavaJavaScript
開発元Sun Microsystems(現Oracle)Netscape
主な用途企業システム・Android・WebバックエンドWebページの動的処理
実行環境JVMブラウザ(またはNode.js)
名前の関係当時Javaが流行っていたので名前を似せただけ。技術的関係なし。

● 現在のJavaの用途

得意苦手
大規模企業システム
Webアプリ(サーバーサイド)
Androidアプリ
高速数値処理(Cより遅い)
ハードウェア直接制御

■ 6. 試験(問1)との対応

問1 頻出ポイント

よく問われること正しい答え
Javaプログラム実行時、最初に呼び出されるメソッドmainメソッド(startでもrunでもない)
JREとは何かJavaプログラムの実行に必要なソフトウェア
ソースファイルの拡張子.java(.jvではない)
プログラム内部の文字コードUnicode
WORAの仕組みあるJVMで動くプログラムは別のJVMでもそのまま動く
コメントの種類///* *//** */3種類(//だけではない)
第67回 問1(1)〜(6)の正答確認
設問記述正誤理由
(1)JREはJavaプログラムの実行に必要なソフトウェアです正しいJREは実行環境
(2)ソースファイルの拡張子を".jv"にする必要があります誤り正しくは.java
(3)プログラム内部の文字コードはUnicodeです正しい
(4)最初に呼び出されるメソッドはstartメソッドです誤り正しくはmainメソッド
(5)あるJVMで動くプログラムは別のJVMでもそのまま動く正しいWORAの説明
(6)基本データ型は整数型・浮動小数点型・文字型・論理型正しい

■ 理解度チェック問題

問題01-1

Javaの設計思想 WORA(Write Once, Run Anywhere) の説明として正しいものはどれか。

解説を表示 正解:イ
WORA は「1回書けばどこでも動く」というJavaの目標。OSごとに書き直しが必要だったC言語の弱点を解消するために、JVM(仮想マシン)が OS の差を吸収する設計になっている。

問題01-2

JDK・JRE・JVMの包含関係として正しいものはどれか。

解説を表示 正解:ウ
JDK(開発キット)の中に JRE(実行環境)が含まれ、JRE の中に JVM(仮想マシン)と標準ライブラリが含まれる。開発するなら JDK、実行だけなら JRE が必要。

問題01-3

Javaのソースファイルの拡張子として正しいものはどれか。

解説を表示 正解:エ
ソースファイルは .javajavac でコンパイルすると .class(バイトコード)が生成される。試験第67回 問1 (2) では「拡張子を .jv にする」という誤りの選択肢が出題された。

問題01-4

Javaプログラムが実行されるとき、JVMが最初に呼び出すメソッドはどれか。

解説を表示 正解:ア
Javaの実行開始点(エントリーポイント)は main メソッド。試験では「start メソッド」「run メソッド」といった誤りの選択肢が頻出(第67回 問1 (4) など)。

問題01-5

Javaにおけるメモリ管理の方式として正しいものはどれか。

解説を表示 正解:エ
Javaには free() が無く、参照されなくなったオブジェクトを GC(ガベージコレクション) が自動で回収する。C言語のメモリ解放忘れによるメモリリーク問題を構造的に防ぐ仕組み。代わりに GC が動くため、Cより少し遅い。

■ まとめ

キーワード一言で言うと
WORA1回書けばどこでも動く(目的)
JVMOS差を吸収する仮想マシン(手段)
JREJVM+標準ライブラリの実行環境セット
JDKJRE+開発ツール。これを入れれば開発できます
javac.javaを.classに変換するコンパイラ
java.classをJVMで実行するコマンド
GCメモリ自動解放(free()不要)
mainJVMが最初に呼び出す入口