Javaプログラミング 入門編

luagate/java-intro-basicsJava基礎109プログラミング

上から下へ、全 109 枚そのまま並べています。

発表モードで開く

Java基礎

Javaプログラミング 入門編

基礎から例外処理まで完全網羅

1
1

目次(前半)

全体の流れ

1. イントロダクション

2. 開発環境とコンパイル

3. 変数とデータ型

4. 数値計算と文字列連結

5. 制御構造(if・while・for・switch)

6. 条件式と論理演算

2
2

目次(後半)

全体の流れ

7. 配列

8. メソッド

9. 式と値・データ型変換

10. デバッグ

11. 例外処理

3
3

Java基礎 - イントロダクション

1

イントロダクション

Javaの世界へようこそ

10
4
Java基礎 - イントロダクション

Javaとは

Oracle社が開発・配布する代表的なプログラミング言語です。

Java(ジャバ)

1995年に登場した、汎用性とオブジェクト指向を特徴とするプログラミング言語。エンタープライズ開発で広く使われている。

汎用性:Web、業務系、Android、組み込みなど幅広い

オブジェクト指向:大規模開発に向いた設計思想

開発環境の充実:Eclipse、IntelliJ などツールが豊富

Write Once, Run Anywhere の思想

11
5
Java基礎 - イントロダクション

Javaプログラム実行の仕組み

Javaは「中間言語+仮想マシン」の方式で動作します。

ソースコード(.java)

プログラマーが書くJavaの文法に従ったテキストファイル

クラスファイル(.class)

javacコンパイラがJavaVMの理解できる中間言語にコンパイル

JavaVM が実行

JavaVMがCPUに合わせた機械語に変換して実行。同じクラスファイルがどのOSでも動く

12
6
Java基礎 - イントロダクション

コンパイラ方式とインタプリタ方式

プログラミング言語の実行方式は大きく2つに分かれます。Javaはハイブリッド型です。

コンパイラ方式

  • 事前にすべてを翻訳
  • 実行が速い
  • OS依存の実行ファイルが生成
  • 代表例:C / C++

インタプリタ方式

  • 逐次解釈しながら実行
  • 書いたらすぐ試せる
  • 同じコードが複数OSで動く
  • 代表例:Python / PHP
13
7
Java基礎 - イントロダクション

プログラミング言語の人気度(参考)

Javaは長年トップクラスの人気を維持しています。

30 %24181260
28%
16%
10%
10%
5%
3%
Python
JavaScript
Java
C/C++
TypeScript
Go

出典: TIOBE Index 2025年データをもとに作成(概算)

14
8
Java基礎 - イントロダクション

学びを実りあるものにする5つの心構え

プログラミング学習を効果的に進める姿勢です。

目標を意識する
  • 達成すべきゴールを明確に
  • 章ごとの到達点を確認
前を見る
  • 講師やスクリーンに目を向ける
  • 図解と一緒に理解する
覚えるより考える
  • 丸暗記しない
  • なぜそうなるかを問う
質問する
  • 疑問を放置しない
  • 他の受講者にも相談
15
9
Java基礎 - イントロダクション

Javaプログラムの構造

Javaのプログラムは「クラス」が単位。最初に実行されるmainメソッドから始まります。

java
// ファイル名: Add.java
class Add {
    public static void main(String[] args) {
        // 変数の宣言と代入
        int a = 1;
        int b = 2;
        int ans;
        // a と b を足した結果を ans に代入
        ans = a + b;
        System.out.println(ans);  // 3
    }
}
16
10
Java基礎 - イントロダクション
クイズ

クイズ

Javaの基本的な仕組みを確認しましょう。

Javaが「Write Once, Run Anywhere」を実現できる理由はどれですか?

A
OSごとにソースを書き直すから
B
JavaVMがCPUに合わせて中間言語を機械語に変換するから
C
コンパイル不要で実行できるから
D
クラスを使わないから
17
11
Java基礎 - イントロダクション
答え

クイズ 解答

Javaが「Write Once, Run Anywhere」を実現できる理由はどれですか?

A
OSごとにソースを書き直すから
B
JavaVMがCPUに合わせて中間言語を機械語に変換するから
C
コンパイル不要で実行できるから
D
クラスを使わないから

クラスファイル(中間言語)はOSに依存しません。各OSのJavaVMが、その環境に合わせた機械語へ変換することで「一度書けばどこでも動く」が実現されます。

18
12

Java基礎 - 開発環境

2

開発環境とコンパイル

はじめてのプログラムを動かそう

30
13
Java基礎 - 開発環境

プログラムが動くまでの流れ

Javaプログラムは3ステップで動きます。

コーディング:エディタで .java ファイルを作成(UTF-8で保存)
コンパイル:javac でクラスファイル(.class)を生成
実行:java コマンドでクラスファイルをJavaVMに実行させる
31
14
Java基礎 - 開発環境

コマンドラインでのコンパイルと実行

javacでコンパイル、javaで実行。Add.javaの例です。

bash
# 1. ファイルを保存したフォルダに移動
> cd C:\Java

# 2. コンパイル(成功すると Add.class が生成される)
> javac Add.java -encoding utf-8

# 3. 実行(拡張子を除いたクラス名を指定)
> java Add
3
32
15
Java基礎 - 開発環境

Javaの開発環境

Javaの代表的な統合開発環境(IDE)です。

Eclipse
  • 無料で広く使われる
  • Javaに強い
  • この研修で使用
IntelliJ IDEA
  • JetBrains社製
  • 補完が強力
  • 商用版とCommunity版
VS Code
  • 軽量で多言語対応
  • 拡張機能でJava対応
  • 設定の自由度が高い
NetBeans
  • Apache財団管理
  • GUI開発もしやすい
  • 古くから定番
33
16
Java基礎 - 開発環境

Java研修の標準環境

本講座で使用する開発環境のバージョンです。

項目
バージョン
備考

Java(JDK)

Java 17

LTS(長期サポート)版

Eclipse

2024-12 (4.34.0)

配布Eclipse使用

コンパイラ準拠レベル

17

環境設定で17を指定

文字エンコーディング

UTF-8

ソースの文字コード

34
17
Java基礎 - 開発環境

コメントの書き方

コメントはコンパイル時に無視されます。コードの意図を補足するために使います。

  • // 行コメント:行末までがコメント
  • /* … */ ブロックコメント:複数行に対応
  • /** … */ Javadocコメント:APIドキュメント生成用
  • コメントは「なぜ」を書く。「何をしているか」は読めばわかる
  • 変更時は古いコメントを残さず更新する
35
18
Java基礎 - 開発環境
クイズ

クイズ

Javaのコンパイルと実行を確認しましょう。

Add.java をコンパイルして実行する正しいコマンドの組み合わせはどれですか?

A
java Add.java → javac Add
B
javac Add.java → java Add
C
javac Add → java Add.class
D
java Add.java → java Add
36
19
Java基礎 - 開発環境
答え

クイズ 解答

Add.java をコンパイルして実行する正しいコマンドの組み合わせはどれですか?

A
java Add.java → javac Add
B
javac Add.java → java Add
C
javac Add → java Add.class
D
java Add.java → java Add

javacで.javaファイルをコンパイルしてクラスファイルを生成し、javaコマンドで(拡張子なしの)クラス名を指定して実行します。

37
20

Java基礎 - 変数とデータ型

3

変数とデータ型

データに名前をつけて使う

50
21
Java基礎 - 変数とデータ型

変数とは

変数は「データを保存するためのメモリ領域に名前をつけたもの」です。

変数(Variable)

扱うデータをメモリに保存するための名前付きの領域。データ型を決めて宣言してから使う。

宣言:変数名とデータ型を決める

代入:変数に値を入れる(= は等号ではなく代入)

参照:変数の値を利用する

Javaは静的型付け言語。事前に型を決める必要がある

51
22
Java基礎 - 変数とデータ型

入門編で扱うデータ型

Javaの基本的なデータ型です。Stringだけ頭が大文字なので注意。

型名
意味
データ例

int

整数

-1, 0, 1, 100

double

実数(小数)

0.3, 1.0, 3.14

String

文字列

"こんにちは", "山田太郎"

boolean

真偽値

true / false(Yes/Noではない)

52
23
Java基礎 - 変数とデータ型

変数の宣言・代入・参照

宣言と代入は1行にまとめて書けます。型に応じた値を代入します。

java
public class Variables {
    public static void main(String[] args) {
        // 宣言だけ
        int num1;
        double num2;

        // 代入(型に応じた値)
        num1 = 10;
        num2 = 3.1416;

        // 1文で宣言と代入(初期化)
        String name = "山田太郎";

        // 参照(変数の中身を表示)
        System.out.println(num1);   // 10
        System.out.println(num2);   // 3.1416
        System.out.println(name);   // 山田太郎
    }
}
53
24
Java基礎 - 変数とデータ型

基本データ型一覧

Javaの基本データ型は8種類。整数型・実数型・真偽値・文字型に分類されます。

基本データ型
整数型
byte(-128〜127)
short(-32768〜32767)
int(約±21億)
long(約±922京)
実数型
float(単精度浮動小数点)
double(倍精度浮動小数点)
その他
boolean(true/false)
char(1文字、'A'のように指定)
54
25
Java基礎 - 変数とデータ型

変数の初期化

初期化とは「最初の値の代入」のこと。Javaでは未初期化のローカル変数を使うとエラーになります。

  • 初期化=1度目の代入。2回目以降は単に「代入」
  • ローカル変数は初期化しないと使えない(コンパイルエラー)
  • Eclipseは未初期化変数に警告を表示してくれる
  • int x = 0; のように宣言と同時に初期値を設定するのが一般的
  • クラスのフィールドは型ごとのデフォルト値(int → 0、boolean → false)で初期化される
55
26
Java基礎 - 変数とデータ型

定数(final)

finalキーワードを付けると、一度代入したら変更できない「定数」になります。

java
// 定数の宣言(命名規約:すべて大文字、単語間は _ で区切る)
final int BIT_PER_1_BYTE = 8;            // 1バイトあたりのビット数
final int AGE_NONCHARGE = 6;             // 入場料無料の年齢
final double MANAGER_BASE_SALARY = 400000;  // 管理職の基準給与
final String WELCOME_MESSAGE = "こんにちは!";

// 再代入しようとするとコンパイルエラー
// AGE_NONCHARGE = 7;  // ← エラー!
56
27
Java基礎 - 変数とデータ型

定数を使うメリット

値をハードコーディングせず、定数で管理する3つの利点。

修正が楽
  • 1箇所変えれば全体に反映
  • 変更漏れが減る
トレース不要
  • 値が変わらないと保証できる
  • 読み手の思考負荷を下げる
可読性向上
  • 命名で意図を伝えられる
  • 数字の意味がコードから読める
57
28
Java基礎 - 変数とデータ型
クイズ

クイズ

変数とデータ型の理解を確認しましょう。

次のうち、Javaの構文として正しい変数宣言はどれですか?

A
int 1num = 10;
B
String name = "山田";
C
double price = 100; // doubleには小数が必要
D
Integer count = 5; // 入門編の基本型ではない
58
29
Java基礎 - 変数とデータ型
答え

クイズ 解答

次のうち、Javaの構文として正しい変数宣言はどれですか?

A
int 1num = 10;
B
String name = "山田";
C
double price = 100; // doubleには小数が必要
D
Integer count = 5; // 入門編の基本型ではない

String name = "山田"; が正しいJavaの構文です。なお double price = 100; もJavaでは合法(自動型変換が働く)ですが、入門段階では明示的に 100.0 と書くのが推奨されます。

59
30

Java基礎 - 数値計算

4

数値計算と文字列連結

値を計算する・つなげる

70
31
Java基礎 - 数値計算

算術演算子

Javaの基本的な計算演算子です。

演算子
意味
結果

+

加算

9 + 3

12

-

減算

9 - 3

6

*

乗算

9 * 3

27

/

除算

9 / 3

3

%

剰余(余り)

100 % 3

1

71
32
Java基礎 - 数値計算

四則演算と優先順位

乗除算は加減算より優先。括弧で優先順位を変えられます。

java
int x = 9;
int y = 3;
int z;

z = x + y;          // 12
z = x - y;          // 6
z = x * 2;          // 18
z = 100 % 3;        // 1(あまり)

// 優先順位:乗除算が先
z = y * 100 + x * 10;       // 300 + 90 = 390
z = y * (100 + x) * (10 + z);  // 括弧で優先順位を制御

// 整数同士の割り算は切り捨て
int result = 7 / 2;  // 3 ではなく 3(小数部切り捨て)
72
33
Java基礎 - 数値計算

複合代入演算子

変数自身への計算と代入を1つの演算子で書けます。

演算子
意味
同等の式

+=

加算代入

x += 2

x = x + 2

-=

減算代入

x -= 2

x = x - 2

*=

乗算代入

x *= 2

x = x * 2

/=

除算代入

x /= 2

x = x / 2

%=

剰余代入

x %= 2

x = x % 2

73
34
Java基礎 - 数値計算

インクリメント・デクリメント

値を1増やす(++)/1減らす(--)演算子。ループのカウンタでよく使います。

java
int i = 0;

// インクリメント
i++;        // i = i + 1 と同じ → i は 1
++i;        // 同じく i = i + 1 → i は 2

// デクリメント
i--;        // i = i - 1 → i は 1
--i;        // i = i - 1 → i は 0

// for ループでよく使う
for (int j = 0; j < 10; j++) {
    System.out.println(j);
}
74
35
Java基礎 - 数値計算

文字列の連結

+ 演算子は数値の加算だけでなく、文字列の連結にも使えます。文字列と数値の + は文字列として連結されます。

java
String f = "Yamada";
String l = "Taro";
int y = 23;

System.out.print("私の名前は");
System.out.print(f + l);            // YamadaTaro
System.out.println("です。");

// 文字列と数値の混在連結
System.out.println(l + " " + f + " is " + y + " years old.");
// 結果: Taro Yamada is 23 years old.
75
36
Java基礎 - 数値計算

ユーザー入力の受け取り(Scanner)

java.util.Scanner クラスでキーボード入力を受け取ります。整数なら nextInt()、文字列なら next() を使います。

java
import java.util.Scanner;

public class Greet {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("あなたの年齢を入力してください: ");
        int age = scan.nextInt();

        System.out.print("あなたの名前を入力してください: ");
        String name = scan.next();

        System.out.println(name + "さんは" + age + "歳ですね。");
    }
}
76
37
Java基礎 - 数値計算
クイズ

クイズ

算術演算の理解を確認しましょう。

int a = 7; int b = 2; のとき、System.out.println(a / b); の出力はどれ?

A
3.5
B
3
C
4
D
コンパイルエラー
77
38
Java基礎 - 数値計算
答え

クイズ 解答

int a = 7; int b = 2; のとき、System.out.println(a / b); の出力はどれ?

A
3.5
B
3
C
4
D
コンパイルエラー

int同士の割り算は結果もint型で、小数部は切り捨てられます。3.5を得たい場合は、どちらかをdouble型にする必要があります(例: a / 2.0)。

78
39

Java基礎 - 制御構造

5

制御構造

if・while・for・switch で処理を制御する

90
40
Java基礎 - 制御構造

3つの基本制御構造

どんなに複雑なプログラムも、この3つの組み合わせで作れます。

順次
  • 上から下に処理を実行
  • Javaでは特別な構文不要
選択(分岐)
  • 条件によって処理を分ける
  • if 文 / switch 文
繰り返し(反復)
  • 条件を満たす間処理を繰り返す
  • while 文 / for 文
91
41
Java基礎 - 制御構造

比較演算子

条件式で使う比較演算子です。結果は boolean 型(true / false)になります。

記号
意味

==

等しい

age == 20

!=

等しくない

age != 20

<

より小さい

age < 20

>

より大きい

age > 20

<=

以下

age <= 20

>=

以上

age >= 20

92
42
Java基礎 - 制御構造

if 文の基本

条件が true のときだけブロック内を実行します。else でその他の処理を書けます。

java
// 条件成立時のみ実行
if (age >= 60) {
    System.out.println("当館のシルバー割引が適用されます。");
}

// 二択の分岐
if (age >= 20) {
    System.out.println("成年料金は ¥2,000 円となります");
} else {
    System.out.println("未成年料金は ¥1,200 円となります");
}
93
43
Java基礎 - 制御構造

else if で多段階の分岐

条件が3つ以上のときは else if を使います。最初に一致したブロックだけが実行されます。

java
int score = 75;

if (score >= 80) {
    System.out.println("優");
} else if (score >= 60) {
    System.out.println("良");
} else if (score >= 40) {
    System.out.println("可");
} else {
    System.out.println("不可");
}
94
44
Java基礎 - 制御構造

switch 文

特定の値に応じて多肢選択するときに使います。break を忘れると次のcaseに流れる「フォールスルー」が起きます。

java
int a = 2;

switch (a) {
    case 1:
        System.out.println("a は 1 です");
        break;
    case 2:
        System.out.println("a は 2 です");
        break;
    case 3:
        System.out.println("a は 3 です");
        break;
    default:
        System.out.println("入力エラー");
}

// String型もswitch可能(Java 7以降)
String bloodType = "A";
switch (bloodType) {
    case "A": case "a":
        System.out.println("日本人の約40%"); break;
    case "O": case "o":
        System.out.println("日本人の約30%"); break;
}
95
45
Java基礎 - 制御構造

while 文

条件式が成立する間、処理を繰り返します。回数が決まっていないループに向きます。

java
// 1から100までの合計を計算
int num = 0;
int sum = 0;
while (num < 100) {
    num = num + 1;
    sum = sum + num;
}
System.out.println("答えは:" + sum);  // 5050

// 別パターン: ans を2倍ずつ100以下になる間繰り返す
int ans = 3;
while (ans <= 100) {
    System.out.println(ans);
    ans = ans * 2;
}
96
46
Java基礎 - 制御構造

for 文

決まった回数の繰り返しに向く構文。「初期値・条件式・更新式」を1行にまとめます。

java
// 2の8乗を求める
int ans = 1;
for (int i = 1; i <= 8; i++) {
    ans = ans * 2;
}
System.out.println(ans);  // 256

// 九九(二重ループ)
for (int x = 1; x <= 9; x++) {
    for (int y = 1; y <= 9; y++) {
        System.out.print(x * y + " ");
    }
    System.out.println();  // 行末で改行
}
97
47
Java基礎 - 制御構造

break と continue

ループの途中で抜けたい・スキップしたいときに使う2つの文。

break(脱出)

  • ループ自体を終了する
  • それ以降は実行されない
  • 多重ループでは最も内側だけ抜ける
  • 条件達成で打ち切る用途

continue(次の周回へ)

  • 残りの処理をスキップ
  • ループの先頭に戻る
  • ループ自体は継続する
  • 特定条件だけ飛ばしたいときに使う
98
48
Java基礎 - 制御構造

break の使用例

-1 が入力されたら合計の集計を打ち切る例。

java
Scanner scan = new Scanner(System.in);
int sum = 0;

for (int i = 0; i < 10; i++) {
    System.out.print("数値を入力(-1で終了): ");
    int input = scan.nextInt();
    if (input == -1) {
        break;  // ループを抜ける
    }
    sum = sum + input;
}
System.out.println("合計は: " + sum);
99
49
Java基礎 - 制御構造

ブロックとスコープ

変数の有効範囲は、宣言したブロック { } の中だけ。範囲を抜けると消滅します。

  • 変数は宣言したブロック内でのみ有効
  • ブロックを抜けると変数は破棄される
  • 別のブロックなら同じ名前の変数を宣言できる
  • 上位ブロックで宣言した変数は、内側のブロックでも参照できる
  • 上位の変数と同名のローカル変数を内側に宣言するとコンパイルエラー
  • スコープは「使う直前で宣言」「使うブロック内で宣言」が原則
100
50
Java基礎 - 制御構造
クイズ

クイズ

制御構造の理解を確認しましょう。

for (int i = 0; i < 5; i++) { ... } で変数 i に入る値はどれ?

A
1, 2, 3, 4, 5
B
0, 1, 2, 3, 4
C
0, 1, 2, 3, 4, 5
D
1, 2, 3, 4
101
51
Java基礎 - 制御構造
答え

クイズ 解答

for (int i = 0; i < 5; i++) { ... } で変数 i に入る値はどれ?

A
1, 2, 3, 4, 5
B
0, 1, 2, 3, 4
C
0, 1, 2, 3, 4, 5
D
1, 2, 3, 4

i = 0 から始まり、i < 5 が成立する間(つまり i = 4 まで)繰り返されるので、 0, 1, 2, 3, 4 の5つの値になります。

102
52

Java基礎 - 条件式

6

条件式と論理演算

複合条件・短絡評価・フラグ

120
53
Java基礎 - 条件式

条件式と boolean 型

条件式の結果は boolean 型。変数に格納したり、別の条件で再利用できます。

java
int totalAmount = 12000;

// 比較結果を boolean 変数に格納
boolean isOver10000 = totalAmount >= 10000;
boolean isExactly10000 = totalAmount == 10000;

// boolean 変数を if の条件として使える
if (isOver10000) {
    System.out.println("合計額は 10000 以上です");
} else {
    System.out.println("合計額は 10000 未満です");
}
121
54
Java基礎 - 条件式

文字列の比較は equals メソッド

文字列の一致判定に == を使うのは誤り。Javaでは String の equals メソッドを使います。

java
String prefName = "東京";

// 誤った書き方(参照の比較になる)
if (prefName == "東京") {  // ← NG
    System.out.println("一致");
}

// 正しい書き方(中身の比較)
if (prefName.equals("東京")) {  // OK
    System.out.println("一致");
}

// 否定(東京でない)
if (!prefName.equals("東京")) {
    System.out.println("東京以外");
}
122
55
Java基礎 - 条件式

論理演算子

複数の条件を組み合わせるための演算子。

&&(論理積 / AND)
  • 両方が true のときだけ true
  • english >= 70 && math >= 70
||(論理和 / OR)
  • どちらか一方が true なら true
  • total >= 220 || hasBonus
!(論理否定 / NOT)
  • 真偽を反転させる
  • !isFinished
123
56
Java基礎 - 条件式

複合条件の例

&& と || を組み合わせて、複雑な条件を1つの if で書けます。

java
int english = 75;
int math = 80;

// 英語と数学の両方が70点以上なら合格
if (english >= 70 && math >= 70) {
    System.out.println("おめでとう!合格です");
} else {
    System.out.println("残念!不合格です");
}

// && は || より優先される。複雑なときは括弧で明示
if ((english >= 70 && math >= 70)
    || (english + math >= 160)) {
    System.out.println("合格基準を満たしています");
}
124
57
Java基礎 - 条件式

演算子の優先順位

複数の演算子が並んだとき、優先度の高いものから評価されます。

優先度
種類
演算子

式(括弧)

( )

単項

! ++ --

乗除剰余

* / %

加減

+ -

比較

< <= > >=

等価

== !=

論理積

&&

論理和

||

代入

=

125
58
Java基礎 - 条件式

短絡評価(ショートサーキット)

論理演算では、結果が確定した時点で残りの式は評価されません。エラーの回避にも使えます。

  • && の場合:左が false なら式全体が false 確定 → 右は評価しない
  • || の場合:左が true なら式全体が true 確定 → 右は評価しない
  • b != 0 && (a / b > 1) は b == 0 でもエラーにならない
  • obj != null && obj.method() のように null チェックでよく使う
  • 副作用のある式(メソッド呼び出し)を右に置くと「実行されない」ことが起きる
126
59
Java基礎 - 条件式

フラグ変数

複雑な条件判定の途中経過を boolean 変数に保存し、可読性を高めるテクニック。

java
int english = 75, math = 65, japanese = 80;
boolean isSuccess = false;

// 条件①: 全科目70点以上
if (english >= 70 && math >= 70 && japanese >= 70) {
    isSuccess = true;
}

// 条件②: 合計220点以上 かつ 全科目50点以上
if (english + math + japanese >= 220) {
    if (english >= 50 && math >= 50 && japanese >= 50) {
        isSuccess = true;
    }
}

// フラグで最終判定
if (isSuccess) {
    System.out.println("おめでとう!合格です。");
} else {
    System.out.println("残念!不合格");
}
127
60
Java基礎 - 条件式
クイズ

クイズ

文字列比較の理解を確認しましょう。

文字列 s が "END" と等しいかを判定する正しい書き方はどれですか?

A
if (s == "END")
B
if (s.equals("END"))
C
if (s.compare("END"))
D
if (s = "END")
128
61
Java基礎 - 条件式
答え

クイズ 解答

文字列 s が "END" と等しいかを判定する正しい書き方はどれですか?

A
if (s == "END")
B
if (s.equals("END"))
C
if (s.compare("END"))
D
if (s = "END")

文字列の中身を比較するには equals メソッドを使います。== は参照(オブジェクトの同一性)の比較になり、意図と異なる結果になることがあります。

129
62

Java基礎 - 配列

7

配列

同じ型のデータをまとめて扱う

140
63
Java基礎 - 配列

配列とは

配列は「同じデータ型の値を、まとめて1つの変数で扱う」しくみです。

配列(Array)

連続した領域に同じ型の値を並べたデータ構造。要素番号(添字)でアクセスする。

要素はすべて同じ型

要素数は宣言時に決め、後から変更不可

添字(index)は 0 から始まる

最後の要素の添字は length - 1

141
64
Java基礎 - 配列

配列の宣言と作成

型名[] 配列名; で宣言し、new 型名[要素数] で領域を確保します。

java
// 宣言と要素確保を別々に
int[] row1;
row1 = new int[3];           // int 型 3要素

double[] row2;
row2 = new double[2];        // double 型 2要素

// 1文で宣言と確保
int[] row3 = new int[3];

// 初期値をまとめて設定
int[] scores = {80, 75, 91};
String[] names = {"太郎", "次郎"};
142
65
Java基礎 - 配列

配列要素への代入と参照

添字([] の中の番号)で個別の要素にアクセスします。添字は0から始まる点に注意。

java
int[] row1 = new int[3];
row1[0] = 10;   // 1つ目
row1[1] = 20;   // 2つ目
row1[2] = 30;   // 3つ目(最後)

// 参照
System.out.println(row1[0]);             // 10
System.out.println(row1[1] + row1[2]);   // 50

// 文字列配列も同様
String[] name = {"太郎", "次郎"};
System.out.println(name[0] + "と" + name[1] + "は兄弟");
143
66
Java基礎 - 配列

配列の要素数(length)

配列名.length で要素数を取得できます。ハードコーディングを避けて保守性を高めます。

java
int[] array = {3, 4, 9, 0, 1, 6};
int sum = 0;

// 要素数を直接書く(保守性が低い)
for (int i = 0; i < 6; i++) {
    sum += array[i];
}

// length を使う(要素数が変わっても修正不要)
for (int i = 0; i < array.length; i++) {
    sum += array[i];
}

// 拡張 for 文(より簡潔)
for (int v : array) {
    sum += v;
}

System.out.println("合計値: " + sum);
144
67
Java基礎 - 配列

2次元配列

行と列の2方向に拡張した配列。表のようなデータを表現できます。

java
// 2次元配列の宣言と確保
int[][] a = new int[2][3];   // 2行3列

// 値の代入
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
a[1][0] = 4; a[1][1] = 5; a[1][2] = 6;

System.out.println(a[1][1]);  // 5

// 九九の表を2次元配列で構築
int[][] kuku = new int[9][9];
for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
        kuku[i][j] = (i + 1) * (j + 1);
    }
}
145
68
Java基礎 - 配列
クイズ

クイズ

配列の理解を確認しましょう。

int[] arr = {10, 20, 30, 40, 50}; のとき arr[2] の値はどれ?

A
10
B
20
C
30
D
40
146
69
Java基礎 - 配列
答え

クイズ 解答

int[] arr = {10, 20, 30, 40, 50}; のとき arr[2] の値はどれ?

A
10
B
20
C
30
D
40

配列の添字は 0 から始まるので、arr[0]=10, arr[1]=20, arr[2]=30 となります。

147
70

Java基礎 - メソッド

8

メソッド

処理をまとめて再利用する

160
71
Java基礎 - メソッド

メソッドとは

メソッドは「処理のかたまりに名前を付けて呼び出せるようにしたもの」。他言語の「関数」「サブルーチン」に相当します。

メソッド(Method)

引数を受け取り、処理を実行し、戻り値を返す再利用可能な処理のかたまり。Javaではすべて何らかのクラスに属する。

main メソッドは特別。プログラム起動時に最初に呼ばれる

main 以外は別のメソッドから呼び出されない限り実行されない

メソッド内で宣言した変数(ローカル変数)は他のメソッドから参照できない

引数と戻り値で値を受け渡しする

161
72
Java基礎 - メソッド

メソッドの呼び出し

main メソッドが他のメソッドを呼び出す流れ。

呼び出し元(main)

sayHello() のようにメソッド名を書いて呼び出す

呼び出し先(sayHello)

開始から終了までの処理を実行

呼び出し元へ戻る

呼び出し先の処理が終わると、呼び出し元の次の行から処理が再開する

162
73
Java基礎 - メソッド

メソッドの定義と呼び出し

修飾子・戻り値の型・メソッド名・引数・処理本体で構成されます。

java
public class TryMethod {
    public static void main(String[] args) {
        sayHello();    // 呼び出し
        sayHello();    // 何度でも呼べる
    }

    // メソッド定義
    static void sayHello() {
        System.out.println("Hello, I am ...");
    }
}
// 出力:
// Hello, I am ...
// Hello, I am ...
163
74
Java基礎 - メソッド

引数と戻り値

引数で値を渡し、return で結果を返します。宣言文の戻り値の型と return 値の型を一致させること。

java
public class CalcSushi {
    public static void main(String[] args) {
        int amount = amountByPrice(3, 100);  // 引数: 枚数, 単価
        System.out.println("会計: " + amount + "円");  // 300円
    }

    // 皿別金額計算メソッド
    static int amountByPrice(int number, int price) {
        int amount = number * price;
        return amount;  // 戻り値
    }
}
164
75
Java基礎 - メソッド

戻り値がないメソッド(void)

値を返さないメソッドは戻り値の型を void にします。return; でメソッドを途中終了できます。

java
static void sayHello(int age) {
    if (age < 20) {
        System.out.println("若いですね!");
        return;  // 途中で抜ける
    }
    System.out.println("もうそんなに若くないですね!");
    // void なので return 文は省略可
}

// 引数なし・戻り値なし
static void greet() {
    System.out.println("こんにちは");
}
165
76
Java基礎 - メソッド

複数の引数

引数は順番で対応するため、呼び出し時の値の順序が重要です。

java
public static void main(String[] args) {
    int japanese = 75, english = 65, math = 70;
    tryNextGrade(japanese, english, math, false);
    tryNextGrade(japanese, english, math, true);
}

static void tryNextGrade(int nationalLanguage, int english,
                          int mathematics, boolean submitReport) {
    // レポート未提出なら国語を10点減点
    if (!submitReport) {
        nationalLanguage = nationalLanguage - 10;
    }
    if (nationalLanguage + english + mathematics >= 210) {
        System.out.println("進級できます。");
    } else {
        System.out.println("進級できません。");
    }
}
166
77
Java基礎 - メソッド

オーバーロード

同じ名前で引数の型・個数・順序が異なるメソッドを定義できます。これを「オーバーロード」と呼びます。

java
public class TryOverload {
    // ① int 2つを引数に取る
    static double calcBMI(int height, int weight) {
        return weight / ((height / 100.0) * (height / 100.0));
    }

    // ② double 2つを引数に取る(① とは別メソッド扱い)
    static double calcBMI(double height, double weight) {
        return weight / ((height / 100.0) * (height / 100.0));
    }

    // 引数を省略したい場合の利用例
    static void sayHello(String name) {
        sayHello(name, false);  // デフォルトは日本語
    }
    static void sayHello(String name, boolean inEnglish) {
        if (inEnglish) System.out.println("Hello, " + name);
        else           System.out.println("こんにちは、" + name);
    }
}
167
78
Java基礎 - メソッド

プログラムの引数(コマンドライン引数)

main メソッドの String[] args は、プログラム起動時に外部から受け取る値です。

  • public static void main(String[] args) の args が引数
  • 起動: java MainArgs suzuki 22 SE → args = {"suzuki", "22", "SE"}
  • args.length で引数の数を取得できる
  • 数値として使うには Integer.parseInt(args[0]) などで変換
  • Eclipseでは「実行構成」のArgumentsタブで設定できる
168
79
Java基礎 - メソッド
クイズ

クイズ

オーバーロードの理解を確認しましょう。

次の calcArea メソッドのうち、すでに static int calcArea(int w, int h) が存在するクラスにオーバーロードとして追加できるのはどれ?

A
static int calcArea(int x, int y)
B
static double calcArea(int w, int h)
C
static int calcArea(int side)
D
static int calcArea(int a, int b) // 引数名だけ違う
169
80
Java基礎 - メソッド
答え

クイズ 解答

次の calcArea メソッドのうち、すでに static int calcArea(int w, int h) が存在するクラスにオーバーロードとして追加できるのはどれ?

A
static int calcArea(int x, int y)
B
static double calcArea(int w, int h)
C
static int calcArea(int side)
D
static int calcArea(int a, int b) // 引数名だけ違う

オーバーロードはメソッド名と引数の型・個数・順序(シグネチャ)で区別されます。引数名は無関係。引数の個数や型が異なる static int calcArea(int side) はOK。戻り値の型だけ違うのはNGです。

170
81

Java基礎 - 型変換

9

式と値・データ型変換

型同士の変換とキャスト

190
82
Java基礎 - 型変換

式と値の評価順序

複雑な式も、演算子の優先順位に従って1つずつ処理されているだけです。

  • 演算子の優先順位の高い順に評価
  • メソッドの引数に別のメソッドを書くと、内側から評価される
  • add(add(a, b), c) → まず add(a, b) → その結果と c で add
  • 条件式の && / || は短絡評価され、左から順に評価
  • 複雑な式は中間変数に分けると読みやすくなる
191
83
Java基礎 - 型変換

自動型変換とキャスト

異なるデータ型同士で値を代入する2つの方法。

自動型変換(暗黙)

  • 範囲が小さい → 大きい型へ
  • int → double(情報を失わない)
  • コードに何も書かなくてOK
  • double d = 10; // OK

キャスト(明示)

  • 範囲が大きい → 小さい型へ
  • double → int(情報損失あり)
  • (型名) で明示する
  • int i = (int) 3.14; // 3
192
84
Java基礎 - 型変換

型変換の例

自動型変換とキャストを使い分けます。

java
int i1;
double d1 = 1.0;
// i1 = d1;          // ❌ コンパイルエラー(double → int)

double d2;
int i2 = 1;
d2 = i2;             // ✅ 自動型変換(int → double)

int i3;
double d3 = 1.0;
i3 = (int) d3;       // ✅ キャストで明示的に変換

// 整数型同士の割り算は切り捨て
int a = 5, b = 2;
System.out.println(a / b);              // 2
double c = (double) a / b;
System.out.println(c);                  // 2.5
193
85
Java基礎 - 型変換

基本データ型の範囲

小さい範囲から大きい範囲への変換は自動。逆方向はキャストが必要です。

扱える範囲
用途

byte

-128 〜 127

小さい整数

short

-32,768 〜 32,767

中規模整数

int

約 ±21億

通常の整数

long

約 ±922京

大きな整数

float

単精度 約7桁

軽量な実数

double

倍精度 約15桁

通常の実数

194
86
Java基礎 - 型変換

文字列を数値に変換(parseInt)

String と数値型はキャストできません。専用メソッドを使います。

java
String s = "120";

// int i = (int) s;             // ❌ キャスト不可
int i = Integer.parseInt(s);    // ✅ 文字列 → int

System.out.println(i);          // 120
System.out.println(i * 2);      // 240(数値として計算可)

// 数値化できない場合は実行時エラー(NumberFormatException)
// Integer.parseInt("abc");     // ← 実行時にエラー

// double 用は Double.parseDouble
double d = Double.parseDouble("3.14");
195
87
Java基礎 - 型変換

計算結果のデータ型

計算は引数の型の組み合わせで結果型が決まります。

java
int a = 5, b = 2;
System.out.println(a / b);          // 2 (int / int → int で切り捨て)

double c = a / b;
System.out.println(c);              // 2.0 (右辺が int / int = 2、自動でdoubleに)

double c2 = (double) a / b;
System.out.println(c2);             // 2.5 (double / int → double)

System.out.println(5.0 / 2);        // 2.5 (double / int → double)
System.out.println(5 / 2.0);        // 2.5 (int / double → double)
196
88
Java基礎 - 型変換
クイズ

クイズ

型変換の理解を確認しましょう。

int x = 7; double y = x / 2; のとき、y の値はどれ?

A
3.5
B
3.0
C
2
D
コンパイルエラー
197
89
Java基礎 - 型変換
答え

クイズ 解答

int x = 7; double y = x / 2; のとき、y の値はどれ?

A
3.5
B
3.0
C
2
D
コンパイルエラー

右辺は int / int = 3(切り捨て)が先に評価され、その後 double に自動変換されて 3.0 が代入されます。3.5 を得たい場合は (double) x / 2 のように書く必要があります。

198
90

Java基礎 - デバッグ

10

デバッグ

プログラムの動きを追跡する

210
91
Java基礎 - デバッグ

デバッグとは

デバッグはプログラムの問題を特定し修正する作業、またはそのためにプログラムをトレースする手段を指します。

デバッグ(Debug)

プログラムのバグ(不具合)を見つけて修正する一連の作業。トレース手法を使ってプログラムの実行を追いかける。

バグ=プログラムの不具合や想定外の動作

コードを書いた直後に何らかのバグがあるのは当然

効率的にデバッグできる人は開発も速い

Eclipseのデバッグ機能で実行を追跡できる

211
92
Java基礎 - デバッグ

Eclipseのデバッグ機能

Eclipseには強力なデバッグ機能が搭載されています。

ブレークポイント
  • プログラムを一時停止する位置
  • 行番号の左端をダブルクリック
  • 複数設定できる
ステップ実行
  • 1行ずつ実行
  • F6 キー(ステップオーバー)
  • F5 でメソッド内に入る
再開
  • 次のブレークポイントまで進む
  • F8 キー
  • なければ最後まで実行
変数監視
  • 停止中に変数の値を確認
  • 変数ビューで表示
  • 変化した値は黄色で強調
212
93
Java基礎 - デバッグ

古典的なデバッグ手法(println)

デバッガが使えない場面では、System.out.println で値や経路を表示する方法も使われます。

java
int year = 2024;
System.out.println("入力された年: " + year);  // 値の確認

boolean isLeapYear = false;
if (year % 4 == 0) {
    System.out.println("通過: 4で割って余らない");  // 経路の確認
    if (year % 100 == 0) {
        System.out.println("通過: 100で割って余らない");
        if (year % 400 == 0) {
            isLeapYear = true;
        }
    } else {
        isLeapYear = true;
    }
}
System.out.println("うるう年判定: " + isLeapYear);
213
94
Java基礎 - デバッグ

デバッグ実行の流れ

Eclipseでブレークポイントを使ったデバッグの基本フロー。

ブレークポイントを設定:止めたい行番号の左端をダブルクリック
デバッグボタン(虫アイコン)でデバッグモード起動
ブレークポイントで一時停止 → 変数ビューで値を確認
F6(次の行へ)/ F8(次のブレークポイントまで)でトレース
問題箇所を特定したら、コードを修正して再実行
214
95
Java基礎 - デバッグ

条件付きブレークポイント

ブレークポイントに条件を設定して、特定の状況だけで止められます。

  • ブレークポイントを右クリック → ブレークポイントプロパティーを開く
  • ヒットカウント:N回目に到達したときだけ停止(ループ中に有効)
  • 条件付き:式が true のときだけ停止(例: ans > 100)
  • 大量のループの中の異常値だけを捕まえるのに有用
  • 「最後の1回だけ」「異常値のときだけ」など範囲を絞れる
215
96
Java基礎 - デバッグ
クイズ

クイズ

Eclipseのデバッグ機能を確認しましょう。

プログラムが一時停止しているとき、F8 キーを押すとどうなる?

A
1行だけ次の行に進む
B
プログラムを最初からやり直す
C
次のブレークポイントまで進む(なければ終了まで)
D
変数の値を変更する
216
97
Java基礎 - デバッグ
答え

クイズ 解答

プログラムが一時停止しているとき、F8 キーを押すとどうなる?

A
1行だけ次の行に進む
B
プログラムを最初からやり直す
C
次のブレークポイントまで進む(なければ終了まで)
D
変数の値を変更する

F8 は「再開」。次のブレークポイントまで一気に進みます。次がなければプログラムは最後まで実行されて終了します。F6 は1行ずつのステップ実行です。

217
98

Java基礎 - 例外処理

11

例外処理

エラーに強いプログラムを書く

230
99
Java基礎 - 例外処理

例外とは

例外は、プログラム実行中に発生する例外的な事象を表すしくみです。

例外(Exception)

実行中に予期しない事態が起きたときに発生するオブジェクト。適切に処理しなければプログラムは停止する。

ハードウェア障害など想定外のシステム障害

ファイルが存在しない、形式が不正などの前提条件違反

ゼロ除算・配列範囲外などコード上のミス

try / catch で安全に対処できる

231
100
Java基礎 - 例外処理

例外発生の例(ゼロ除算)

分母に0を入力すると ArithmeticException が発生してプログラムが停止します。

java
Scanner scan = new Scanner(System.in);
System.out.print("分子を入力してください: ");
int a = scan.nextInt();
System.out.print("分母を入力してください: ");
int b = scan.nextInt();
int result = a / b;   // b = 0 のとき例外発生!
System.out.println("結果: " + result);

// 実行結果(b=0 のとき):
// Exception in thread "main" java.lang.ArithmeticException: / by zero
//   at ...
232
101
Java基礎 - 例外処理

try / catch / finally

例外を捕まえる構文。tryで監視、catchで対処、finallyで必ず実行。

java
try {
    Scanner scan = new Scanner(System.in);
    System.out.print("分子: ");
    int a = scan.nextInt();
    System.out.print("分母: ");
    int b = scan.nextInt();
    int result = a / b;     // 例外が起きうる処理
    System.out.println("結果: " + result);
}
catch (Exception e) {
    // 例外が発生したときの処理
    System.out.println("0で割り算を行うことはできません。");
}
finally {
    // 例外の有無に関わらず必ず実行
    System.out.println("プログラムを終了します。");
}
233
102
Java基礎 - 例外処理

例外処理の実行の流れ

例外が発生した場合・しない場合の処理経路。

try ブロック内で処理開始 → 例外が起きたら即 catch にジャンプ
catch ブロックで対処コードを実行(println等)
catch 後 finally ブロックを必ず実行
例外が起きなかった場合も finally は実行される
finally 完了後、try-catch-finally の後の処理に進む
234
103
Java基礎 - 例外処理

主要な例外クラス

Exception の下は、宣言が要らない RuntimeException 系と、必ず処理が要る検査例外に分かれます。

Exception
RuntimeException(非検査)
NullPointerException(null参照)
ArithmeticException(ゼロ除算)
ArrayIndexOutOfBoundsException
NumberFormatException(parseIntの失敗)
ClassCastException
検査例外(catch か throws が必須)
IOException(読み書きの失敗)
FileNotFoundException
235
104
Java基礎 - 例外処理

よく出会う例外と原因

入門段階で発生しやすい例外と、そのよくある原因です。

例外クラス
主な原因
対策

ArithmeticException

ゼロ除算 (a / 0)

分母を事前にチェック

ArrayIndexOutOfBoundsException

配列の範囲外アクセス

arr.length と比較してから操作

NumberFormatException

"abc" を parseInt に渡した

try-catch で囲む / 入力検証

NullPointerException

null のオブジェクトに .method() を呼んだ

null チェックする

236
105
Java基礎 - 例外処理

エラーメッセージの読み方

実行時エラーは赤字で表示されます。3つのポイントを押さえれば原因に辿り着けます。

java
// 出力例:
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
//   Index 10 out of bounds for length 10
//   at TryAibe.main(TryAibe.java:18)

// ① 例外クラス名: ArrayIndexOutOfBoundsException
//    → 「配列の範囲外」を意味する
// ② 詳細メッセージ: Index 10 out of bounds for length 10
//    → 添字10は長さ10の配列の範囲外(添字は0〜9まで)
// ③ 発生箇所: TryAibe.java の 18行目, mainメソッド
//    → コードの該当行を確認する

// よくあるバグ: for (int i = 0; i <= arr.length; i++) ←  i < arr.length が正
237
106
Java基礎 - 例外処理
クイズ

クイズ

例外処理の理解を確認しましょう。

try / catch / finally 構文で、例外が発生してもしなくても必ず実行されるブロックはどれ?

A
try
B
catch
C
finally
D
どれも条件次第
238
107
Java基礎 - 例外処理
答え

クイズ 解答

try / catch / finally 構文で、例外が発生してもしなくても必ず実行されるブロックはどれ?

A
try
B
catch
C
finally
D
どれも条件次第

finally ブロックは例外の有無にかかわらず必ず実行されます。リソースの解放(ファイルクローズなど)の処理によく使われます。catch は例外が発生した場合のみ実行されます。

239
108
"

基本文法・制御構造・配列・メソッド・例外処理。Javaの土台がそろいました。次はオブジェクト指向で「クラス」の世界へ。

Javaプログラミング 入門編 完結

300
109