Javaの基礎の第三弾!
過去の投稿をみていない方は、ぜひそちらからご覧ください。
javaとjdkの違いって?
ざっくり言うと、Java は「プログラミング言語」で、JDK は「Javaでプログラムを書くための道具一式」です。
Javaとは
- プログラミング言語そのもの
- 文法やルール(構文)、型、キーワードなどが定義されている
- 「Javaで書かれたコード」は .java ファイル
- Java言語そのものは「道具」じゃないので、単体では動かせない
JDK(Java Development Kit)とは
- Javaで開発するための道具セット
- 以下が含まれています
- Javaコンパイラ (
javac
) → .java
を .class
(バイトコード)に変換
- Java実行環境(JRE: Java Runtime Environment)→
.class
を動かす
- 標準ライブラリ(文字列操作、ファイル入出力、ネットワークなど)
- 開発用ツール(デバッガ、アーカイブツールなど)
関係を図にすると
Java言語(ルール・文法)
↓
JDK(開発ツール一式)
├─ コンパイラ(javac)
├─ 実行環境(JRE)
└─ 標準ライブラリ
- Java → 「何語で書くか」(英語・日本語みたいな位置づけ)
- JDK → 「その言語を使うためのペンとノートと辞書のセット」
補足
- プログラムを動かすだけなら JRE(Java Runtime Environment)だけでOK
- プログラムを作るなら JDK が必要(JREもJDKに含まれている)
- JRE(Java Runtime Environment)
→ Javaプログラムを動かすための「環境」そのもの
→ Java仮想マシン(JVM)、Javaの標準クラスライブラリ、その他必要な部品を含む
.jar
ファイル
→ Javaのプログラムをまとめた「実行可能パッケージ」
→ 中身はコンパイルされた .class
ファイルやリソース(画像、設定ファイルなど)がZIP形式で詰められている
Javaの代表的な命令実行文
丸暗記をするというよりは、どういうものがあるのかを知っておくことのほうが重要で、実現したいことがある時に、調べ直せるようにしておくことをお勧めします!
出力系
命令文 / クラス | 役割 |
---|
System.out.println("文字列"); | コンソールに文字列や数値を表示(改行あり) |
System.out.print("文字列"); | 改行なしで表示 |
入力系
命令文 / クラス | 役割 |
---|
import java.util.Scanner; | 標準入力用のクラスを使う準備 |
Scanner sc = new Scanner(System.in); | キーボード入力受付の準備 |
sc.next(); | 1単語を文字列として取得 |
sc.nextLine(); | 1行全体を文字列として取得 |
sc.nextInt(); | 整数を取得 |
sc.nextDouble(); | 小数を取得 |
変数・データ型
命令文 / 構文 | 役割 |
---|
int num = 10; | 整数型の変数宣言と代入 |
double pi = 3.14; | 小数型の変数宣言と代入 |
String name = "Java"; | 文字列型の変数宣言と代入 |
final int MAX = 100; | 定数の宣言 |
条件分岐
命令文 / 構文 | 役割 |
---|
if (条件) { ... } | 条件がtrueのときに実行 |
if ... else ... | 条件がfalseのとき別処理 |
switch (値) { case 値1: ... break; ... } | 値ごとに処理を分ける |
繰り返し
命令文 / 構文 | 役割 |
---|
for (int i = 0; i < n; i++) { ... } | 回数を指定して繰り返し |
while (条件) { ... } | 条件がtrueの間繰り返し |
do { ... } while (条件); | 1回は必ず実行してから条件判定 |
配列
命令文 / 構文 | 役割 |
---|
int[] nums = new int[5]; | 長さ5の整数配列を作成 |
nums[0] = 10; | 要素に値を代入 |
System.out.println(nums.length); | 配列の長さを取得 |
その他便利系
命令文 / クラス | 役割 |
---|
Math.max(a, b); | 大きい方の値を返す |
Math.min(a, b); | 小さい方の値を返す |
Math.random(); | 0.0以上1.0未満の乱数 |
String.toUpperCase(); | 文字列を大文字に変換 |
String.length(); | 文字列の長さを取得 |
順次・分岐・繰り返し
プログラミング全般で大事な3つの基本制御の考え方として、順次(じゅんじ)・分岐(ぶんき)・繰り返し(くりかえし)があります。
順次
- プログラムの命令を上から下へ順番に1つずつ実行すること。
- 例えば、レシピの手順を順番にこなしていくイメージ。
例)「起きる」→「朝ごはん」→「学校へ行く」の順に実行される
System.out.println("1. 起きる");
System.out.println("2. 朝ごはんを食べる");
System.out.println("3. 学校へ行く");
分岐
- 条件によって実行する処理を切り替えること。
- 「もし○○なら〜、そうでなければ〜」という判断をプログラムで行う。
例)age
が18以上なら「お酒が飲めます」を表示、それ以外は「飲めません」を表示する
int age = 20;
if (age >= 18) {
System.out.println("お酒が飲めます");
} else {
System.out.println("お酒はまだ飲めません");
}
繰り返し
- 同じ処理を何度も繰り返すこと。
- 「10回ジャンプする」「リストの中身全部を処理する」など。
例)1回目、2回目、3回目のジャンプを順番に表示
for (int i = 1; i <= 3; i++) {
System.out.println(i + "回目のジャンプ!");
}
『 構造化定理(Structured Programming Theorem)』
プログラミングにおける重要な理論のひとつで、「すべてのプログラムは、順次(Sequential)、選択(Selection)、反復(Iteration)の3つの基本的な制御構造だけを使って書くことができる」という定理です。1970年代にエドガー・ダイクストラらによって提唱されました。
複雑なgoto文(無条件ジャンプ)を使わず、これら3つの構造だけでプログラムを書くことで、プログラムの可読性や保守性が高まります。
※「順次、分岐、繰り返し」は、日常的にわかりやすい言い方であり、これがまさに構造化定理の3つの基本構造です。