Javaで学ぶプログラミング基礎構文

Javaの構文を、読むだけで考え方とイメージがつかめるようにまとめた教科書です。コードを丸暗記するのではなく、「なぜ必要なのか」「どんな場面で使うのか」「頭の中でどう捉えればよいのか」を大切にします。

第1章 変数宣言 値に名前をつける

変数は、値に名前をつけて覚えておくためのしくみです。

変数は「名前シールを貼った箱」です。箱に age というシールを貼って、その中に 20 を入れておけば、あとから「ageの箱を見て」と言うだけで20を取り出せます。

変数が必要なのは、値に意味を持たせるためです。500 だけでは何の数字かわかりませんが、price という名前がつくと「これは価格なんだ」と読み取れます。

int age = 20;                 // 年齢を入れる
String name = "田中";         // 名前を入れる
double price = 980.5;         // 小数を含む金額を入れる
boolean isStudent = true;     // 学生かどうかを入れる
入る値
int整数10, -3
double小数3.14
String文字列"こんにちは"
char1文字'A'
boolean真偽値true, false

第2章 演算子 計算や比較をする

演算子は、値を計算したり、比べたり、条件を組み合わせたりするための記号です。文章で言えば「助詞」や「接続詞」に近い存在です。

price + tax は「価格と税を足す」、score >= 80 は「点数が80以上か」、isMember && hasCoupon は「会員かつクーポンを持っているか」と読めます。

算数の授業で 3 + 2 と書くと「3に2を足す」とわかります。Javaでも同じです。ただしJavaでは、計算だけでなく「同じか」「大きいか」「両方当てはまるか」の判断にも記号を使います。

演算子が必要なのは、値と値の関係を作るためです。変数に値を入れただけでは、合計も判断もできません。演算子を使うことで、「足す」「比べる」「両方満たす」といった考えをコードにできます。

算術演算子

数値の計算に使います。

演算子意味コード例結果よく使う場面
+足し算500 + 100600合計金額、文字列連結
-引き算1000 - 300700残金、差額
*掛け算120 * 3360単価×個数
/割り算10 / 25平均、1人あたり
%割った余り7 % 31偶数・奇数判定
int price = 500;            // 商品の値段を入れる
int count = 3;              // 商品の個数を入れる
int total = price * count;  // 値段と個数を掛けて合計金額を作る

System.out.println(total);  // 1500と表示する
整数同士を / で割ると、結果も整数として扱われます。たとえば 5 / 22.5 ではなく 2 になります。小数まで使いたいときは 5.0 / 2 のように double を含めます。

代入演算子

演算子意味コード例同じ意味よく使う場面
=右の値を左に入れるage = 20なし値の初期設定
+=足してから入れるmoney += 100money = money + 100合計、貯金
-=引いてから入れるstock -= 1stock = stock - 1在庫を減らす
*=掛けてから入れるpoint *= 2point = point * 2倍率計算
/=割ってから入れるprice /= 2price = price / 2半額、平均化
%=余りを入れるnumber %= 10number = number % 10末尾の数字

比較演算子

演算子意味コード例よく使う場面
==等しいage == 20番号や状態の一致確認
!=等しくないmenu != 0終了番号以外なら続ける
>より大きいscore > 80基準を超えたか
<より小さいstock < 5在庫が少ないか
>=以上score >= 80合格点に届いたか
<=以下age <= 12子ども料金の対象か
文字列を比べるときは、基本的に == ではなく equals() を使います。文字の内容を比べたいときは、name.equals("田中") のように読みます。

論理演算子

演算子意味コード例よく使う場面
&&かつage >= 18 && hasTicket成人かつチケットあり
||またはisMember || hasCoupon会員またはクーポンあり
!ではない!isClosed閉店していないか
= は代入、== は比較です。演算子は「計算する」「入れる」「比べる」「条件を組み合わせる」に分けると理解しやすくなります。

第3章 条件分岐 道を選ぶ

条件分岐は、プログラムに「今の状況を見て、進む道を選ばせる」ための構文です。信号が青なら進む、赤なら止まる。雨なら傘を持つ。人間が毎日している判断を、Javaではコードとして書きます。

条件分岐が必要なのは、プログラムを状況に合わせて動かすためです。条件分岐がなければ、晴れの日も雨の日も同じ行動、合格点でも不合格点でも同じ表示になってしまいます。

ifもし条件に当てはまるなら実行する。例: 暑いなら水を飲む。
if else2つの道から選ぶ。例: 合格なら喜ぶ、そうでなければ復習する。
else if3つ以上の段階に分ける。例: 点数で評価を変える。
switch case番号や文字で選ぶ。例: メニュー番号で料理を選ぶ。

if もし〜なら

先生が「今日は暑いから水分補給しよう」と言う場面に似ています。暑いときだけ声をかけ、暑くなければ何もしません。

int temperature = 32;               // 気温を入れる

if (temperature >= 30) {            // 気温が30度以上か調べる
    System.out.println("水分補給をしましょう"); // 暑いときだけ表示する
}

if else 2つの道から選ぶ

ゲームで「右の道に行くか、左の道に行くか」を選ぶように、条件が正しいときと正しくないときで処理を分けます。

scoreに85を入れる scoreは80以上? 合格 / 再挑戦
int score = 85;                     // テストの点数を変数に入れる

if (score >= 80) {                  // scoreが80以上かどうかを調べる
    System.out.println("合格です"); // 条件がtrueなら合格と表示する
} else {
    System.out.println("再挑戦です"); // 条件がfalseなら再挑戦と表示する
}

else if 3つ以上の道から選ぶ

点数によって先生の声かけが変わるように、上から順番に条件を見て、最初に当てはまった道へ進みます。

int score = 72;                     // テストの点数を入れる

if (score >= 90) {                  // 90点以上か調べる
    System.out.println("とても良い");
} else if (score >= 70) {           // 90点未満で、70点以上か調べる
    System.out.println("良い");
} else if (score >= 50) {           // 70点未満で、50点以上か調べる
    System.out.println("もう少し");
} else {                            // どの条件にも当てはまらない場合
    System.out.println("復習しよう");
}

switch case 決まった選択肢から選ぶ

給食のメニュー表やゲームのコマンド選択をイメージしてください。1番ならカレー、2番ならパスタ、というように決まった値で道を選びます。

int menu = 2;                       // 選ばれたメニュー番号を入れる

switch (menu) {                     // menuの値によって処理を分ける
    case 1:                         // menuが1の場合
        System.out.println("カレー");
        break;                      // ここでswitchを抜ける
    case 2:                         // menuが2の場合
        System.out.println("パスタ");
        break;                      // ここでswitchを抜ける
    default:                        // どのcaseにも当てはまらない場合
        System.out.println("メニューがありません");
}

第4章 繰り返し 同じ作業を自動化する

繰り返しは、同じ処理を何度も書かずに済ませるための構文です。学校で「漢字を10回書く」宿題のように、同じ作業をまとめてお願いできます。回数が決まっているなら for、条件が続く間なら while、最低1回は実行したいなら do while が向いています。

繰り返しが必要なのは、同じ作業をまとめて扱うためです。100人分の点数を表示するときに100行書くのではなく、「順番に全員分を見る」と考えると、コードも考え方も整理されます。

for 回数が決まっている繰り返し

for は、「何回目から始めるか」「いつまで続けるか」「1回終わるたびに何を変えるか」の3つを見ると読みやすくなります。

for (int i = 1; i <= 5; i++) {      // iを1から始め、5以下の間だけ繰り返し、毎回1増やす
    System.out.println(i + "回目のこんにちは"); // 今が何回目かを表示する
}
部品コード役割日本語にすると
初期化int i = 1数え始め1回目から始める
条件i <= 5続けるかiが5以下なら続ける
更新i++1周ごとに変更終わるたびに1増やす
i=1 条件確認 処理 i++ 再確認

while 条件が続く間くり返す

while は、「まだ条件を満たしていないなら続ける」という考え方です。終わるタイミングが状況によって変わる場面に向いています。

int money = 0;                      // 現在の貯金額を0円にする

while (money < 1000) {              // 貯金が1000円未満の間くり返す
    money += 200;                   // 200円ずつ貯金する
    System.out.println("現在の貯金: " + money + "円"); // 現在額を表示する
}
条件がずっと true のままだと、無限ループになります。条件の中で使っている変数が、ループ内で変化しているか確認しましょう。

do while 最低1回は実行する

do while は、「まず一度やってみて、そのあと続けるか考える」形です。最初の1回を必ず実行したい処理で使います。

int count = 0;                      // 実行回数を数える変数

do {
    count++;                        // countを1増やす
    System.out.println(count + "回実行しました"); // 実行回数を表示する
} while (count < 3);                // countが3未満ならもう一度実行する

拡張for 配列やリストを順番に読む

int[] scores = {80, 95, 70};        // 3人分の点数を配列に入れる

for (int score : scores) {          // scoresから1つずつscoreに取り出す
    System.out.println(score);      // 取り出した点数を表示する
}

第5章 配列 たくさんの値をまとめる

配列は、同じ種類の値を並べて管理するために使います。

配列は「番号つきのロッカー」です。0番のロッカーに80点、1番のロッカーに95点、2番のロッカーに70点が入っています。ひとつの棚にまとめるから、順番に取り出しやすくなります。

配列が必要なのは、たくさんの値をひとまとまりとして扱うためです。点数が100個あるときに変数を100個作るより、scores という棚にまとめるほうが、順番に処理しやすくなります。

int[] scores = {80, 95, 70}; // 3人分の点数をまとめて入れる

System.out.println(scores[0]); // 0番目の80を表示する
System.out.println(scores[1]); // 1番目の95を表示する
System.out.println(scores[2]); // 2番目の70を表示する
番号012
809570

第6章 メソッド 処理に名前をつける

メソッドは、処理のまとまりに名前をつけるしくみです。「机を片付ける」という一言の中に、本をしまう、消しゴムを置く、ノートを重ねる、という細かい作業が入っているイメージです。

メソッドが必要なのは、長い処理を意味のあるまとまりに分けるためです。名前があると、細かい中身を見る前に「ここでは何をしたいのか」がわかります。

public static int add(int a, int b) { // aとbを受け取るメソッド
    return a + b;                     // aとbを足した結果を返す
}

int result = add(3, 5);               // addに3と5を渡し、結果をresultに入れる
System.out.println(result);           // 8と表示する
材料 3, 5 addメソッド 結果 8

第7章 クラスとオブジェクト

クラスは設計図、オブジェクトはその設計図から作られた実物です。たい焼きの型がクラスで、実際に焼けたあんこ味やクリーム味のたい焼きがオブジェクトです。

クラスが必要なのは、関係している情報と処理をひとまとまりにするためです。「学生」の名前、点数、自己紹介する処理を一緒にしておくと、大きなプログラムでも整理しやすくなります。

class Student {                       // Studentという設計図を作る
    String name;                      // 学生の名前を持つ
    int score;                        // 学生の点数を持つ

    void introduce() {                // 自己紹介する処理を作る
        System.out.println(name + "です。点数は" + score + "点です。");
    }
}
クラス学生という設計図。名前、点数、自己紹介する処理を持つ。
オブジェクト実際の学生。田中さん、佐藤さんのような具体物。

第8章 標準入力 キーボードから受け取る

標準入力は、プログラムに「質問箱」を置くようなものです。プログラムが質問し、人間がキーボードで答えると、その答えを変数に入れて使えます。

標準入力が必要なのは、プログラムの外から変わる値を受け取るためです。名前や点数をその場で入力できると、毎回同じ結果ではなく、入力に応じた結果を返せます。

import java.util.Scanner;             // Scannerを使えるようにする

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // キーボード入力を読む準備をする

        System.out.print("名前を入力してください: "); // 入力してほしい内容を表示する
        String name = scanner.nextLine();          // 入力された1行をnameに入れる

        System.out.println(name + "さん、こんにちは"); // 入力された名前を使って表示する
        scanner.close();                            // Scannerを閉じる
    }
}

第9章 ArrayList 増減できる箱

ArrayList は、紙をあとから足せるバインダーのようなものです。配列は最初に棚の数が決まっているロッカーですが、ArrayList はあとから要素を追加できます。

ArrayList が必要なのは、数があとから変わるデータを扱うためです。買い物かごの商品や名前の一覧のように、増えたり減ったりするものに向いています。

import java.util.ArrayList;          // ArrayListを使えるようにする

ArrayList<String> names = new ArrayList<>(); // 文字列を入れるリストを作る

names.add("田中");                  // リストに田中を追加する
names.add("佐藤");                  // リストに佐藤を追加する
names.add("鈴木");                  // リストに鈴木を追加する

System.out.println(names.get(0));   // 0番目の田中を表示する
System.out.println(names.size());   // リストの件数を表示する
種類サイズ向いている場面
配列最初に決める人数や件数が固定
ArrayListあとから増減できる入力数が変わる

第10章 例外処理 失敗に備える

例外処理は、遠足の「雨の日プラン」に似ています。晴れなら公園、雨なら体育館。失敗が起きても、プログラムが急に止まらないように別の行動を用意します。

例外処理が必要なのは、予定どおりにいかなかったときの動きを決めるためです。数字を入力してほしいところに文字が入ったときも、わかりやすい案内を出して次の行動につなげられます。

try {                                // 失敗するかもしれない処理を試す
    int number = Integer.parseInt("abc"); // 文字列を数字に変換しようとする
    System.out.println(number);      // 変換できた場合だけ表示する
} catch (NumberFormatException e) {  // 数字に変換できなかった失敗を受け止める
    System.out.println("数字に変換できませんでした"); // エラー時の案内を表示する
}
処理を試す 成功? 通常処理 / catch

第11章 構文が組み合わさるとどう見えるか

ここまでの構文が組み合わさると、ひとつの流れを持つコードになります。下の例では、入力を受け取り、変数に入れ、条件分岐で表示する内容を変えています。

import java.util.Scanner;            // Scannerを使えるようにする

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // キーボード入力を読む準備をする

        System.out.print("点数を入力してください: "); // 入力を促す文章を表示する
        int score = scanner.nextInt();             // 入力された整数をscoreに入れる

        if (score >= 80) {                         // scoreが80以上か調べる
            System.out.println("合格です");        // trueなら合格と表示する
        } else {
            System.out.println("再挑戦です");      // falseなら再挑戦と表示する
        }

        scanner.close();                           // Scannerを閉じる
    }
}

このプログラムでは、変数宣言、標準入力、条件分岐、比較演算子、画面表示を使っています。