Java

Java入門

コードをコンパイルして実行し、Javaの基礎を一歩ずつ学びましょう。

この講座はJava 21(LTS)を対象にしています。

01

Javaとは

Javaは、型を明示して大規模なプログラムも整理しやすい言語です。ソースコードをバイトコードへコンパイルし、JVM(Java仮想マシン)上で動かします。

Javaが使われる分野
  • 企業の業務システムやWeb API
  • Androidアプリ
  • クラウド上のサーバー
  • 各種開発ツール
Hello.java→ javacHello.class→ java実行結果
02

Javaを実行してみよう

JDK 21をインストールし、ターミナルでバージョンを確認します。JDKにはコンパイラと実行環境が含まれます。

確認COMMAND
java --version
javac --version

Hello.javaを作ります。公開クラス名とファイル名は同じ大文字・小文字にします。

Hello.javaJAVA
public class Hello {
    public static void main(String[] args) {
        System.out.println("こんにちは、Java!");
    }
}
コンパイルと実行COMMAND
javac Hello.java
java Hello
実行結果OUTPUT
こんにちは、Java!
Java 11以降の簡易実行 小さな1ファイルならjava Hello.javaでも実行できます。ただし講座ではコンパイルの流れを理解するため、javacも使います。
03

基本の書き方

処理はmainメソッドから始まり、通常は上から順に進みます。文末にはセミコロンを書き、波かっこで処理のまとまりを表します。

順番とコメントJAVA
public class Order {
    public static void main(String[] args) {
        // 1行コメント
        System.out.println("1番目");
        System.out.println(10 + 20);
        System.out.println("3番目");
    }
}
実行結果OUTPUT
1番目
30
3番目
大文字・小文字を区別 StringSystemstringsystemとは書けません。エラーでは最初に示されたファイル名と行番号を確認します。
04

変数とデータ型

変数は「型 変数名 = 値;」で宣言します。基本型は値そのもの、Stringなどの参照型はオブジェクトへの参照を扱います。

主な型JAVA
String name = "Mity";  // 文字列
int age = 20;           // 整数
double height = 170.5;  // 小数
boolean student = true; // 真偽値
char grade = 'A';       // 1文字

System.out.println(name + "さんは" + age + "歳です");
System.out.println(height);
System.out.println(student);
System.out.println(grade);
実行結果OUTPUT
Mityさんは20歳です
170.5
true
A

変更しない値はfinal int TAX_RATE = 10;のように宣言します。定数名は大文字とアンダースコアで書くのが慣例です。

05

キーボード入力

Scannerで1行を文字列として読み、Integer.parseInt()で整数へ変換します。

InputExample.javaJAVA
import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.print("年齢を入力してください: ");
            String text = scanner.nextLine();
            int age = Integer.parseInt(text);
            System.out.println("来年は" + (age + 1) + "歳です");
        }
    }
}
実行例OUTPUT
年齢を入力してください: 20
来年は21歳です
数値でない入力 Integer.parseInt("二十")NumberFormatExceptionになります。後の例外処理で対応します。
06

演算子

種類演算子
計算+ - * / %7 / 2は3
比較== != > < >= <=score >= 80
論理&& || !adult && hasTicket
代入= += -= *= /=total += 100
料金計算JAVA
int price = 500;
int count = 3;
int subtotal = price * count;
int tax = subtotal * 10 / 100;
int total = subtotal + tax;

System.out.println("小計: " + subtotal + "円");
System.out.println("税込: " + total + "円");
実行結果OUTPUT
小計: 1500円
税込: 1650円
整数同士の割り算 7 / 2は小数部分を捨てて3です。小数の3.5が必要なら7.0 / 2のように一方をdoubleにします。金額の端数は業務ルールに従ってください。
07

条件分岐

ifelse ifelseで処理を切り替えます。

点数を判定JAVA
int score = 82;
String result;

if (score >= 80) {
    result = "合格(よくできました)";
} else if (score >= 60) {
    result = "合格";
} else {
    result = "再挑戦";
}
System.out.println(result);
実行結果OUTPUT
合格(よくできました)

文字列の内容はname.equals("Mity")で比較します。==は参照先が同じかを比べるため、文字列の内容比較には使いません。

08

繰り返し

forは回数が分かる処理、拡張for文は配列などの全要素、whileは条件が真の間の処理に向きます。

forとwhileJAVA
for (int i = 1; i <= 3; i++) {
    System.out.println(i + "回目");
}

int count = 2;
while (count > 0) {
    System.out.println("残り" + count);
    count--;
}
実行結果OUTPUT
1回目
2回目
3回目
残り2
残り1
無限ループ while内で条件が変わらないと終了しません。breakは途中終了、continueは今回だけ飛ばします。
09

配列とコレクション

配列は要素数が固定です。増減する一覧にはArrayList、キーと値の対応にはHashMapを使えます。

配列とListJAVA
import java.util.ArrayList;
import java.util.List;

int[] scores = {72, 95, 81};
System.out.println(scores[0]);

List<String> fruits = new ArrayList<>();
fruits.add("りんご");
fruits.add("みかん");
for (String fruit : fruits) {
    System.out.println(fruit);
}
実行結果OUTPUT
72
りんご
みかん
位置は0から 3要素の配列で使える添字は0、1、2です。scores[3]ArrayIndexOutOfBoundsExceptionになります。
10

メソッド

メソッドは処理へ名前を付けたものです。引数で値を受け取り、戻り値の型を宣言してreturnで結果を返します。

合計を返すJAVA
static int calculateTotal(int price, int count) {
    return price * count;
}

public static void main(String[] args) {
    int total = calculateTotal(500, 3);
    System.out.println("合計は" + total + "円です");
}
実行結果OUTPUT
合計は1500円です

値を返さないメソッドの戻り値はvoidです。まずは一つのメソッドに一つの役割を持たせます。

11

文字列を操作する

よく使う操作JAVA
String text = "  apple,orange,grape  ";
String cleaned = text.trim();
String[] fruits = cleaned.split(",");

System.out.println(cleaned.toUpperCase());
System.out.println(fruits.length);
System.out.println(String.join(" / ", fruits));
実行結果OUTPUT
APPLE,ORANGE,GRAPE
3
apple / orange / grape

Stringは変更できない値です。trim()toUpperCase()は元の文字列を変えず、新しい文字列を返します。

12

例外処理

利用者の入力など、想定できる失敗をtrycatchで処理します。

数値変換JAVA
String text = "二十";
try {
    int age = Integer.parseInt(text);
    System.out.println("来年は" + (age + 1) + "歳です");
} catch (NumberFormatException e) {
    System.out.println("数字で入力してください");
}
実行結果OUTPUT
数字で入力してください

理由なくcatch (Exception e)ですべてを捕まえると不具合を隠します。予想できる具体的な例外を指定します。詳しくは例外処理とテストで学びます。

13

ファイルを読み書きする

Files.writeString()Files.readString()でUTF-8のテキストを扱えます。

テキストの保存と読込JAVA
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

Path path = Path.of("message.txt");
Files.writeString(path, "Javaを勉強中です。\n");
String content = Files.readString(path);
System.out.print(content);
実行結果OUTPUT
Javaを勉強中です。
上書きと実行場所 同名ファイルを上書きします。相対パスは現在の作業フォルダーが基準なので、練習用フォルダーで試してください。

例外を含む完全なクラスと追記処理はファイル入出力で扱います。

14

クラス

クラスはデータと操作をまとめる設計図で、そこから作る具体的な値がインスタンスです。

Product.javaJAVA
public class Product {
    private final String name;
    private final int price;

    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }

    public int priceWithTax() {
        return price * 110 / 100;
    }

    public static void main(String[] args) {
        Product book = new Product("Java入門", 2000);
        System.out.println(book.name);
        System.out.println(book.priceWithTax());
    }
}
実行結果OUTPUT
Java入門
2200

privateは外部からの直接操作を防ぎ、コンストラクタはnew時に初期値を受け取ります。詳しくはクラスとオブジェクトで学びます。

PRACTICE

練習問題

問題1:偶数・奇数判定

int number = 7;が偶数なら「偶数」、それ以外なら「奇数」と表示してください。

解答例JAVA
int number = 7;
if (number % 2 == 0) {
    System.out.println("偶数");
} else {
    System.out.println("奇数");
}
実行結果OUTPUT
奇数
問題2:平均点

{72, 95, 81, 68}の平均を求めて表示してください。

解答例JAVA
int[] scores = {72, 95, 81, 68};
int total = 0;
for (int score : scores) {
    total += score;
}
double average = (double) total / scores.length;
System.out.println("平均: " + average + "点");
実行結果OUTPUT
平均: 79.0点
問題3:在庫検索メソッド

商品名と在庫表を受け取り、在庫数を返すメソッドを作ってください。未登録なら0とします。

StockExample.javaJAVA
import java.util.Map;

public class StockExample {
    static int findStock(Map<String, Integer> stocks, String name) {
        return stocks.getOrDefault(name, 0);
    }

    public static void main(String[] args) {
        Map<String, Integer> stocks = Map.of(
            "りんご", 5,
            "みかん", 8
        );
        System.out.println(findStock(stocks, "みかん"));
        System.out.println(findStock(stocks, "もも"));
    }
}
実行結果OUTPUT
8
0

getOrDefault()はキーがあれば対応する値、なければ第2引数の0を返します。

NEXT

次に学ぶこと

基礎の後は次の4テーマへ進み、小さなプログラムを管理できる形へ育てます。

さらに学習を広げる

目的に合わせた発展テーマ
  • Spring Boot:WebアプリやWeb APIを構築する
  • Gradle:Mavenとは異なるビルドと依存関係管理を学ぶ
  • Checkstyle:コーディング規約への違反を検査する
  • SpotBugs:バイトコードから不具合の候補を見つける
  • Javadoc:APIドキュメントをコードから作る

まず標準機能で小さなプログラムを完成させ、必要な技術を一つずつ追加しましょう。