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の設計思想の3本柱
■ 3. なぜ「どこでも動く」のか
● C言語とJavaの実行フローの違い
左:C言語はOS専用の実行ファイルを生成 / 右:JavaはJVMが差を吸収してどこでも動く
本質:JavaはOSの上ではなく「JVMの上」で動く。
JVMさえあればどのOSでも同じ.classファイルが動く。これがWORA(Write Once, Run Anywhere)。
● JDK / JRE / JVMの関係
JDK ⊃ JRE ⊃ JVM の包含関係
| 用語 | 役割 | コマンド |
| JVM | .classを読んで実行する仮想マシン | 内部で動く |
| JRE | JVM+標準ライブラリ。実行に必要なセット | — |
| JDK | JRE+開発ツール(javacなど)。開発に必要 | javac / java |
■ 4. C言語との安全性の違い
● C言語の「危険な操作」とJavaの対応
Javaはそもそも「危険な操作をできない設計」にしています
安全な代わりに少し遅い(GCが動くため)。これはトレードオフ。
Cは速いが危険。Javaは安全だが少し遅い。用途で使い分ける。
■ 5. 誤解しやすいポイント
● JavaとJavaScriptは別物
| Java | JavaScript |
| 開発元 | 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のソースファイルの拡張子として正しいものはどれか。
解説を表示
正解:エ
ソースファイルは .java。javac でコンパイルすると .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より少し遅い。
■ まとめ
| キーワード | 一言で言うと |
| WORA | 1回書けばどこでも動く(目的) |
| JVM | OS差を吸収する仮想マシン(手段) |
| JRE | JVM+標準ライブラリの実行環境セット |
| JDK | JRE+開発ツール。これを入れれば開発できます |
| javac | .javaを.classに変換するコンパイラ |
| java | .classをJVMで実行するコマンド |
| GC | メモリ自動解放(free()不要) |
| main | JVMが最初に呼び出す入口 |