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)基本データ型は整数型・浮動小数点型・文字型・論理型正しい

■ まとめ

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