プログラミング · Java
Java構文のタイピング練習
Java の構文を、初級から上級までの4つのリスト(130個)で打って覚えます。class と main メソッド、System.out.println、コメント、三項演算子、if・else if などを、コードの形で練習できます。
4リスト・130語
無料・ログインなしで練習できます。押すとこのパックをフォローし、すぐに練習が始まります。
収録している言葉
Java構文(初級)
| 打つ言葉 | 意味・補足 |
|---|---|
| public class Main { public static void main(String[] args) { System.out.println("Hello, Java!"); } } | class:クラス定義(Main.javaに保存する例) / コード例の利用:断片を適切な場所へ配置(多くの例はメソッド内の断片。未定義変数・型・import等を補って利用) |
| public class Main { } | public:外部に公開 |
| static int count = 0; | static:インスタンスではなくクラスに属する(クラス内に記述) |
| void greet() { } | void:戻り値なし |
| int age = 20; | ;:文の終わり(ブロックなど全構文の末尾に付けるわけではない) / 型 名前 = 値:変数の宣言と初期化 |
| // コメント | //:1行コメント |
| double rate = 0.5; | double:浮動小数点数の変数 / double:倍精度浮動小数点数 |
| var age = 20; | var:ローカル変数の型推論(動的型ではない。初期値が必要。通常のフィールド・メソッド引数型には使わない) |
| age = 21; | =:代入(宣言済み変数へ代入) |
| final int MAX = 100; | final:再代入禁止(参照先オブジェクトの内部変更まで禁止するわけではない) |
| double n = age; | 拡大変換:対応する型へ暗黙に変換(型の組合せによっては精度が失われる) |
| int n = (int) 3.9; | (型) 値:明示的なキャスト(結果3。縮小変換では情報が失われ得る) |
| byte n = 10; | byte:8ビット符号付き整数 |
| short n = 100; | short:16ビット符号付き整数 |
| int n = 100; | int:32ビット符号付き整数 |
| long n = 100L; | long:64ビット符号付き整数(Lはlongリテラル) |
| float rate = 0.5f; | float:単精度浮動小数点数(fはfloatリテラル) |
| char c = 'A'; | char:UTF-16コード単位(Unicodeの1文字すべてを1つのcharで表せるわけではない) |
| boolean ok = false; | boolean:真偽値 |
| count += 2; | += -= *= /=:複合代入 |
| i++; | ++ / --:1増減(前置・後置では式の値が異なる) |
| int n = 1 << 3; | << >> >>>:ビットシフト(>>>はゼロ埋め右シフト) |
| return result; | return 値;:値を返して終了(戻り値型に合う値) |
| return; | 値を返さず終了(voidメソッド等) |
| int first = nums[0]; | 配列[i]:要素へアクセス(範囲外は例外) |
| int n = nums.length; | 配列.length:配列の長さ(メソッド呼び出しではない) |
| this.name = name; | this:現在のインスタンス |
| protected int count; | protected:同一パッケージ・サブクラス向け(別パッケージのサブクラスからのアクセスには条件がある) |
| int count; | 修飾子なし:同一パッケージ内(パッケージプライベート) |
| private String name; | private:宣言元の型の内部向け(同じトップレベル型に含まれる入れ子の型からのアクセス等は可能) |
| package example.app; | package:パッケージ宣言(通常はソース先頭に配置) |
| super.toString(); | super.method():親クラスの実装呼び出し |
| java - version | Java 21基準:構文・APIの対象バージョン(java -versionはターミナルで実行するコマンド) |
Java構文(中級1)
| 打つ言葉 | 意味・補足 |
|---|---|
| System.out.println("Hello"); | System.out.println:表示して改行(標準API) |
| /* 複数行の コメント */ | /* ... */:複数行コメント |
| /** 利用者を表します。 */ | /** ... */:Javadoc用コメント(型やメソッド等の宣言前に配置) |
| String name = "Pomo"; | String:文字列の変数(参照型) |
| boolean enabled = true; | boolean:真偽値の変数 |
| static final int MAX = 100; | static final:クラスに属する再代入不可フィールド(クラス内に記述) |
| String text = "hello"; | String:文字列(クラス。プリミティブ型ではない) |
| int remainder = 10 % 3; | + - * / %:加減乗除・余り(整数同士の除算は小数部を切り捨て) |
| boolean same = a == b; | == / !=:等値・不等値比較(参照型の==は参照の同一性を比較) |
| boolean adult = age >= 20; | < <= > >=:大小比較 |
| int masked = flags & 3; | & | ^ ~:ビット演算(&、|、^はbooleanにも利用可能) |
| for (; ; ) { break; } | for (;;):無限ループ |
| if (done) { break; } | break:ループ等を抜ける(ループ・switch等の中で使用) |
| if (skip) { continue; } | continue:次の反復へ(ループ内で使用) |
| int result = add(2, 3); | メソッド呼び出し:引数を渡して呼ぶ |
| int[] nums = { 1, 2, 3 }; | 型[] 名前 = {...}:配列リテラル(長さ固定) |
| int[] nums = new int[3]; | new 型[長さ]:配列を作成(要素は既定値) |
| names.add("Pomo"); | List.add:リストへ追加 |
| String first = names.get(0); | List.get:指定位置の値 |
| names.set(0, "New"); | List.set:指定位置を書き換える |
| int n = names.size(); | List.size:リストの要素数 |
| scores.put("Pomo", 100); | Map.put:追加・更新 |
| public void greet() { } | public:公開(型・モジュール等のアクセス条件も関係) |
| final class Utility { } | final class:継承禁止 |
| import java.util.List; | import:型を読み込む |
| class Dog extends Animal { } | extends:クラス継承(直接の親クラスは1つ) |
| interface A extends B { } | interface extends:インターフェース継承 |
| abstract void speak(); | abstractメソッド:実装のない抽象メソッド(抽象クラス等の適切な場所で宣言) |
| Status status = Status.DOING; | enum値:列挙値を使用 |
| class Box<T> { T value; } | class Box<T>:型パラメーター付きクラス |
| List< ? extends Number> nums; | ? extends 型:上限境界ワイルドカード(要素をNumberとして読める。一般に具体的な数値を追加できない) |
| List< ? super Integer> nums; | ? super 型:下限境界ワイルドカード(Integerを追加可能。読み取りは一般にObject) |
| var stream = names.stream(); | stream:要素処理用Streamを作成(標準API。Streamは通常1回だけ消費) |
Java構文(中級2)
| 打つ言葉 | 意味・補足 |
|---|---|
| public static void main(String[] args) { } | main(String[] args):実行開始用メソッド(Java 21を基準とした通常の起動形式) |
| if (true) { System.out.println("OK"); } | { ... }:ブロック |
| int n; n = 1; System.out.println(n); | ローカル変数の初期化:使用前に初期化(未初期化のまま読み取れない) |
| class Sample { int count; String name; } | フィールドの初期値:フィールドは既定値で初期化(countは0、nameはnull) |
| boolean ok = enabled && !blocked; | && || !:論理演算(&&と||は短絡評価) |
| String message = "Hello, " + name; | 文字列 + 値:文字列連結 |
| boolean same = name.equals("Pomo"); | String.equals:文字列の内容比較(nameがnullならNullPointerException) |
| boolean same = Objects.equals(a, b); | Objects.equals:nullを考慮した等値比較(java.util.Objectsをimport) |
| int n = Integer.parseInt("123"); | Integer.parseInt:文字列からintへ(不正な形式はNumberFormatException) |
| String text = String.valueOf(123); | String.valueOf:文字列へ変換 |
| while (count < 5) { count++; } | while:条件が真の間繰り返す |
| do { count++; } while (count < 5); | do / while:最低1回実行(末尾の;が必要) |
| static int doubleOf(int n) { return n * 2; } | staticメソッド:クラスに属するメソッド |
| record Result(int value, boolean ok) { } | 複数の値を返す:record等にまとめて返す(Goのような複数戻り値構文はない) |
| List<String> names = new ArrayList<>(); | List / ArrayList:可変長リスト(java.util.ListとArrayListをimport) |
| List<String> names = List.of("A", "B"); | List.of:変更不可のリスト(null要素は不可) |
| Integer score = scores.get("Pomo"); | Map.get:キーに対応する値(キーが存在しない場合null) |
| int score = scores.getOrDefault("Pomo", 0); | Map.getOrDefault:キーがない場合の既定値(null値が登録されていれば既定値ではなくnull) |
| boolean exists = scores.containsKey("Pomo"); | Map.containsKey:キーの存在確認 |
| Set<String> tags = new HashSet<>(); | Set / HashSet:重複しない集合(java.util.SetとHashSetをimport) |
| List<Integer> nums = new ArrayList<>(); | Integer等のラッパー型:プリミティブに対応する参照型(型引数にintは使えない) |
| User user = new User("Pomo"); | new:インスタンス生成 |
| User(String name) { this.name = name; } | コンストラクター:初期化処理(クラス名と同名。戻り値型を書かない) |
| interface Greeter { String greet(); } | interface:インターフェース定義 |
| Dog(String name) { super(name); } | super(...):親コンストラクター呼び出し(Java 21ではコンストラクターの先頭に記述) |
| record User(String name, int age) { } | record:データを保持する型(アクセサー・equals・hashCode・toString等を生成。深い不変性は保証しない) |
| enum Status { TODO, DOING, DONE } | enum:値を限定した型 |
| throw new IllegalArgumentException("不正な値"); | throw:例外を送出 |
| void load() throws IOException {} | 検査例外:捕捉または宣言が必要な例外(RuntimeExceptionやError系は検査例外ではない) |
| IntUnaryOperator twice = x -> x * 2; | x -> 式:1引数ラムダ(java.util.function.IntUnaryOperatorをimport) |
| IntBinaryOperator add = (a, b) -> a + b; | (a, b) -> 式:複数引数ラムダ(java.util.function.IntBinaryOperatorをimport) |
| names.forEach(System.out::println); | 型・変数::メソッド:メソッド参照 |
Java構文(上級)
| 打つ言葉 | 意味・補足 |
|---|---|
| String label = age >= 20 ? "成人" : "未成年"; | 条件 ? A : B:三項演算子 |
| if (age >= 20) { System.out.println("成人"); } else if (age >= 18) { System.out.println("18歳以上"); } else { System.out.println("18歳未満"); } | if / else if / else:条件分岐(条件を()で囲む) |
| switch (role) { case "admin": System.out.println("管理者"); break; default: System.out.println("一般利用者"); } | switch / case / break:従来形式の分岐(breakがないと後続caseへ実行が継続する場合がある) |
| String label = switch (role) { case "admin" -> "管理者"; case "member", "guest" -> "一般利用者"; default -> "不明"; }; | switch式 / ->:分岐結果を値にする(矢印形式は次のcaseへ流れない) |
| int fee = switch (type) { case "free" -> 0; default -> { int base = 100; yield base + 20; } }; | yield:switch式のブロックから値を返す(switch式内で使用) |
| for (int i = 0; i < 5; i++) { System.out.println(i); } | for:回数指定 |
| for (String name : names) { System.out.println(name); } | 拡張for:要素を順に処理(配列・Iterableが対象) |
| static int add(int a, int b) { return a + b; } | 戻り値あり:値を返すメソッド(クラス内に定義) |
| void greet(String name) { System.out.println(name); } | 戻り値なし:voidメソッド |
| int sum(int... values) { int total = 0; for (int v : values) { total += v; } return total; } | 型... 引数:可変長引数(可変長引数は最後に置く) |
| int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } | オーバーロード:同名で引数を変える(戻り値型だけの違いでは不可) |
| Map<String, Integer> scores = new HashMap<>(); | Map / HashMap:キーと値の対応(java.util.MapとHashMapをimport) |
| class User { private String name; User(String name) { this.name = name; } public String greet() { return "こんにちは、" + name; } } | class:フィールドと動作を定義 |
| final List<String> names = new ArrayList<>(); | finalフィールド:再代入禁止(names.add等を禁止するわけではない) |
| class User implements Greeter { public String greet() { return "こんにちは"; } } | implements:インターフェース実装(複数のインターフェースを実装可能) |
| abstract class Animal { abstract void speak(); } | abstract class:抽象クラス(直接インスタンス化できない) |
| @Override public String toString() { return "User"; } | @Override:オーバーライドを明示(コンパイラーが対応するメソッドを確認) |
| User user = new User("Pomo", 20); System.out.println(user.name()); | recordアクセサー:コンポーネントを取得(nameフィールドへの直接アクセスではない) |
| try { int value = Integer.parseInt(text); System.out.println(value); } catch (NumberFormatException e) { System.out.println("整数に変換できません"); } finally { System.out.println("後片付け"); } | try / catch / finally:例外捕捉と後片付け(finallyは通常の終了・例外時に実行。JVM強制終了等では実行されない場合がある) |
| void load() throws IOException { /* 読み込み処理 */ } | throws:伝わり得る例外を宣言(java.io.IOExceptionをimport) |
| try (var reader = Files.newBufferedReader(path)) { System.out.println(reader.readLine()); } | try-with-resources:リソースを自動クローズ(java.nio.file.Filesをimport。IOExceptionの捕捉またはthrowsが必要) |
| static <T> T first(List<T> xs) { return xs.get(0); } | <T> 戻り値型:型パラメーター付きメソッド(空リストでは例外。java.util.Listをimport) |
| Runnable task = () -> System.out.println("実行"); | () -> 処理:引数なしラムダ(関数型インターフェースを対象に使う) |
| var result = names.stream().filter(n -> n.length() >= 3).toList(); | filter:条件で絞る |
| var result = names.stream().map(String::toUpperCase).toList(); | map:要素を変換 |
| var result = names.stream().sorted().toList(); | sorted:並べ替え |
| var result = names.stream().distinct().toList(); | distinct:重複除去 |
| List<String> result = names.stream().toList(); | toList:変更不可リストに収集(Listをimport。要素内部の不変性は保証しない) |
| names.stream().forEach(System.out::println); | forEach:各要素に処理 |
| List<String> result = names.stream().filter(name -> name.length() >= 3).map(String::toUpperCase).toList(); | 処理の連結:絞り込み・変換・収集 |
| if (value instanceof String text) { System.out.println(text.length()); } | instanceofパターン:型判定と変数への束縛(valueがnullなら成立しない) |
| String label = switch (value) { case null -> "null"; case String text -> "文字列: " + text; case Integer number -> "整数: " + number; default -> "その他"; }; | switch型パターン:型による分岐(Java 21で標準機能。例ではvalueはObject型) |