Javaとは
Javaは、型を明示して大規模なプログラムも整理しやすい言語です。ソースコードをバイトコードへコンパイルし、JVM(Java仮想マシン)上で動かします。
- 企業の業務システムやWeb API
- Androidアプリ
- クラウド上のサーバー
- 各種開発ツール
Javaを実行してみよう
JDK 21をインストールし、ターミナルでバージョンを確認します。JDKにはコンパイラと実行環境が含まれます。
java --version
javac --versionHello.javaを作ります。公開クラス名とファイル名は同じ大文字・小文字にします。
public class Hello {
public static void main(String[] args) {
System.out.println("こんにちは、Java!");
}
}javac Hello.java
java Helloこんにちは、Java!java Hello.javaでも実行できます。ただし講座ではコンパイルの流れを理解するため、javacも使います。基本の書き方
処理はmainメソッドから始まり、通常は上から順に進みます。文末にはセミコロンを書き、波かっこで処理のまとまりを表します。
public class Order {
public static void main(String[] args) {
// 1行コメント
System.out.println("1番目");
System.out.println(10 + 20);
System.out.println("3番目");
}
}1番目
30
3番目StringやSystemをstring、systemとは書けません。エラーでは最初に示されたファイル名と行番号を確認します。変数とデータ型
変数は「型 変数名 = 値;」で宣言します。基本型は値そのもの、Stringなどの参照型はオブジェクトへの参照を扱います。
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);Mityさんは20歳です
170.5
true
A変更しない値はfinal int TAX_RATE = 10;のように宣言します。定数名は大文字とアンダースコアで書くのが慣例です。
キーボード入力
Scannerで1行を文字列として読み、Integer.parseInt()で整数へ変換します。
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) + "歳です");
}
}
}年齢を入力してください: 20
来年は21歳ですInteger.parseInt("二十")はNumberFormatExceptionになります。後の例外処理で対応します。演算子
| 種類 | 演算子 | 例 |
|---|---|---|
| 計算 | + - * / % | 7 / 2は3 |
| 比較 | == != > < >= <= | score >= 80 |
| 論理 | && || ! | adult && hasTicket |
| 代入 | = += -= *= /= | total += 100 |
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 + "円");小計: 1500円
税込: 1650円7 / 2は小数部分を捨てて3です。小数の3.5が必要なら7.0 / 2のように一方をdoubleにします。金額の端数は業務ルールに従ってください。条件分岐
if、else if、elseで処理を切り替えます。
int score = 82;
String result;
if (score >= 80) {
result = "合格(よくできました)";
} else if (score >= 60) {
result = "合格";
} else {
result = "再挑戦";
}
System.out.println(result);合格(よくできました)文字列の内容はname.equals("Mity")で比較します。==は参照先が同じかを比べるため、文字列の内容比較には使いません。
繰り返し
forは回数が分かる処理、拡張for文は配列などの全要素、whileは条件が真の間の処理に向きます。
for (int i = 1; i <= 3; i++) {
System.out.println(i + "回目");
}
int count = 2;
while (count > 0) {
System.out.println("残り" + count);
count--;
}1回目
2回目
3回目
残り2
残り1while内で条件が変わらないと終了しません。breakは途中終了、continueは今回だけ飛ばします。配列とコレクション
配列は要素数が固定です。増減する一覧にはArrayList、キーと値の対応にはHashMapを使えます。
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);
}72
りんご
みかんscores[3]はArrayIndexOutOfBoundsExceptionになります。メソッド
メソッドは処理へ名前を付けたものです。引数で値を受け取り、戻り値の型を宣言してreturnで結果を返します。
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 + "円です");
}合計は1500円です値を返さないメソッドの戻り値はvoidです。まずは一つのメソッドに一つの役割を持たせます。
文字列を操作する
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));APPLE,ORANGE,GRAPE
3
apple / orange / grapeStringは変更できない値です。trim()やtoUpperCase()は元の文字列を変えず、新しい文字列を返します。
例外処理
利用者の入力など、想定できる失敗をtryとcatchで処理します。
String text = "二十";
try {
int age = Integer.parseInt(text);
System.out.println("来年は" + (age + 1) + "歳です");
} catch (NumberFormatException e) {
System.out.println("数字で入力してください");
}数字で入力してください理由なくcatch (Exception e)ですべてを捕まえると不具合を隠します。予想できる具体的な例外を指定します。詳しくは例外処理とテストで学びます。
ファイルを読み書きする
Files.writeString()とFiles.readString()でUTF-8のテキストを扱えます。
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);Javaを勉強中です。例外を含む完全なクラスと追記処理はファイル入出力で扱います。
クラス
クラスはデータと操作をまとめる設計図で、そこから作る具体的な値がインスタンスです。
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());
}
}Java入門
2200privateは外部からの直接操作を防ぎ、コンストラクタはnew時に初期値を受け取ります。詳しくはクラスとオブジェクトで学びます。
練習問題
問題1:偶数・奇数判定
int number = 7;が偶数なら「偶数」、それ以外なら「奇数」と表示してください。
int number = 7;
if (number % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}奇数問題2:平均点
{72, 95, 81, 68}の平均を求めて表示してください。
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 + "点");平均: 79.0点問題3:在庫検索メソッド
商品名と在庫表を受け取り、在庫数を返すメソッドを作ってください。未登録なら0とします。
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, "もも"));
}
}8
0getOrDefault()はキーがあれば対応する値、なければ第2引数の0を返します。
次に学ぶこと
基礎の後は次の4テーマへ進み、小さなプログラムを管理できる形へ育てます。
さらに学習を広げる
- Spring Boot:WebアプリやWeb APIを構築する
- Gradle:Mavenとは異なるビルドと依存関係管理を学ぶ
- Checkstyle:コーディング規約への違反を検査する
- SpotBugs:バイトコードから不具合の候補を見つける
- Javadoc:APIドキュメントをコードから作る
まず標準機能で小さなプログラムを完成させ、必要な技術を一つずつ追加しましょう。