Java

スポンサーリンク
Java

Java | Java 標準ライブラリ:ConcurrentModificationException

ConcurrentModificationException をまず感覚でつかむConcurrentModificationException は、Java のコレクションを使っているときに、かなり...
Java

Java | Java 標準ライブラリ:for-each の内部動作

for-each 文をまず感覚でつかむJava の for-each(拡張 for 文)は、こういう書き方のやつです。for (String name : names) { System.out.pr...
Java

Java | Java 標準ライブラリ:イテレータ

イテレータって何者かをざっくりイメージするまず感覚からいきます。イテレータ(Iterator)は、「コレクションの中身を、順番に“たどる”ための共通ルール」です。ArrayList でも HashSe...
Java

Java | Java 標準ライブラリ:コレクションの初期容量

「コレクションの初期容量」ってそもそも何?まずことばの整理からいきます。ArrayList や HashMap などのコレクションは、内部で「ある程度まとめてメモリを確保してから」そこに要素を入れてい...
Java

Java | Java 標準ライブラリ:コレクションの null 許容

「コレクションは null を入れていいのか?」という全体像Java のコレクションで初心者が一番ハマるポイントの一つが、「null を入れていいのか・ダメなのかがバラバラ」ということです。Array...
Java

Java | Java 標準ライブラリ:TreeMap

TreeMap をざっくりイメージするまず一言でいうと、TreeMap は「キーで常にソートされた順番を保ってくれる Map」です。HashMap は「キー → 値」を高速に扱えるけれど、キーの順番は...
Java

Java | Java 標準ライブラリ:LinkedHashMap

LinkedHashMap をざっくりイメージするまず、すごくラフに言うと「順番を覚えてくれる HashMap」が LinkedHashMap です。HashMap は「キー → 値」を高速に扱える代...
Java

Java | Java 標準ライブラリ:Map / HashMap

Map / HashMap をざっくりイメージするまず「Map って何者?」からいきます。Map は「キー(key)と値(value)のペアを管理する入れ物」です。電話帳をイメージすると分かりやすいで...
Java

Java | Java 標準ライブラリ:TreeSet

TreeSet をざっくりイメージするまず全体像からいきます。TreeSet は「重複を許さない集合(Set)でありつつ、 中身を“常にソートされた順番”で持ってくれるクラス」です。前回の HashS...
Java

Java | Java 標準ライブラリ:Set / HashSet

Set / HashSet をざっくりイメージするまず感覚からいきます。List は「順番がある・重複を許す」コレクションでした。それに対して Set は、「順番は気にしない」「同じ要素を二度入れない...
Java

Java | Java 標準ライブラリ:LinkedList

LinkedList をざっくりイメージするまず感覚からいきます。ArrayList は「配列ベースで、連番の棚がズラッと並んでいるストレージ」です。それに対して LinkedList は、「前後の箱...
Java

Java | Java 標準ライブラリ:List / ArrayList

List と ArrayList をざっくりイメージするまずイメージからいきます。配列 int[] は「長さが固定の箱の列」でした。一方で List / ArrayList は「あとから増やしたり減ら...
Java

Java | Java 標準ライブラリ:Collections クラス

Collections クラスの全体像をざっくりつかむjava.util.Collections は、「List や Map など“コレクション”を扱うときの便利メソッドを集めたユーティリティクラス」...
Java

Java | Java 標準ライブラリ:Arrays.equals

Arrays.equals の役割をざっくりつかむjava.util.Arrays.equals は、「配列同士が “中身まで含めて” 同じかどうかをチェックするメソッド」です。ここでまず押さえたいの...
Java

Java | Java 標準ライブラリ:Arrays.copyOf

Arrays.copyOf の「役割」をざっくりつかむjava.util.Arrays.copyOf は、「今ある配列をもとに、“新しい配列”を作るためのコピー専用メソッド」です。ポイントは次の二つで...
Java

Java | Java 標準ライブラリ:Arrays.sort

Arrays.sort の役割をざっくりつかむArrays.sort は「配列を並び替えるための標準メソッド」です。int などの配列を、昇順(小さい順・辞書順)に一発で整列してくれます。自分でソート...
Java

Java | Java 標準ライブラリ:Arrays クラス

Arrays クラスの全体像をざっくりつかむjava.util.Arrays は、「配列を扱うときの“便利道具”をまとめたユーティリティクラス」です。配列は int などのあれです。配列を文字列として...
Java

Java | Java 標準ライブラリ:SecureRandom

SecureRandom は「セキュリティ用の本気の乱数生成器」java.security.SecureRandom は、一言でいうと「パスワード・トークン・認証コードなど、“セキュリティが絡む場面専...
Java

Java | Java 標準ライブラリ:Random

Random クラスの全体像をまずつかむjava.util.Random は、「それっぽくランダムな値をくれる“乱数生成器”のクラス」です。ゲームでダメージ値をランダムにしたいガチャの結果をランダムに...
Java

Java | Java 標準ライブラリ:BigDecimal の丸めモード

なぜ BigDecimal に「丸めモード」が必要なのか(全体像)BigDecimal は「小数を誤差なく扱う」ためのクラスですが、もう一つ大事なテーマがあります。「小数をどこかで“切り捨て・切り上げ...
Java

Java | Java 標準ライブラリ:BigDecimal の加算減算

なぜ BigDecimal の「加算・減算」が特別なのか(全体像)BigDecimal は「お金など誤差が許されない小数」を扱うためのクラスでしたね。その代わり、+ や - の演算子は使えません。+ ...
Java

Java | Java 標準ライブラリ:BigDecimal 比較(compareTo)

BigDecimal の「比較」がややこしく感じる理由BigDecimal を使い始めると、ほぼ必ずこう思います。「== じゃダメなのは分かるとして、equals と compareTo って何が違う...
Java

Java | Java 標準ライブラリ:BigDecimal の必要性

なぜ BigDecimal が「わざわざ」必要になるのか(全体像)BigDecimal は、ざっくり言うと「お金や桁数が重要な数値を、ちゃんと正確に扱うためのクラス」です。初心者が最初にハマるポイント...
Java

Java | Java 標準ライブラリ:Math クラス

Math クラスの全体像を直感でつかむjava.lang.Math は、「よく使う数学系の処理をまとめてくれている“道具箱”」です。わざわざ自分で実装しなくていいように、基本的な計算用メソッドが一式そ...
Java

Java | Java 標準ライブラリ:NumberFormatException

NumberFormatException は「数字に変換できなかったときの例外」NumberFormatException は、ざっくり言うと「文字列を数字に変換しようとしたけど、数字としておかしい...
Java

Java | Java 標準ライブラリ:Integer キャッシュ

Integer キャッシュってそもそも何かInteger キャッシュ は、Java が「よく使われる小さい整数については、Integer オブジェクトを使い回す」という最適化の仕組みです。もっとざっく...
Java

Java | Java 標準ライブラリ:auto-unboxing

auto-unboxing は「ラッパークラスから中身を自動で取り出す仕組み」まず前提から整理します。Java には、値そのものの 基本型(プリミティブ型) とそれをオブジェクトとして包んだ ラッパー...
Java

Java | Java 標準ライブラリ:auto-boxing

auto-boxing は「基本型 ↔ ラッパー型の自動変換」まず前提として、Java には基本型(プリミティブ型)int, long, double, boolean, char などラッパークラス...
Java

Java | Java 標準ライブラリ:ラッパークラス全体像

ラッパークラスとは何かをざっくりつかむJava の「ラッパークラス」は、int や double のような プリミティブ型(基本型)を “オブジェクトとして包んだクラス” です。対応はこうなっています...
Java

Java | Java 標準ライブラリ:Optional.ifPresent

ifPresent は「値があるときだけ処理するためのスイッチ」Optional.ifPresent は、「Optional の中に値が“入っているときだけ” この処理を実行してね」と言うためのメソッ...
Java

Java | Java 標準ライブラリ:Optional.orElse / orElseGet

Optional.orElse / orElseGet は「無いときどうするかを決めるメソッド」Optional は「あるかもしれないし、ないかもしれない値」を入れる箱でした。では、その箱が「空だった...
Java

Java | Java 標準ライブラリ:Optional.of / ofNullable

Optional.of / ofNullable の役割をざっくりつかむOptional を「値を入れる箱」と考えると、Optional.of と Optional.ofNullable は「箱に値を...
Java

Java | Java 標準ライブラリ:Optional の目的

Optional は「null をそのまま渡さないための箱」java.util.Optional は、簡単に言うと「あるかもしれないし、ないかもしれない値」を入れて渡すための“箱”です。それだけ聞くと...
Java

Java | Java 標準ライブラリ:文字コード(Charset)

文字コードと Charset を直感でつかむまず前提から整理します。コンピュータの中では、文字は「バイト列(0と1の並び)」として保存・送信されます。一方、Java の String は「文字そのもの...
Java

Java | Java 標準ライブラリ:split の落とし穴

split は「正規表現で区切る」メソッドだという前提String#split は、 「文字列を区切り文字で分割する」メソッド ですが、まず一番大事なポイントは「引数は“ただの区切り文字”ではなく、“...
Java

Java | Java 標準ライブラリ:Matcher の使い方

Matcher は「正規表現パターンを文字列に当てていく実行役」前回の Pattern の話とつなげると、役割分担はこうです。Pattern「正規表現(パターン)そのもの」を表す。何度も使い回せる“型...
Java

Java | Java 標準ライブラリ:正規表現(Pattern)

正規表現と Pattern クラスの関係をざっくりつかむ「正規表現(regex)」は、「文字列の **“パターン” を言葉で書くための小さな言語」だと思ってください。「数字3桁‐数字4桁の電話番号」「...
Java

Java | Java 標準ライブラリ:文字列比較の正解

なぜ「文字列比較」はつまずきポイントなのかJava 初心者がほぼ確実に一度はハマるのが、文字列比較でのミスです。見た目は同じ "abc" なのに、なぜか比較結果が false になる、if が通らない...
Java

Java | Java 標準ライブラリ:文字列結合のパフォーマンス

なぜ「文字列結合のパフォーマンス」を気にする必要があるのかJava では文字列を扱う機会がとても多いです。ログ、SQL の組み立て、メッセージ生成、CSV 出力など、気づけばどこも文字列だらけになりま...
Java

Java | Java 標準ライブラリ:StringBuffer

StringBuffer はどんなクラスか(まず全体像)StringBuffer は、ざっくり言うと「中身を書き換えられる文字列バッファ」「スレッドセーフな StringBuilder」です。役割自体...
Java

Java | Java 標準ライブラリ:StringBuilder

なぜ StringBuilder が必要になるのかまず前提として、String は「イミュータブル(不変)」です。一度作られた String の中身は絶対に変わりません。その結果、こういうコードを書く...
Java

Java | Java 標準ライブラリ:String のイミュータブル性

「イミュータブル」ってそもそも何?まず言葉から整理します。「イミュータブル(immutable)」は「不変」という意味です。Java の String はイミュータブルなので、一度作られた Strin...
Java

Java | Java 標準ライブラリ:String クラスの特性

String クラスは「特別扱い」されているクラスString は、Java で文字列を扱うためのクラスです。でも、ただのクラスではなく「言語レベルで特別扱い」されている存在です。ダブルクォーテーショ...
Java

Java | Java 標準ライブラリ:clone の注意点

まず「clone は基本おすすめされない」という前提からいきなり結論から言うと、Object#clone() は「あるけど、できれば使わない方がいい API」です。理由はシンプルで、挙動が分かりにくい...
Java

Java | Java 標準ライブラリ:getClass

getClass は「そのオブジェクトの正体を教えてくれるメソッド」getClass() は、Object クラスが持っているメソッドで、「このオブジェクトは、実際にはどのクラスのインスタンスなのか」...
Java

Java | Java 標準ライブラリ:hashCode 契約

hashCode 契約って何のこと?hashCode() は「オブジェクトを、整数の“番号”に変換するメソッド」です。主に HashMap や HashSet などの「ハッシュを使うコレクション」で使...
Java

Java | Java 標準ライブラリ:equals の正しい使い方

equals は「同じインスタンスか?」ではなく「意味として同じか?」を見るequals は「この2つのオブジェクトは“意味として”同じものと言えるか?」を判定するメソッドです。ここでまず大事なのが=...
Java

Java | Java 標準ライブラリ:toString の使いどころ

toString は「中身を一瞬で覗くための窓」toString() は「このオブジェクトを、人間にとって読みやすい文字列にするとしたら、どう表現するか?」を返すメソッドです。System.out.p...
Java

Java | Java 標準ライブラリ:Object クラスの役割

Object クラスってそもそも何者かjava.lang.Object は「Java に登場するすべてのクラスの“ご先祖さま”」です。あなたがこう書いたクラスもpublic class User {}...
Java

Java | Java 標準ライブラリ:java.lang パッケージ概要

java.lang パッケージとは何かjava.lang は、「Java でプログラムを書くときに、ほぼ必ず使う“基本中の基本”がまとまったパッケージ」です。特徴としてimport を書かなくても、勝...
Java

Java | オブジェクト指向:小規模アプリの設計演習

この演習で目指すことここでは「小さいアプリ」を題材にしながら、オブジェクト指向でどう設計していくかを、最初から最後まで追体験してもらいます。難しいフレームワークは使いません。シンプルな Java のク...
Java

Java | オブジェクト指向:実務でよくある設計ミス

実務でよくある「設計ミス」とは何か実務でよく見る設計ミスは、「一発でシステムが壊れるような爆発」ではなく、最初は普通に動くけれど、時間が経つほどコードが重く・遅く・触りたくなくなっていく、そんなタイプ...
Java

Java | オブジェクト指向:オブジェクト指向的リファクタリング

オブジェクト指向的リファクタリングとは何かリファクタリング自体は「外から見た動きを変えずに、コードの中身(設計・構造)だけを良くしていく作業」です。オブジェクト指向的リファクタリングというときは、単に...
Java

Java | オブジェクト指向:パッケージ命名規則

パッケージ命名規則って何のためにあるのかパッケージ名は「このコードはどこの誰が書いた、何のグループなのか」を表すラベルです。クラス名が「1人の役者の名前」だとしたら、パッケージ名は「その人が所属してい...
Java

Java | オブジェクト指向:メソッド名の付け方

なぜメソッド名がそんなに大事なのかメソッド名は「このメソッドが何をするか」を一言で表すラベルです。ここが雑だと、コードを読むたびに「これ何してるんだっけ?」と中身を開いて確認する羽目になります。逆に、...
Java

Java | オブジェクト指向:クラス名の付け方

クラス名をつける前に知っておきたいことクラス名は、「このクラスは何者か」を一言で説明するラベルです。クラス名だけで、そのクラスの役割や意味がある程度イメージできるのが理想です。逆に言うと、クラス名があ...
Java

Java | オブジェクト指向:命名の重要性

なぜ命名がそんなに重要なのか命名は、プログラムの「言葉」です。コードは機械のためのものに見えて、実際には「人間が読む時間」の方が圧倒的に長いです。だから、変数名・メソッド名・クラス名は、そのまま「設計...
Java

Java | オブジェクト指向:モックしやすい設計

「モックしやすい設計」とは何かモックしやすい設計は「テストのときに、本物の代わりの“ニセモノ(モック)”を簡単に差し込める設計」のことです。たとえば、実際にはメールを送らずに「メール送信が呼ばれたかだ...
Java

Java | オブジェクト指向:テストしやすい設計

「テストしやすい設計」とは何かテストしやすい設計は「そのクラスやメソッドを、単体でサクッと動かして結果を確認できる設計」のことです。もっと言うと、テストを書くために余計な準備がいらないテストしたい部分...
Java

Java | オブジェクト指向:再利用しやすいクラス設計

「再利用しやすいクラス」とは何か再利用しやすいクラスは「別の場面・別のプロジェクトでも、ほとんどそのまま使えるクラス」です。もう少し噛み砕くと、特定の画面・特定の DB・特定のフレームワークにベッタリ...
Java

Java | オブジェクト指向:public フィールドの問題

public フィールドがなぜ問題になるのかpublic フィールドは「この変数は、どこからでも読み書きしていいです」と世界中に宣言しているのと同じです。一見「楽」「コードが短い」で済みますが、その代...
Java

Java | オブジェクト指向:可視性を最小にする

可視性を最小にするとは何か「可視性を最小にする」は、クラス・フィールド・メソッドのアクセス範囲(public / protected / なし / private)を「必要な場所にだけ見えるよう、でき...
Java

Java | オブジェクト指向:defensive copy

defensive copy とは何かdefensive copy(防御的コピー)は「オブジェクトの中身を、外から勝手に壊されないように、防御のためにコピーを取るテクニック」のことです。特に List...
Java

Java | オブジェクト指向:コレクションをフィールドに持つ設計

「コレクションをフィールドに持つ」とは何を意味するかコレクションをフィールドに持つ設計というのは、クラスの中に List や Set、Map などを「メンバー」として抱える設計のことです。例えば、注文...
Java

Java | オブジェクト指向:値オブジェクトの比較

値オブジェクトの「比較」とは何を意味するか値オブジェクトは「中身の値が同じなら、同じものとして扱うクラス」です。お金 1000円、メールアドレス x@example.com、日付 2025-01-01...
Java

Java | オブジェクト指向:Entity の同一性

Entity の「同一性」とは何かEntity の同一性とは「そのオブジェクトが“誰なのか”を決める軸」のことです。もっと噛み砕くと、・中身(名前や住所)が変わっても「同じ人」として扱いたいもの・「同...
Java

Java | オブジェクト指向:DTO と Entity の違い

DTO と Entity は「役割」がまったく違うDTO と Entity は、どっちも「フィールドを持ったクラス」なので見た目が似ていますが、役割がまったく違います。DTO(Data Transfe...
Java

Java | オブジェクト指向:神クラス(God Object)

神クラス(God Object)とは何か神クラス(God Object)は「システムのあらゆることを“何でも知っていて、何でもやろうとする”巨大なクラス」のことです。画面の制御もやる。ビジネスロジック...
Java

Java | オブジェクト指向:クラス肥大化の兆候

クラス肥大化って何がまずいのかクラス肥大化は「とりあえずあれこれ押し込んでいるうちに、そのクラスだけ異様に太ってしまった状態」です。1つのクラスが、画面の制御も、ビジネスロジックも、DB のやりとりも...
Java

Java | オブジェクト指向:不変条件の守り方

不変条件ってそもそも何なのか不変条件(invariant)は「このオブジェクトが“生きている間ずっと”守られていないといけない約束」のことです。例えると、ユーザーのポイントは常に 0 以上注文は明細を...
Java

Java | オブジェクト指向:不正な setter の問題

なぜ「不正な setter」が問題になるのかsetter 自体は悪ではありません。ただ「何でもかんでも public な setter を生やす」「ルールも何もなく値を変えられるようにする」と、オブジ...
Java

Java | オブジェクト指向:リッチドメインモデル

リッチドメインモデルとは何かリッチドメインモデルは「ドメイン(業務)の知識とルールを、“それっぽい名前だけの入れ物”ではなく、クラスの中身としてちゃんと持たせよう」という考え方です。もっとストレートに...
Java

Java | オブジェクト指向:貧血モデルとは

貧血モデルとは何か貧血モデル(Anemic Domain Model)は「フィールド(データ)だけ持っていて、自分の振る舞い(ビジネスロジック)をほとんど持たないオブジェクト」がシステム中にあふれてい...
Java

Java | オブジェクト指向:ドメインモデルの考え方

ドメインモデルとは何かドメインモデルは「扱っている世界(業務)の“概念”を、そのままクラスとして表現したもの」です。給料計算システムなら「社員」「勤怠」「給与」EC サイトなら「商品」「カート」「注文...
Java

Java | オブジェクト指向:switch 文のオブジェクト化

「switch 文のオブジェクト化」とは何か「switch 文のオブジェクト化」は、switch にベタっと書いている「種類ごとの違い」を、それぞれのクラス(オブジェクト)に持たせるように書き換えるこ...
Java

Java | オブジェクト指向:if 文だらけのコードの問題点

if 文だらけのコードが「なぜツラくなる」のかif 自体は悪ではありません。条件分岐はどの言語にもある基本機能だし、使う場面ももちろんあります。問題になるのは、「if 文がコードのあちこちに増えすぎて...
Java

Java | オブジェクト指向:ポリモーフィズムによる分岐削減

ポリモーフィズムで分岐を減らすとは何か「ポリモーフィズムによる分岐削減」は、if や switch でゴチャゴチャ分岐している処理を、「オブジェクトの“型ごとの振る舞いの違い”に任せてスッキリさせる」...
Java

Java | オブジェクト指向:ファクトリメソッドの概念

ファクトリメソッドとは何かファクトリメソッドは「new の代わりに“生成専用メソッド”を用意して、オブジェクトの作り方をそこに閉じ込める考え方」です。普通は new で直接コンストラクタを呼んでオブジ...
Java

Java | オブジェクト指向:セッターインジェクション

セッターインジェクションとは何かセッターインジェクションは「必要な相手(依存オブジェクト)を、コンストラクタではなく setter メソッドで後から差し込む」という DI(依存性注入)のやり方です。コ...
Java

Java | オブジェクト指向:コンストラクタインジェクション

コンストラクタインジェクションとはコンストラクタインジェクションは「そのクラスが必要とするオブジェクト(依存)を、コンストラクタの引数で受け取る」という設計のやり方です。もっと噛み砕くと、・自分の中で...
Java

Java | オブジェクト指向:DI(依存性注入)の考え方

DI(依存性注入)とは何かDI(Dependency Injection)は「必要な相手(依存先)を、自分で new しないで“外から渡してもらう”考え方」です。もっと噛み砕くと、本来一緒に仕事をする...
Java

Java | オブジェクト指向:インターフェース分離

インターフェース分離とは何かインターフェース分離(Interface Segregation Principle, ISP)は、「インターフェースは、小さくて、はっきりした役割ごとに分けなさい」という...
Java

Java | オブジェクト指向:クラス間の依存を減らす方法

なぜ「クラス間の依存を減らす」のが大事なのかクラス同士がベッタリ依存していると、どこか 1 クラスを少し変えただけで、他のクラスが次々壊れていきます。「このメソッド名を変えたいだけなのに、10 クラス...
Java

Java | オブジェクト指向:パッケージ図

パッケージ図とは何かパッケージ図は「大きな箱同士の関係」を描く図です。クラス図が「クラスとクラスの関係の地図」だとすると、パッケージ図は「パッケージとパッケージの関係の地図」です。Java の com...
Java

Java | オブジェクト指向:UML の読み方

UML とは何か(まず全体像)UML は「図でプログラムを表すための共通ルール」のようなものです。Java のコードを、箱や矢印で表現して「このシステムにはどんなモノがいて、どうつながっているか」を見...
Java

Java | オブジェクト指向:クラス図の基礎

クラス図とは何かクラス図は「オブジェクト指向の設計図」です。クラス(型)の名前、持っているデータ(フィールド)、できること(メソッド)、そしてクラス同士の関係(関連・継承・依存など)を「箱と線」で表し...
Java

Java | オブジェクト指向:関連の多重度

関連の多重度とは何か「関連の多重度」は、「あるクラスと別のクラスが、どれくらいの数で結びついているか」を表す考え方です。UML だと 1, 0..1, *, 0..*, 1..* みたいな表記を見たこ...
Java

Java | オブジェクト指向:集約と関連

集約と関連とは何かオブジェクト指向で「集約」と「関連」は、クラスとクラスの“つながり方”を表す言葉です。ざっくり言うと、関連:ただの「知り合い」関係(A が B を知っている・参照している)集約:ある...
Java

Java | オブジェクト指向:オブジェクトのライフサイクル

オブジェクトのライフサイクルとは「オブジェクトのライフサイクル」は、あるオブジェクトが生まれて(生成されて)、使われて、やがて不要になり、最後に片付けられるまでの一連の流れのことです。Java では、...
Java

Java | オブジェクト指向:単一責任の原則(SRP)

単一責任の原則(SRP)とは単一責任の原則(Single Responsibility Principle, SRP)は「クラスやモジュールは“たった1つの責任(変更理由)だけ”を持つべき」というルー...
Java

Java | オブジェクト指向:責務分離

責務分離とは責務分離は「ひとつのクラスやメソッドが、ひとつの明確な役割(Responsibility)だけを担うように分ける」設計の基本です。入力の整形、検証、計算、保存、表示などの関心事を混ぜず、境...
Java

Java | オブジェクト指向:パッケージ設計

パッケージ設計とはパッケージ設計は、クラスやインターフェースを「意味のあるまとまり」に分けて整理し、依存の向きと公開範囲をコントロールすることです。狙いは、変更の影響を局所化し、再利用とテストをしやす...
Java

Java | オブジェクト指向:継承 vs 委譲

継承と委譲の違い継承は「is-a(〜は〜の一種)」の関係で、親の振る舞いを子が受け継ぎ、必要ならオーバーライドで差分を加える仕組みです。委譲(コンポジション)は「has-a(〜は〜を持つ)」の関係で、...
Java

Java | オブジェクト指向:コンポジション(委譲)

コンポジション(委譲)とはコンポジションは「クラスが“持つ(has-a)”関係で他のオブジェクトを部品として組み合わせ、仕事をその部品へ任せる(委譲する)」設計です。継承(is-a)と違い、親の内部契...
Java

Java | オブジェクト指向:依存の方向

依存の方向とは「依存の方向」は、あるコードがどちら側(上位/下位、抽象/具体)へ向かって頼っているかを示す考え方です。呼び出し側が別のクラスやライブラリに依存するとき、その“向き”が正しいかどうかで保...
Java

Java | オブジェクト指向:依存関係とは

依存関係とは依存関係は「あるコードが、他のコードの存在や振る舞いを前提にして成り立っている状態」です。クラスが別のクラスを new したり、そのメソッドを呼んだり、型として参照したりすると、そこで依存...
Java

Java | オブジェクト指向:コンパイル時型と実行時型

コンパイル時型と実行時型とは「コンパイル時型」はコード上で宣言された“見える型”で、コンパイラが文法チェックやメソッド呼び出しの可否を判断するために使います。「実行時型」は new で実際に生成されて...
Java

Java | オブジェクト指向:動的バインディング

動的バインディングとは動的バインディングは「どのメソッド実装を呼ぶかを、実行時の“実体の型”に基づいて決める仕組み」です。参照の型が親(抽象クラスやインターフェース)でも、実際に入っているオブジェクト...
Java

Java | オブジェクト指向:instanceof

instanceof とは何かinstanceof は「ある参照が、特定の型(クラスやインターフェース)の実体かどうか」を真偽で判定する演算子です。ポリモーフィズムでは呼び出し側は共通型にそろえますが...
Java

Java | オブジェクト指向:ダウンキャスト

ダウンキャストとは何かダウンキャストは「親型(抽象クラスやインターフェース)の参照を、より具体的な子型に“下げて”扱う」ことです。たとえば Shape 型の変数を Rect 型として扱いたいときに使い...
Java

Java | オブジェクト指向:アップキャスト

アップキャストとは何かアップキャストは「子クラス(具体的な型)の参照を、親クラス(より抽象的な型)やインターフェースの参照として扱う」ことです。型を“上位”に持ち上げるイメージなのでアップ(up)キャ...
Java

Java | オブジェクト指向:ポリモーフィズム

ポリモーフィズムとはポリモーフィズムは「同じ“呼び方”で、実体に応じて振る舞いが切り替わる」仕組みです。呼び出し側は共通の型(親クラスやインターフェース)だけを意識して使い、実際に入っているオブジェク...
Java

Java | オブジェクト指向:static メソッド(interface)

interface の static メソッドとはインターフェースの static メソッドは「インターフェース名から直接呼ぶユーティリティ関数」です。インスタンスや実装クラスは不要で、契約(インター...
Java

Java | オブジェクト指向:default メソッド

default メソッドとはdefault メソッドは「インターフェースに書く“簡易の既定実装”」です。Java 8 で導入され、インターフェースにメソッド本体を持たせられるようになりました。これによ...
Java

Java | オブジェクト指向:インターフェースの多重実装

インターフェースの多重実装とはインターフェースの多重実装は「1つのクラスが複数のインターフェース契約を同時に満たす」ことです。Javaはクラスの多重継承はできませんが、インターフェースは複数まとめて ...
Java

Java | オブジェクト指向:implements

implements とは何かimplements は「クラスがインターフェースの契約を実装します」という宣言です。インターフェースが定めるメソッドの“名前・引数・戻り値”を、クラス側で実体として提供...
Java

Java | オブジェクト指向:インターフェースとは

インターフェースとはインターフェースは「クラスが満たすべき契約(メソッドの型だけ)を定義するもの」です。実装は持たず、まず“名前・引数・戻り値”を決めることで、呼び出し側は契約だけに依存できます。クラ...
Java

Java | オブジェクト指向:抽象クラスの使いどころ

抽象クラスの狙いどころ抽象クラスは「共通の骨格と不変条件を親で固定し、差し替えたい部分だけ子に実装させる」ための道具です。インターフェースが“契約(メソッドの型)”だけなのに対し、抽象クラスは“状態(...
Java

Java | オブジェクト指向:抽象メソッド

抽象メソッドとは抽象メソッドは「中身(実装)がないメソッド」で、宣言だけを持ちます。abstract を付けて宣言し、具体的な処理は子クラスが必ず実装します。抽象クラスに定義して、共通の“名前・引数・...
Java

Java | オブジェクト指向:抽象クラスとは

抽象クラスとは抽象クラスは「直接はインスタンス化できない、共通の骨格と契約をまとめるためのクラス」です。abstract を付けて宣言し、抽象メソッド(中身のないメソッド)を含められます。継承した子ク...
Java

Java | オブジェクト指向:final フィールド

final フィールドとは何かfinal フィールドは「一度だけ代入でき、その後は再代入できない」フィールドです。オブジェクトの生成時に値を確定し、以降は参照を変えないことで、設計の予測可能性が上がり...
Java

Java | オブジェクト指向:final メソッド

final メソッドとは何かfinal メソッドは「子クラスからオーバーライド(上書き)できないメソッド」です。継承関係にあっても、その振る舞いを固定し、契約を壊されないようにします。親が守るべき安全...
Java

Java | オブジェクト指向:final クラス

final クラスとは何かfinal クラスは「継承を禁止したクラス」です。extends して子クラスを作ることができません。目的は、クラスの振る舞いを固定して“改変の余地”をなくし、設計の安全性・...
Java

Java | オブジェクト指向:多段継承の概念

多段継承とは何か多段継承は「親→子→孫…と継承が階層的に連なっている状態」を指します。AをBが継承し、BをCが継承する、といった“何段も連なる継承”です。Javaは「単一継承」なのでクラスを複数同時に...
Java

Java | オブジェクト指向:親クラスのコンストラクタ呼び出し

親コンストラクタ呼び出しとは何か子クラスのコンストラクタが、親クラス(スーパークラス)のコンストラクタを呼び出して「親の状態を先に正しく初期化する」仕組みです。Java では super(...) を...
Java

Java | オブジェクト指向:super キーワード

何をするキーワードかsuper は「親クラス(スーパークラス)のメンバーを参照する」ためのキーワードです。子クラスでオーバーライドしたメソッドから、親の元の実装を呼びたいときや、親のコンストラクタを明...
Java

Java | オブジェクト指向:継承のデメリット

まず、継承のデメリットとは何か継承は便利ですが、「親と子が強く結び付く」ため、変更や保守の難易度を上げる要因になりがちです。意図しない依存が広がり、拡張やテストが難しくなる“落とし穴”が複数あります。...
Java

Java | オブジェクト指向:継承のメリット

継承のメリットを一言で継承の最大のメリットは「共通の契約を共有しながら、振る舞いだけを差し替えて再利用できる」ことです。コードの重複を減らし、拡張しやすく、呼び出し側は共通型で扱えるため、全体の設計が...
Java

Java | オブジェクト指向:継承(extends)

まず、継承(extends)とは何か継承は「既存のクラスの性質(フィールドやメソッド)を受け継ぎ、必要な部分だけを差し替えたり足したりする」仕組みです。extends で親クラスを指定すると、子クラス...
Java

Java | オブジェクト指向:@Override アノテーション

何をするアノテーションか@Override は「このメソッドは親のメソッドをオーバーライド(上書き)しています」とコンパイラに伝えるための印です。付けておくと、シグネチャの食い違いやタイプミス、オーバ...
Java

Java | オブジェクト指向:メソッドのオーバーライド

何が「オーバーライド」かメソッドのオーバーライドは、親クラスが持つメソッドの「振る舞いを、子クラスで置き換える」ことです。継承関係にあるとき、同じメソッド名・同じ引数(シグネチャ)を子クラスで再定義す...
Java

Java | オブジェクト指向:toString のオーバーライド

toString をオーバーライドする意味toString は「そのオブジェクトを人間が読める文字列にする」ためのメソッドです。デフォルトはクラス名+ハッシュ(例: com.example.User@...
Java

Java | オブジェクト指向:equals と == の違い

ざっくり結論== は「同じ実体(同じ場所)か」を比べる演算子、equals は「中身(値)が同じか」を比べるメソッドです。プリミティブでは == が値比較、参照型(オブジェクト)では == が参照比較...
Java

Java | オブジェクト指向:hashCode のオーバーライド

なぜ hashCode をオーバーライドするのかhashCode は「オブジェクトのハッシュ値」を返すメソッドで、HashMap・HashSet などのハッシュ構造が「どのバケットに入れるか」を決める...
Java

Java | オブジェクト指向:equals のオーバーライド

equals をオーバーライドする意味equals は「同じモノかどうか」を値の観点で判定するためのメソッドです。デフォルトの equals は「同じインスタンス(同一性)」しか比較しませんが、値オブ...
Java

Java | オブジェクト指向:値オブジェクトとは

値オブジェクトとは何か値オブジェクトは「値そのものを表す小さな不変の型」です。金額、メールアドレス、期間、座標、IDなど、意味とルールを持つ“ただの値”をクラス化して、検証・整合性・振る舞い(比較や計...
Java

Java | オブジェクト指向:不変オブジェクトの考え方

不変オブジェクトとは何か不変オブジェクトは「生成後に状態が一切変わらない」オブジェクトです。フィールドは初期化時に確定され、その後は再代入されません。外から見ても中から見ても、値が変化しないので、並行...
Java

Java | オブジェクト指向:getter / setter

全体像getter / setter は「フィールド(内部状態)を外から安全に読み書きするための窓口」です。直接フィールドを公開せず、メソッド経由にすることで、読み取りは意図を伝え、書き込みは検証や前...
Java

Java | オブジェクト指向:カプセル化の目的

まとめて言うと何かカプセル化は「内部の状態や仕組みを隠し、外からは安全な窓口だけを見せる」設計のことです。目的は3つに絞られます。整合性の保護(壊れない)、変更容易性(中身を差し替えても外が壊れない)...
Java

Java | オブジェクト指向:パッケージプライベート

全体像パッケージプライベート(package-private)は「アクセス修飾子を何も付けない」状態の可視性で、同一パッケージ内からだけ見える(使える)という意味です。クラス・メソッド・フィールド・コ...
Java

Java | オブジェクト指向:protected の意味

全体像protected は「同じパッケージ内から見える」ことに加えて「別パッケージでも、継承したサブクラスからは自分自身を通して見える」アクセス修飾子です。外部に完全公開する public と、クラ...
Java

Java | オブジェクト指向:private の意味

全体像private は「同じクラスの中からだけ見える」というアクセス修飾子です。外部のクラスはもちろん、継承したサブクラスからも直接は触れません。目的はカプセル化——内部の状態や実装詳細を隠し、外部...
Java

Java | オブジェクト指向:public の意味

全体像public は「どこからでも見える・使える」という意味のアクセス修飾子です。パッケージが違っても、クラス外からでも、他のモジュールからでも、public にしたメンバー(クラス・メソッド・フィ...
Java

Java | オブジェクト指向:アクセス修飾子の種類

全体像アクセス修飾子は「どこからそのクラス・フィールド・メソッドが見えるか(使えるか)」を制御するための言語機能です。公開範囲を絞ることで、意図しない使われ方や整合性の破壊を防ぎ、APIの進化に強くで...
Java

Java | オブジェクト指向:static フィールドの用途

全体像static フィールドは「クラスに属する共有の状態」を表します。インスタンス(個体)ごとに違う値ではなく、クラス全体で1つだけ存在する値です。用途は「定数」「設定」「生成数のカウンタ」「共有キ...
Java

Java | オブジェクト指向:static メソッドの制約

概要static メソッドは「クラスに属する処理」で、インスタンス(オブジェクト)に依存しない計算や共通ユーティリティを表します。インスタンスがなくても呼べる一方で、インスタンス特有の情報には触れられ...
Java

Java | オブジェクト指向:static とインスタンスの違い

全体像static は「クラスに属するもの」、インスタンスは「オブジェクト(個体)に属するもの」です。static フィールドやメソッドは全インスタンスで共有され、クラスがロードされた時点で使えます。...
Java

Java | オブジェクト指向:インスタンス変数のスコープ

全体像インスタンス変数(フィールド)は「オブジェクトがずっと覚えている状態」で、クラスの中に宣言します。スコープは「どこからその変数が見えるか」を意味し、インスタンス変数は基本的に同じクラスの全メソッ...
Java

Java | オブジェクト指向:メソッド内ローカル変数

ローカル変数の全体像メソッド内ローカル変数は「メソッドの中だけで使える一時的なメモ」。メソッドが呼ばれている間だけ存在し、終わったら消えます。オブジェクトの状態(フィールド)とは別物で、外から見えませ...
Java

Java | オブジェクト指向:フィールド初期化

フィールド初期化の全体像フィールド初期化は「オブジェクトの状態を安全に立ち上げる」ための最初の設計作業です。Java では、フィールドは宣言時の初期化式、インスタンス初期化子、コンストラクタの順で整え...
Java

Java | オブジェクト指向:this キーワード

this の全体像this は「今まさに動いている、そのオブジェクト自身」を指すキーワードです。インスタンスメソッドやコンストラクタの中で使えて、フィールドへのアクセス、他のコンストラクタの呼び出し、...
Java

Java | オブジェクト指向:引数付きコンストラクタ

引数付きコンストラクタの全体像引数付きコンストラクタは、生成時に必要な情報を受け取って「正しい初期状態」を確立するための入口です。クラス名と同名で定義し、new クラス名(必要な値…) の形で呼びます...
Java

Java | オブジェクト指向:デフォルトコンストラクタ

デフォルトコンストラクタの全体像デフォルトコンストラクタは「引数なしのコンストラクタ」です。クラスにコンストラクタを1つも定義していない場合、Javaコンパイラが自動で用意します。役割は「そのクラスの...
Java

Java | オブジェクト指向:コンストラクタの役割

コンストラクタの全体像コンストラクタは「オブジェクトの初期状態を正しく確立するための特別なメソッド」です。返り値型を書かずクラス名と同名で定義し、new とともに呼ばれます。役割は「必要な値を受け取り...
Java

Java | オブジェクト指向:メソッド(振る舞い)

メソッドの全体像メソッド(振る舞い)は、オブジェクトが「何ができるか」を表す動作の定義です。フィールド(状態)に対して、検証しながら安全に操作したり、結果を計算して返したりします。Java では「イン...
Java

Java | オブジェクト指向:フィールド(メンバ変数)

フィールドの全体像フィールド(メンバ変数)は、オブジェクトが「覚えておく状態」です。クラスの中に宣言し、各オブジェクトがそれぞれの値を持ちます。Java では「インスタンスフィールド(個体ごと)」と「...
Java

Java | オブジェクト指向:インスタンス生成(new)

インスタンス生成の全体像インスタンス生成は「クラスという設計図から、具体的な“もの”をメモリ上に作る」行為です。Java では new クラス名(引数…) を呼ぶと、必要なメモリが確保され、フィールド...
Java

Java | オブジェクト指向:クラス定義の構文

クラス定義の全体像クラスは「状態(フィールド)と振る舞い(メソッド)」をひとまとめにする設計図です。基本構文は「パッケージ宣言→import→クラス宣言→フィールド→コンストラクタ→メソッド→ネスト型...
Java

Java | オブジェクト指向:クラスとオブジェクトの違い

全体像「クラス」は設計図、「オブジェクト」は設計図から作られた実体です。クラスはフィールド(状態)とメソッド(振る舞い)を定義し、new でインスタンス化すると、その時点の具体的な状態を持つオブジェク...
Java

Java | オブジェクト指向:オブジェクト指向とは何か

オブジェクト指向の全体像オブジェクト指向は「もの(オブジェクト)に状態と振る舞いを持たせ、役割ごとに分けて協調させる」考え方です。ものの設計図がクラスで、実体がオブジェクト。複雑さは“責務の分割”で小...
Java

Java | 基礎文法:小さなアプリの構築

小さなアプリ構築の全体像小さなアプリは「起動の配電盤(main)」「入力(CLI/ファイル)」「ドメインロジック」「永続化(ファイル/メモリ)」「出力(標準出力/ファイル)」の5点を薄く分けると、読み...
Java

Java | 基礎文法:例題をコードに落とす練習

コードに落とす練習の全体像「例題をコードに落とす」とは、文章で書かれた問題を、入力・出力・処理手順・境界条件に分解して、テスト可能な小さな関数やプログラムに組み立てることです。重要なのは「考える順序」...
Java

Java | 基礎文法:文字コード

文字コードの全体像文字コードは「文字をバイト列に変換・復元するための規則」です。Java の内部表現は Unicode を採用し、文字列は UTF-16(コードユニット)で保持されます。一方、ファイル...
Java

Java | 基礎文法:Intellij の自動補完

自動補完の全体像IntelliJ IDEA の自動補完は、書いている途中で「次にあり得る候補」を提示して、入力を短縮し、ミスを防ぎます。基本は Ctrl+Space(Mac は ⌃Space)で起動し...
Java

Java | 基礎文法:コマンドライン引数

コマンドライン引数の全体像Java のプログラムは main(String[] args) から始まり、args に「起動時に渡された文字列」が順番どおり入ります。引数はすべて文字列で渡されるので、必...
Java

Java | 基礎文法:main クラスの役割

main クラスの全体像Java アプリは「エントリポイント」である main メソッドから始まります。main を持つクラス(便宜上「main クラス」)は、起動時に必要な初期化を行い、コマンドライ...
Java

Java | 基礎文法:メソッドチェーン

メソッドチェーンの全体像メソッドチェーンは「メソッドの戻り値に対して、さらにメソッドを続けて呼ぶ」書き方です。オブジェクトが「次も同じ型(または関連型)を返す」ように設計されていると、ドットを繋いで流...
Java

Java | 基礎文法:可変長引数

可変長引数の全体像可変長引数(varargs)は、メソッドに「0個以上の引数」を渡せる仕組みです。シグネチャでは Type... name と書き、呼び出し側は m()、m(a)、m(a, b, c)...
Java

Java | 基礎文法:定数クラス(軽く)

定数クラスの全体像定数クラスは「アプリ全体で共有する変わらない値」を一か所にまとめて、意味のある名前で再利用するための入れ物です。マジックナンバーや散らばった文字列を排除し、変更箇所を一か所に集約でき...
Java

Java | 基礎文法:バッドパターン例(巨大メソッドなど)

バッドパターンの全体像バッドパターンは「動くけど、壊れやすく、読みにくく、直しにくい」コードの形です。巨大メソッド、深いネスト、長すぎる引数、フラグ引数、マジックナンバー、神クラス(God Class...
Java

Java | 基礎文法:コメントの適切な量

コメントの考え方の全体像「適切な量のコメント」は、コードの理解を速め、変更を安全にするための最小限の説明です。コメントは“何をしているか”より“なぜそうしているか”を伝えるのが核で、コードで表現できる...
Java

Java | 基礎文法:コーディングスタイル

コーディングスタイルの全体像コーディングスタイルは「読みやすさ」「一貫性」「変更に強い設計」をコードに刻むための約束事です。Java では命名・インデント・括弧・行の構成・コメント(Javadoc)・...
Java

Java | 基礎文法:ブロック構造

ブロック構造の全体像ブロック構造は、波括弧 { ... } で囲まれた「まとまり」です。Java のコードはブロックの入れ子でできており、スコープ(見える範囲)とライフタイム(生きている期間)、制御の...
Java

Java | 基礎文法:ローカル変数のスコープ

ローカル変数のスコープの全体像「スコープ」は、ローカル変数が「どこから見えて、どこまで使えるか」の範囲です。Java のローカル変数は「宣言されたブロック({ })の内側」でだけ有効で、ブロックを出た...
Java

Java | 基礎文法:System.out.printf

System.out.printf の全体像System.out.printf は「書式指定子(フォーマット)」を使って、値を整形して出力するためのメソッドです。プレースホルダ(例:%d, %s, %...
Java

Java | 基礎文法:配列のソート(Arrays.sort)

配列ソートの全体像Arrays.sort は配列を「その場で」昇順に並べ替える標準APIです。プリミティブ配列(int や任意クラスの配列)で動作や拡張性が少し異なります。基本は自然順(数値の昇順、文...
Java

Java | 基礎文法:配列のコピー

配列コピーの全体像「配列のコピー」は、既存の配列から新しい配列を作って中身を複製することです。Java では System.arraycopy、Arrays.copyOf、Arrays.copyOfR...
Java

Java | 基礎文法:文字列比較

文字列比較の全体像Javaでの文字列比較は「参照が同じか(==)」と「内容が同じか(equals)」の二軸があります。日常的に必要なのは内容比較です。さらに「大文字小文字を無視」「辞書順で並べる」「ユ...
Java

Java | 基礎文法:hashCode の基礎

hashCode の全体像hashCode は「オブジェクトを整数に写像する関数」で、主に HashMap/HashSet が高速に探索するために使います。equals が「意味として同じか」を判定す...
Java

Java | 基礎文法:equals の基礎

equals の全体像Java の equals は「二つのオブジェクトが“意味として”同じか」を判定するメソッドです。参照が同じか(同一性)は ==、意味が同じか(同値性)は equals で比べま...
Java

Java | 基礎文法:ランタイムエラーとコンパイルエラー

全体像Java のエラーは大きく「コンパイルエラー」と「ランタイムエラー」に分かれます。コンパイルエラーは「プログラムに文法・型・宣言の誤りがあり、そもそも実行ファイルを作れない」状態です。ランタイム...
Java

Java | 基礎文法:VSCode / IntelliJ の基本操作

IDE の全体像VSCode と IntelliJ IDEA は、Java の開発・実行・テスト・デバッグ・リファクタリングを一気通貫で支える統合開発環境です。VSCode は拡張機能で軽量に始められ...
Java

Java | 基礎文法:break ポイント

ブレークポイントの全体像ブレークポイントは「この行で一度、必ず止まって中身を観測する」ための印(デバッグの要」です。IDE(IntelliJ IDEA、Eclipse、VS Code など)で指定した...
Java

Java | 基礎文法:ステップ実行

ステップ実行の全体像ステップ実行は、プログラムを一行ずつ進めて「流れ」と「その瞬間の状態」を目で確認するデバッグ手法です。IDE(IntelliJ IDEA、Eclipse、VS Code など)でブ...
Java

Java | 基礎文法:変数ウォッチ

変数ウォッチの全体像変数ウォッチは、プログラムを一時停止して「いまこの瞬間の変数や式の値」を安全に観測するデバッグ技法です。IDE(IntelliJ IDEA、Eclipse、VS Code など)の...
Java

Java | 基礎文法:デバッグの基本

デバッグの全体像デバッグは「バグの原因を特定して、意図どおりに直す」作業です。Javaでは、再現手順の固定、ログやスタックトレースの読み取り、IDEのブレークポイントでの実行停止・変数観察、最小化した...
Java

Java | 基礎文法:API リファレンスの読み方

API リファレンスの全体像API リファレンスは「クラスやメソッドが何をし、どう使うべきか」を正確に伝える公式資料です。Java では標準ライブラリ(java.base など)の各クラスに対して、概...
Java

Java | 基礎文法:フロー制御の設計

フロー制御の全体像フロー制御は「どの順番で、どの条件で、どこまで処理するか」を設計することです。Javaでは if/switch、for/while、break/continue、early retu...
Java

Java | 基礎文法:early return

early return の全体像early return(早期リターン)は、関数の冒頭で「前提違反・エラー・不要条件」をすぐに判定して、処理を中断し、直ちに戻り値を返す書き方です。深い if/els...
Java

Java | 基礎文法:条件分岐のネスト

条件分岐のネストの全体像条件分岐のネストは、if/else を入れ子にして複数の前提やケースを順に判定する書き方です。複雑なロジックを表現できますが、深くなるほど読みづらく、バグが入りやすくなります。...
Java

Java | 基礎文法:繰り返しのネスト

繰り返しのネストの全体像「繰り返しのネスト」は、for/while/foreach などのループを入れ子にして、2次元以上のデータ(表、グリッド、組み合わせ)を処理する書き方です。外側のループが“行”...
Java

Java | 基礎文法:IndexOutOfBoundsException

IndexOutOfBoundsException の全体像IndexOutOfBoundsException(IOBE)は「インデックスが有効範囲の外」を指したときに投げられる実行時例外です。配列、...
Java

Java | 基礎文法:ArithmeticException

ArithmeticException の全体像ArithmeticException は「算術計算が不正で続行できない」ときに投げられる実行時例外です。代表例は整数の 0 除算(割り算・剰余の分母が...
Java

Java | 基礎文法:NullPointerException

NullPointerException の全体像NullPointerException(NPE)は「参照が null のまま、メソッド呼び出しやフィールド参照など“あるはずのもの”を使おうとした時...
Java

Java | 基礎文法:throw

throw の全体像throw は「ここで例外を発生させる」という明示的な合図です。コードが不正な状態や契約違反を検知した瞬間に処理を中断し、例外オブジェクトを投げて呼び出し側へ失敗を伝えます。使いど...
Java

Java | 基礎文法:throws

throws の全体像throws は「このメソッドは特定の例外を投げる可能性がある」と呼び出し側へ宣言するための構文です。主にチェック例外(IOException など)に使われ、呼び出し側に「捕ま...
Java

Java | 基礎文法:finally

finally の全体像finally は「例外が起きても起きなくても、最後に必ず実行したい後始末」を書くための節です。try で本処理、必要なら catch で失敗時の対応を行い、最後に final...
Java

Java | 基礎文法:catch

catch の全体像catch は、try ブロックで発生した例外を「受け止めて、意味のある対処をする」ための節です。例外の型ごとに複数の catch を並べ、具体的な回復やメッセージ出力、再スロー(...
Java

Java | 基礎文法:try

try の全体像try は「失敗しうる処理を囲み、例外が起きたときに安全に対応する」ための構文です。基本は try の中に通常処理を書き、失敗したら catch で受け止め、最後の後始末を final...
Java

Java | 基礎文法:例外とは

例外の全体像例外(Exception)は「通常の処理の流れを中断して、異常事態を安全に伝える仕組み」です。ファイルがない、ネットワークが切れた、引数が不正、ゼロ除算など「このまま続けると壊れる」状況で...
Java

Java | 基礎文法:コーディング規約

コーディング規約の全体像コーディング規約は「チーム全体でコードの見た目と書き方を揃えるための約束事」です。読みやすさ、保守性、バグ回避、ツール連携を高めます。Javaでは命名、インデント、改行、波括弧...
Java

Java | 基礎文法:可読性の高い変数名

可読性の高い変数名の全体像変数名は「コードの意味を最短で伝えるラベル」です。可読性の高い名前は、型や実装に頼らず「何を表し、どの単位・範囲・状態か」を一目で分かるようにします。Java では小文字のキ...
Java

Java | 基礎文法:final

final の全体像final は「再代入や変更を禁止する」ためのキーワードです。対象は変数・フィールド・メソッド・クラスで、付ける場所によって意味が変わります。基本は「変数なら再代入不可」「メソッド...
Java

Java | 基礎文法:定数の宣言

定数の全体像定数は「値を変えない」と約束した識別子です。Javaでは final を使って再代入を禁止します。クラス全体で共有する不変の値は static final にし、インスタンスごとに不変の値...
Java

Java | 基礎文法:ガベージコレクションの概念

ガベージコレクションの全体像ガベージコレクション(GC)は「もう使われないオブジェクトを自動で見つけてメモリを回収する仕組み」です。Javaではメモリ解放を手動で書く必要がなく、プログラムは「必要なと...
Java

Java | 基礎文法:Boolean の扱い

Boolean の全体像Javaの真偽値は「プリミティブの boolean」と「ラッパー型の Boolean」の2種類があります。boolean は値そのもの(true/false)、Boolean ...
Java

Java | 基礎文法:null

null の全体像null は「参照がどのオブジェクトも指していない」ことを表す特別な値です。プリミティブ型(int、double、boolean など)には存在せず、参照型(String、配列、クラ...
Java

Java | 基礎文法:ラッパークラス

ラッパークラスの全体像ラッパークラスは、プリミティブ型(int、long、double など)をオブジェクトとして扱うためのクラス群です。代表は Integer、Long、Double、Float、S...
Java

Java | 基礎文法:型変換(キャスト)

型変換(キャスト)の全体像キャストは「コンパイラが自動で変換しない型へ、開発者の意図で変換を命じる」操作です。プリミティブ間の縮小変換(double → int など)や、参照型の上下変換(親子関係の...
Java

Java | 基礎文法:型変換(自動)

型変換(自動)の全体像Java の「自動型変換」は、コンパイラが安全だと判断できる範囲で型を広げたり(拡大変換)、式の計算前に統一の型へ昇格させたりする仕組みです。代表は「拡大プリミティブ変換(wid...
Java

Java | 基礎文法:エスケープシーケンス

エスケープシーケンスの全体像エスケープシーケンスは、文字列リテラルの中に「そのまま書けない特殊な文字」や「見えない制御文字」を埋め込むための約束です。Javaではバックスラッシュ(\)から始まる記法で...
Java

Java | 基礎文法:文字列結合

文字列結合の全体像Javaの文字列結合は「複数の値をひとつの文字列にまとめる」操作です。もっとも基本は + 演算子ですが、用途によって StringBuilder、String.join、String...
Java

Java | 基礎文法:Math クラス基礎

Math クラスの全体像Math クラスは「数値計算の基本ツール」をまとめたユーティリティです。すべて static メソッドと定数で構成され、インスタンス化せず Math.メソッド名(...) で使...
Java

Java | 基礎文法:標準出力

標準出力の全体像標準出力(stdout)は「プログラムの結果やメッセージを画面(コンソール)へ出す」ための出力先です。Java では System.out(型は PrintStream)を使って行い、...
Java

Java | 基礎文法:Scanner 入力

Scanner 入力の全体像Scanner は「テキストをトークン(単語・数値など)に分解して読み取る」ためのユーティリティです。標準入力(キーボード)だけでなく、文字列、ファイル、入力ストリームから...
Java

Java | 基礎文法:JavaDoc コメント

JavaDoc コメントの全体像JavaDoc コメントは「コードから自動生成できる公式ドキュメント」のためのコメントです。/** ... */ の形式で書き、メソッドやクラスの「目的」「前提」「戻り...
Java

Java | 基礎文法:コメントの書き方

コメントの全体像コメントは「コードの意図や背景を言葉で補う」ためのものです。Java では「行コメント」「ブロックコメント」「ドキュメンテーションコメント(Javadoc)」の3種類があり、用途に応じ...
Java

Java | 基礎文法:パッケージ

パッケージの全体像パッケージは「クラスを論理的にグループ化し、名前が衝突しないようにする仕組み」です。ファイルの先頭に package com.example.app; のように宣言し、ディレクトリ構...
Java

Java | 基礎文法:import 文

import 文の全体像import 文は「他のパッケージにあるクラスやインターフェースを、短い名前で使えるようにする宣言」です。書かなくても「完全修飾名(package.クラス名)」で使えますが、コ...
Java

Java | 基礎文法:static フィールド

Static フィールドの全体像static フィールド(クラス変数)は「クラスに属する共有の状態」です。インスタンスを何個作っても、static フィールドは1つだけ存在し、全インスタンスから同じ値...
Java

Java | 基礎文法:static メソッド

Static メソッドの全体像static メソッドは「クラスに属するメソッド」で、インスタンス(new で作るオブジェクト)を介さずに呼び出せます。数値計算や文字列整形など「個別の状態に依存しない処...
Java

Java | 基礎文法:オーバーロード

オーバーロードの全体像オーバーロードは「同じメソッド名に、引数の型・個数・並びが異なるバリエーションを定義する」仕組みです。呼び出し時の引数からコンパイラが最適な版を選びます。意味が近い処理を一つの名...
Java

Java | 基礎文法:戻り値

戻り値の全体像戻り値は「メソッドが処理の結果として外へ返す値」です。定義時に「戻り値の型」を決め、return で値を返します。値を返さない場合は型に void を指定します。戻り値は「関数型思考の中...
Java

Java | 基礎文法:引数

引数の全体像引数は「メソッドが外から受け取る入力」です。Java では、メソッド定義側で「型と名前」を宣言し、呼び出し側がその順番に値を渡します。戻り値は結果、引数は材料。設計の核心は「正しい型」「順...
Java

Java | 基礎文法:メソッド呼び出し

メソッド呼び出しの全体像メソッド呼び出しは「名前のついた処理を実行し、必要なら結果を受け取る」行為です。Java では「インスタンスメソッド(対象オブジェクトに対して呼ぶ)」と「static メソッド...
Java

Java | 基礎文法:メソッド定義

メソッド定義の全体像メソッドは「処理に名前をつけて再利用できるようにする単位」です。入力(引数)を受け取り、必要なら結果(戻り値)を返します。Java では「戻り値の型」「メソッド名」「引数の並び」「...
Java

Java | 基礎文法:for-each 文

for-each 文の全体像for-each(拡張 for 文)は「配列やコレクションの全要素を順に取り出して処理する」ための最短記法です。書式は for (要素の型 変数 : 配列またはIterab...
Java

Java | 基礎文法:2次元配列

2次元配列の全体像2次元配列は「配列の配列」です。行(外側)と列(内側)という2軸を持つ構造で、matrix のように2つの添字で要素へアクセスします。Java の2次元配列は「固定長の1次元配列を複...
Java

Java | 基礎文法:配列の長さ

配列の長さの基礎Java の配列は「固定長」です。作成時に決めた要素数は後から増減できません。長さはフィールド length で参照し、先頭の添字は 0、最後の添字は length - 1 です。配列...
Java

Java | 基礎文法:配列の要素アクセス

配列要素アクセスの全体像配列の要素アクセスは「添字(インデックス)で特定の位置の値を読み書きする」操作です。Java の配列は 0 始まりで、最後の要素の添字は length - 1。arr の形でア...
Java

Java | 基礎文法:配列の初期化

配列初期化の全体像配列の初期化は「配列オブジェクトを作る」と「要素に初期値を入れる」の2ステップです。Java の配列は長さが固定で、生成直後は型に応じたデフォルト値(数値は 0、boolean は ...
Java

Java | 基礎文法:配列の宣言

配列宣言の全体像配列は「同じ型の要素を並べて管理する入れ物」です。Java の配列は「長さが固定」「0 始まりの添字」「参照型(配列そのものはオブジェクト)」という3点が基本です。宣言は「型+角括弧+...
Java

Java | 基礎文法:無限ループ

無限ループの全体像無限ループは「終了条件が永遠に満たされず、ループが止まらない状態」です。Java では while (true) や for(;;) のように意図的に書くこともできますが、初心者が陥...
Java

Java | 基礎文法:do-while

do-while の全体像do-while は「本体を必ず1回実行してから条件を判定し、条件が true の間は繰り返す」構文です。通常の while と違い、最初の1回は無条件で実行されます。ユーザ...
Java

Java | 基礎文法:while 文

while 文の全体像while 文は「条件が true のあいだ、繰り返し続ける」ための基本構文です。回数が決まっていない繰り返し(入力が尽きるまで、成功するまで、条件が変わるまで)に向いています。...
Java

Java | 基礎文法:for 文

for 文の全体像for 文は「繰り返し」を最もコンパクトに書ける基本構文です。回数を決めて処理する、配列やリストを順番に処理する、といった場面で頻出します。伝統的な for (初期化; 条件; 更新...
Java

Java | 基礎文法:三項演算子

三項演算子の全体像三項演算子(条件演算子)は「条件に応じて値を一つ選ぶ」ための最短記法です。書式は 条件 ? 真のときの値 : 偽のときの値。if-else を1行で「値として」書けるのが強みで、変数...
Java

Java | 基礎文法:continue

continue の全体像continue は「現在の反復(1周)をスキップして、すぐ次の周回へ進む」ための制御文です。ループ本体の途中で「この条件なら残りは処理しなくていい」と判断したときに使います...
Java

Java | 基礎文法:break

break の全体像break は「いま実行中の繰り返し(ループ)や switch の処理を、途中でただちに打ち切る」ための制御文です。よく使う場面は「条件を満たした瞬間に探索終了」「エラー検知でそれ...
Java

Java | 基礎文法:switch 文

switch 文の全体像Java の switch 文は「ある値に応じて複数の分岐から一つを選んで実行する」ための構文です。if-else if 連鎖を簡潔に書けるのが特徴で、特に「定数や列挙値に応じ...
Java

Java | 基礎文法:else if

else if の全体像else if は「複数の条件を上から順に評価して、最初に一致した処理だけを実行する」ための構文です。if と else の間に挟み、分岐を段階的に重ねられます。評価は上から下...
Java

Java | 基礎文法:else 文

else 文の役割と基本else 文は、if の条件が false のときに実行する「もう一方の手」を明示します。分岐は「A ならこうする、そうでないなら別のこうする」という二者択一をシンプルに書ける...
Java

Java | 基礎文法:if 文

If 文の全体像Java の if 文は「条件が true のときだけ処理を実行する」ための最基本の制御構文です。条件は必ず boolean 型(true/false)で、C のように数値を真偽として...
Java

Java | 基礎文法:デクリメント

デクリメントの全体像デクリメントは「数値を 1 減らす」最短記法で、-- を使います。Java では「前置(--n)」と「後置(n--)」があり、式として使ったときの結果が異なります。対象は数値プリミ...
Java

Java | 基礎文法:インクリメント

インクリメントの全体像インクリメントは「数値を1つ増やす」ための最短記法です。++ を使うと、x = x + 1; を1文字で書けます。Java では「前置」と「後置」の2種類があり、式として使ったと...
Java

Java | 基礎文法:複合代入演算子

複合代入演算子の全体像複合代入演算子は「計算して、その結果を同じ変数に代入する」操作を一行で書ける記法です。x += y は x = x + y、x *= y は x = x * y と同義で、読みや...
Java

Java | 基礎文法:代入演算子

代入演算子の全体像代入演算子は「右側の式を評価して、その結果を左側の変数に入れる」ための基本ツールです。最も基本は =(代入)で、派生として「加算して代入」の += や「乗算して代入」の *= などの...
Java

Java | 基礎文法:論理演算子

論理演算子の全体像Java の論理演算子は条件を組み合わせて真偽を計算するための道具です。中心は短絡評価の &&(AND)と ||(OR)、反転の !(NOT)で、結果は必ず boolean(true...
Java

Java | 基礎文法:比較演算子

比較演算子の全体像Java の比較演算子は「式の真偽を判定して boolean を返す」ための基本ツールです。代表は ==、!=、<、>、<=、>= で、数値や文字の大小、同値性を判定します。重要なの...
Java

Java | 基礎文法:算術演算子

算術演算子の全体像Java の算術演算子は、足し算・引き算・掛け算・割り算・余り(剰余)を行うための基本ツールです。整数と小数で挙動が異なる点、型の自動拡張やオーバーフロー、ゼロ割りの結果など、初心者...
Java

Java | 基礎文法:真偽値

真偽値の全体像Java の真偽値は boolean 型で、取りうる値は true と false の二つだけです。C 言語のように 0 や非 0 を真偽として扱うことはできません。条件分岐(if)、繰...
Java

Java | 基礎文法:文字列リテラル

文字列リテラルの全体像Java の文字列リテラルは、ダブルクォートで囲んだ "..." の形でコードに直接書くテキストです。型は String クラスで、不変(immutable)なので作成後の内容は...
Java

Java | 基礎文法:数値リテラル

数値リテラルの全体像Java の「数値リテラル」は、コードに直接書く数値のことです。たとえば 42 や 3.14 のように書いたものがリテラルです。整数リテラルのデフォルト型は int、小数リテラルの...
Java

Java | 基礎文法:文字列型

文字列型の全体像Java の文字列は String クラスで表現され、テキストを扱うための最重要型です。String は不変(immutable)で、一度作った文字列の内容は変わりません。この不変性に...
Java

Java | 基礎文法:データ型(プリミティブ)

データ型(プリミティブ)の全体像Java のプリミティブ型は「値そのもの」を扱う最小単位のデータ型です。メモリ効率が良く、速度も速いので、数値計算やフラグ管理などの基礎に使われます。プリミティブは参照...
Java

Java | 基礎文法:変数の定義

変数の定義の全体像Java で「変数の定義」は、値にラベルを貼ってプログラム中で再利用できるようにする作業です。基本形は「型 名称 = 値;」で、型が先に来るのがポイントです。たとえば int age...
Java

Java | 基礎文法:コンパイルと実行

コンパイルと実行の全体像Java のプログラムは「ソースコード(.java)→ バイトコード(.class)→ JVM で実行」という三段構成で動きます。まず javac がソースをコンパイルして O...
Java

Java | 基礎文法:main メソッド

Main メソッドの役割Java の「プログラムの入口」は main メソッドです。JVM は指定されたクラスを読み込み、最初に public static void main(String[] ar...
Java

Java | 基礎文法:JDK と JRE

JDK と JRE の全体像Java を動かすには「実行環境」と「開発のための道具」が必要です。ここで登場するのが JRE(Java Runtime Environment)と JDK(Java De...
Java

Java | 基礎文法:Java の特徴

Java の特徴Java は「一度書けばどこでも動く(Write Once, Run Anywhere)」を目指して設計された言語です。プログラムはまず「バイトコード」にコンパイルされ、Java 仮想...
Java

Java 逆引き集 | ストリーム処理の設計ガイドライン(副作用禁止等) — 保守性向上

ねらいと基本原則ストリーム処理の保守性は「副作用を禁じる」「遅延評価を味方にする」「結合可能な集約を選ぶ」の三本柱で決まります。中間操作は純粋関数(入力だけに依存し、外部状態を変更しない)に徹し、副作...
Java

Java 逆引き集 | Stream を用いたデータ整形パイプライン設計 — パイプラインアーキテクチャ

ねらいと基本方針データ整形パイプラインは「取り込み → 正規化 → 検証 → 集約/変換 → 出力」の流れを、安全に、短く、遅延評価で組み立てる設計です。Stream を軸にすると、巨大データでもメモ...
Java

Java 逆引き集 | parallelStream のベンチマーク方法 — 実運用での検証

ねらいと前提parallelStream は「並列化すれば常に速い」魔法ではありません。効果が出る条件と落とし穴を理解し、順次と並列を同じ環境・同じ入力で比較するのが基本です。並列ストリームは For...
Java

Java 逆引き集 | Stream を使った CSV → オブジェクト変換 — ETL の簡潔化

ねらいと前提CSV をオブジェクトへ変換する ETL は「読み取り → クリーニング → 変換 → 検証 → 出力」の流れです。Stream を使えば、行を遅延で処理しながら宣言的に書けるため、巨大フ...
Java

Java 逆引き集 | lazy evaluation の理解(中間操作は遅延) — 無駄な処理回避

ねらいと前提Stream の中間操作(filter, map, sorted など)は「遅延評価」です。つまり、終端操作(collect, forEach, count など)が呼ばれるまで実行されま...
Java

Java 逆引き集 | Stream と Optional の良い組み合わせ — 値の有無ハンドリング

ねらいと前提値が「あるかもしれない/ないかもしれない」場面で、Optional は null 安全を保ちながら表現できます。Stream は「たくさんの値」を宣言的に流せます。この二つをうまく組み合わ...
Java

Java 逆引き集 | Stream API によるツリー/グラフ探索(再帰を使わないパターン) — 非再帰探索

ねらいと前提ツリー/グラフ探索は「親→子(隣接)」へ辿る処理です。再帰は直感的ですが、スタックあふれや制御の難しさが出ます。非再帰パターンでは、キュー(BFS)やスタック(DFS)を使って自分で「探索...
Java

Java 逆引き集 | reduce で複合オブジェクト集約 — ドメイン集計

ねらいと前提reduce は「ストリームの全要素をひとつの結果へ畳み込む」終端操作です。ドメイン集計では単なる数値の和ではなく、複数フィールドを持つ複合オブジェクト(件数・合計・最小・最大・補助メモな...
Java

Java 逆引き集 | ストリームでの並列グループ化(groupingByConcurrent) — 並列集計

ねらいと前提並列ストリームで「キーごとに集計」するなら、Collectors.groupingByConcurrent が最短で安全です。並列対応の ConcurrentHashMap を内部に使い、...
Java

Java 逆引き集 | キャッシング Collector(memoizing)パターン — 重い計算の最適化

目的と前提「重い計算」をストリームの中で何度も呼ぶと、CPUが燃え、待ち時間が伸び、並列化しても効果が出ません。キャッシング(memoizing)パターンは、同じ入力に対する結果を再利用して、計算を最...
Java

Java 逆引き集 | ストリームのデバッグ技(ログ出力・中間確認) — トラブルシュート

ねらいと前提「ストリームがどこでどう変わっているか」を素早く可視化できると、原因特定が一気に速くなります。中間確認の王道は peek と「小さく材質化(toList など)」の使い分けです。重要なのは...
Java

Java 逆引き集 | Stream と SQL の比較(いつ DB で処理すべきか) — 負荷分散判断

目的と前提「アプリ側で Stream に流すか、DB 側で SQL に任せるか」を正しく判断できると、性能・コスト・保守性が一気に安定します。根本の考え方はシンプルです。データ量が大きいほど「近いとこ...
Java

Java 逆引き集 | 組み合わせ生成(combinatorics via stream) — テストデータ作成

ねらいと基本指針テストデータを作るとき、組み合わせ(直積・順列・組合せ)を手早く生成できると検証の幅が一気に広がります。Java の Stream は「宣言的・短絡・遅延実行」が武器。巨大な結果を丸ご...
Java

Java 逆引き集 | Windowing(スライディング窓)パターン実装 — 時系列処理

目的と前提大量データを Stream で処理するとき、ボトルネックは「CPUよりメモリ」になりがちです。推定でも十分なので、どれだけメモリを消費するかを見積もり、材質化(toList/toMap)を最...
Java

Java 逆引き集 | Windowing(スライディング窓)パターン実装 — 時系列処理

目的と前提時系列処理で「連続 N 件」「直近 N 秒」のように、一定範囲のデータを滑らせながら集計するのがスライディング窓(windowing)です。Java 標準の Stream API には専用ウ...
Java

Java 逆引き集 | イテレータ→ストリームの変換(StreamSupport) — 外部API統合

目的と前提外部APIが Iterator(または Iterable)しか返さないときでも、Stream に変換すれば filter・map・collect などの強力な処理を宣言的に書けます。鍵になる...
Java

Java 逆引き集 | 並列 reduce の適切な設計(結合可能な演算) — 正しさの担保

目的と前提並列 reduce を正しく設計する鍵は「結合可能(結合律を満たす)な演算」と「適切な単位元(identity)」、そして「accumulator と combiner の整合性」です。並列...
Java

Java 逆引き集 | Stream サプライヤーパターン(Supplier を用いる) — 再生成可能性

目的と前提ストリームは「一度流したら終わり」の一回性を持ちます。同じパイプラインで複数の終端操作(count と toList など)をしたい、あるいは同じフィルタや変換を繰り返し適用したい場面では、...
Java

Java 逆引き集 | ストリームチェーンの分割と再利用 — 可読性/保守性

ねらいと基本原則ストリームは「1回流して終わり」の使い捨てモデルです。可読性と保守性を高めたいなら、再利用すべきはストリームそのものではなく「処理の定義(Predicate/Function/Coll...
Java

Java 逆引き集 | ストリームでのランダムアクセスの落とし穴 — パフォーマンス評価

概要と本質ストリームは「順次走査」に強く、「ランダムアクセス」に弱い仕組みです。配列や ArrayList のようなランダムアクセス向きのデータ構造でも、ストリームに乗せるとインデックス指定は基本的に...
Java

Java 逆引き集 | サードパーティライブラリ(jOOλ 等)の活用 — ストリーム拡張

ポイントまとめJava 標準の Stream API は便利ですが、制約もあります。サードパーティライブラリ jOOλ(jOOL) を使うと、タプル型や拡張関数、例外処理の簡略化などが可能になり、St...
Java

Java 逆引き集 | Stream を使った行列変換(transpose) — データ整形

Stream を使った行列変換(transpose) — データ整形「行列の転置(transpose)」とは、行と列を入れ替える操作です。例えば 2×3 の行列を転置すると 3×2 になります。Str...
Java

Java 逆引き集 | Stream の例外リカバリ戦略(fallback) — 途中失敗の処理

Stream の例外リカバリ戦略(fallback) — 途中失敗の処理ストリーム処理の途中で I/O や変換が失敗しても、処理全体を止めずに「回復」させるのが fallback。目的は「止めるべき失...
Java

Java 逆引き集 | IntSummaryStatistics の活用 — 集計情報取得の便利型

IntSummaryStatistics の活用 — 集計情報取得の便利型IntSummaryStatistics は「int の集計情報」をひとまとめに持つユーティリティです。件数・合計・最小値・最...
Java

Java 逆引き集 | Collector joining with delimiter/prefix/suffix — レポート生成

Collector.joining with delimiter/prefix/suffix — レポート生成Stream の要素を文字列としてまとめたいときに便利なのが Collectors.joi...
Java

Java 逆引き集 | flatMap を用いたネスト解除(OptionalやListのネスト) — 構造フラット化

flatMap を用いたネスト解除(OptionalやListのネスト) — 構造フラット化Stream API の flatMap は「入れ子になった構造をフラットにする」ための中間操作です。初心者...
Java

Java 逆引き集 | 並列ストリームでのコンテキスト保持(ThreadLocal の注意) — 意図しない挙動回避

並列ストリームでのコンテキスト保持(ThreadLocal の注意) — 意図しない挙動回避Java の並列ストリームは内部的に ForkJoinPool を使って複数スレッドで処理します。このとき「...
Java

Java 逆引き集 | ストリームの短絡(short-circuit)操作 — パフォーマンス最適化

ストリームの短絡(short-circuit)操作 — パフォーマンス最適化短絡操作は「必要な分だけ処理したら早めに打ち切る」ための仕組みです。無駄な計算や I/O を避け、スループットを上げる実戦テ...
Java

Java 逆引き集 | 並列ストリームと ForkJoinPool のチューニング — スループット向上

並列ストリームと ForkJoinPool のチューニング — スループット向上並列ストリームは「書き換え少なくCPUを使い切る」ための強力な選択肢。ただし闇雲な並列化は遅くなったり結果が壊れます。安...
Java

Java 逆引き集 | Collector.of でカスタム Collector 作成 — 特殊な集約

Collector.of でカスタム Collector 作成 — 特殊な集約Stream API の Collectors には便利な標準 Collector が多数ありますが、特殊な集約処理をした...
Java

Java 逆引き集 | ストリームでの例外処理パターン(ラップ処理) — checked 例外の扱い

ストリームでの例外処理パターン(ラップ処理) — checked 例外の扱いStream のラムダは基本的に checked 例外を投げられません。ファイルやネットワークなどの I/O をストリームの...
Java

Java 逆引き集 | Optional を返すストリーム処理パターン — null 安全

Optional を返すストリーム処理パターン — null 安全Java の Stream API は「結果があるかどうか分からない」処理をするときに Optional を返すメソッドを備えています...
Java

Java 逆引き集 | ファイルの行ストリーム処理(Files.lines) — 大規模ファイル処理

ファイルの行ストリーム処理(Files.lines) — 大規模ファイル処理Java NIO の Files.lines(Path) は、テキストファイルを 1行ずつストリームとして処理できる便利なメ...
Java

Java 逆引き集 | peek の使い方(デバッグ) — 中間ログ

peek の使い方(デバッグ) — 中間ログストリームの「途中」を覗いて、要素がどう変わっているかを確認するのが peek。中間操作としてログを差し挟めるので、フィルタや変換の結果を安全に観察できます...
Java

Java 逆引き集 | Stream 並列化の落とし穴(副作用) — スレッド安全性

Stream 並列化の落とし穴(副作用) — スレッド安全性Java の Stream API は .parallelStream() や .parallel() を使うと簡単に並列化できます。しかし...
Java

Java 逆引き集 | Collectors.toMap の衝突解決(mergeFunction) — Map 化での安全対策

Collectors.toMap の衝突解決(mergeFunction) — Map 化での安全対策Stream を Map に変換するとき、キー重複があると例外になります。Collectors.t...
Java

Java 逆引き集 | Stream.iterate(Java 9 の変化) — シーケンス生成

Stream.iterate(Java 9 の変化) — シーケンス生成Java 8 から導入された Stream.iterate は「初期値から次の値を生成していく」ための便利なメソッドです。Jav...
Java

Java 逆引き集 | range / rangeClosed(数値ストリーム) — 反復生成

range / rangeClosed(数値ストリーム) — 反復生成IntStream/LongStream には数値の連続を作るための range 系メソッドがあり、for ループより短く安全に「...
Java

Java 逆引き集 | IntStream/LongStream/DoubleStream(プリミティブストリーム) — オートボクシング回避

IntStream / LongStream / DoubleStream(プリミティブストリーム) — オートボクシング回避Java の Stream API には、Stream<Integer> ...
Java

Java 逆引き集 | anyMatch/allMatch/noneMatch — 条件検査

anyMatch / allMatch / noneMatch — 条件検査Stream API の終端操作である anyMatch / allMatch / noneMatch は、ストリームの要素...
Java

Java 逆引き集 | max/min/findFirst/findAny — 候補抽出

max / min / findFirst / findAny — 候補抽出Stream API には「候補をひとつ取り出す」ための便利な終端操作がいくつかあります。max/min は「最大値・最小値...
Java

Java 逆引き集 | summarizingInt/Long/Double — 統計情報を一発取得

summarizingInt / summarizingLong / summarizingDouble — 統計情報を一発取得Stream API の Collectors.summarizingI...
Java

Java 逆引き集 | partitioningBy(true/false に分割) — 二分集計

partitioningBy(true/false に分割) — 二分集計Stream API の Collectors.partitioningBy は「条件に合うかどうか」で true/false...
Java

Java 逆引き集 | joining(Collectors.joining) — 文字列結合

joining(Collectors.joining) — 文字列結合Stream API の Collectors.joining は、ストリームの要素を 文字列として結合するための便利な終端操作で...
Java

Java 逆引き集 | collect(Collectors.groupingBy(…)) — グルーピング集計

collect(Collectors.groupingBy(...)) — グルーピング集計Stream API の collect(Collectors.groupingBy(...)) は「キーご...
Java

Java 逆引き集 | reduce の使い方(集約) — 合算や累積計算

reduce の使い方(集約) — 合算や累積計算Stream の「結果をひとつに畳み込む」終端操作が reduce。合計・積・最大最小・連結・カスタム集約まで、柔軟に一行で書けます。初心者が迷う「初...
Java

Java 逆引き集 | distinct / limit / skip — 重複排除・ページング処理

distinct / limit / skip — 重複排除・ページング処理Stream API の中間操作でよく使うのが distinct(重複排除)、limit(先頭から指定件数だけ残す)、ski...
Java

Java 逆引き集 | filter・map・flatMap の使い分け — 条件絞りと展開

filter・map・flatMap の使い分け — 条件絞りと展開「要素を絞る・変換する・入れ子をほどく」をそれぞれ得意とするのが filter、map、flatMap。違いが腹落ちすると、無駄な中...
Java

Java 逆引き集 | Intermediate / Terminal 操作の理解 — パイプライン設計

Intermediate / Terminal 操作の理解 — パイプライン設計ストリームは「中間操作で加工し、終端操作で結果を取り出す」流れで動きます。中間は“つなぐ”、終端は“決着させる”。この違...
Java

Java 逆引き集 | Stream API の基本(stream(), filter, map, collect) — データ変換

Stream API の基本(stream(), filter, map, collect) — データ変換Java 8 以降で導入された Stream API は「コレクションを宣言的に処理する」た...
Java

Java 逆引き集 | Iterator vs Stream の使い分け(遅延評価・メモリ) — 性能設計

Iterator vs Stream の使い分け(遅延評価・メモリ) — 性能設計「大量データをどう処理するか」は設計の肝。Iterator は手続き的で軽量、Stream は宣言的で強力(遅延評価・...
Java

Java 逆引き集 | バッチ処理用チャンク分割(partitioning) — メモリ制御

バッチ処理用チャンク分割(partitioning) — メモリ制御大量データを「少しずつ」処理することで、メモリ使用量と失敗リスクを抑えるのがチャンク分割です。固定サイズで区切って読み・変換・書き込...
Java

Java 逆引き集 | 多次元配列と List<List<T>> の使い分け — 可変性と利便性

多次元配列と List<List<T>> の使い分け — 可変性と利便性Java では「二次元以上のデータ構造」を表す方法が大きく分けて2つあります。多次元配列(int, String など)入れ子の...
Java

Java 逆引き集 | Guava / Apache Commons Collections の利用(拡張ユーティリティ) — 実務ツール

Guava / Apache Commons Collections の利用(拡張ユーティリティ) — 実務ツール標準 Java コレクション API は基本的な機能を提供しますが、実務では「もう少し...
Java

Java 逆引き集 | Collections.newSetFromMap(Map を Set に変換) — カスタム Set 実装

Collections.newSetFromMap(Map を Set に変換) — カスタム Set 実装Java には Collections.newSetFromMap(Map<E,Boolea...
Java

Java 逆引き集 | ThreadLocal を使ったスレッド依存データ管理 — スレッド単位の状態

ThreadLocal を使ったスレッド依存データ管理 — スレッド単位の状態同じ変数名でも、各スレッドが「自分専用の値」を持てるのが ThreadLocal。リクエスト単位のトレースID、フォーマッ...
Java

Java 逆引き集 | Map の null キー/値対応(実装差) — 入出力検証

Map の null キー/値対応(実装差) — 入出力検証Map は実装ごとに「null を許すか」が違います。キーに null を入れると検索や equals/hashCode まわりで混乱しやす...
Java

Java 逆引き集 | コレクション間の差分(removeAll, retainAll) — 差分集計

コレクション間の差分(removeAll, retainAll) — 差分集計差分を取りたいときの定番が removeAll(差集合の除去)と retainAll(共通部分の保持)。どちらも「破壊的(...
Java

Java 逆引き集 | バッファ付きコレクション(LinkedList の代替) — メモリ/性能の考慮

バッファ付きコレクション(LinkedList の代替) — メモリ/性能の考慮「バッファ用途(キュー、先頭・末尾の出し入れ、スライディングウィンドウ)」で LinkedList を選びがちですが、実...
Java

Java 逆引き集 | トポロジカルソート(グラフ→依存解決) — ビルド順や依存解決

トポロジカルソート(グラフ→依存解決) — ビルド順や依存解決「依存関係を持つタスクを順序付けする」典型アルゴリズムが トポロジカルソート。Java での実装は、有向非巡回グラフ(DAG) を前提に、...
Java

Java 逆引き集 | Stream の無限ストリーム(iterate, generate) — データ生成

Stream の無限ストリーム(iterate, generate) — データ生成無限ストリームは「必要なだけ動的に作る」ための道具です。Stream.iterate は「前の値から次を作る連続生成...
Java

Java 逆引き集 | Map のビュー(keySet, values, entrySet)の使い分け — 効率的操作

Map のビュー(keySet, values, entrySet)の使い分け — 効率的操作Map の「ビュー」は中身をコピーせず、元の Map に直接つながった見え方を返します。ビュー経由での操作...
Java

Java 逆引き集 | Immutable wrappers と defensive copy パターン — API 安全性

Immutable wrappers と defensive copy パターン — API 安全性API 設計で「外部から渡されたコレクションや配列を勝手に書き換えられてしまう」問題を防ぐために使う...
Java

Java 逆引き集 | Arrays.copyOf / copyOfRange — 配列操作と拡張

Arrays.copyOf / copyOfRange — 配列操作と拡張配列を「丸ごとコピー」「サイズ変更」「一部だけ取り出す」を、安全に簡潔に書けるのが Arrays.copyOf と Array...
Java

Java 逆引き集 | Collections.swap / replaceAll — リスト操作の簡潔化

Collections.swap / replaceAll — リスト操作の簡潔化リスト要素の入れ替えや一括置換を「短く安全に」書けるのが Collections.swap と Collections...
Java

Java 逆引き集 | ListIterator(双方向反復) — 位置ベースの操作

ListIterator(双方向反復) — 位置ベースの操作ListIterator は List を前後どちらの方向にも走査でき、走査しながら安全に「挿入・削除・置換」ができる反復子です。カーソルは...
Java

Java 逆引き集 | Iterator.remove の正しい使い方 — ループ中の安全な削除

Iterator.remove の正しい使い方 — ループ中の安全な削除拡張 for 文で走査中に remove すると例外になりがち。安全に要素を削除したいときは、Iterator を使い、next...
Java

Java 逆引き集 | Stream の並列化(parallelStream)と注意点 — スレッド安全性

Stream の並列化(parallelStream)と注意点 — スレッド安全性並列 Stream は「ForkJoinPoolで要素を分割・並列処理・結合」する仕組みです。速くなることもありますが...
Java

Java 逆引き集 | コレクションの初期容量指定(負荷低減) — パフォーマンスチューニング

コレクションの初期容量指定(負荷低減) — パフォーマンスチューニング「どれくらい要素が入るか」をあらかじめ見積もれるなら、初期容量を指定しておくと再割り当て(拡張)や再ハッシュを減らせます。結果とし...
Java

Java 逆引き集 | Immutable key の要件(hashCode/equals 安定) — Map の鍵設計

Immutable key の要件(hashCode/equals 安定) — Map の鍵設計Map のキーは「一度入れたら同じまま」であることが大前提です。途中で変化すると検索できなくなったり、誤...
Java

Java 逆引き集 | サブリスト(subList)の注意点(ビュー) — 変更の影響範囲

サブリスト(subList)の注意点(ビュー) — 変更の影響範囲Java の List.subList(from, to) は「部分リスト」を返しますが、これは コピーではなく元リストのビュー(見え...
Java

Java 逆引き集 | 自然順序付け(Comparable) — デフォルトソート

自然順序付け(Comparable) — デフォルトソートJava の「自然順序付け」は、クラスが Comparable インターフェースを実装している場合に使われる「デフォルトの並び替えルール」です...
Java

Java 逆引き集 | Comparator の作り方(comparing, reversed, thenComparing) — ソートルール

Comparator の作り方(comparing, reversed, thenComparing) — ソートルール「主キー→副キー→さらに副キー」と、明快に並び替えルールを書けるのが Compa...
Java

Java 逆引き集 | FlatMap を使ったネスト解除 — ネスト構造展開

FlatMap を使ったネスト解除 — ネスト構造展開「配列の中に配列」「リストの中にリスト」「Optional の中に Optional」など、入れ子になった構造を一段に平らにするのが flatMa...
Java

Java 逆引き集 | PartitioningBy / GroupingBy(Collectors) — 集計・グループ化

PartitioningBy / GroupingBy(Collectors) — 集計・グループ化Stream の終端操作 collect における定番が partitioningBy(2分割)と ...
Java

Java 逆引き集 | Stream.collect(Collectors.toList()/toSet()/toMap()) — ストリーム結果変換

Stream.collect(Collectors.toList()/toSet()/toMap()) — ストリーム結果変換Stream の終端操作である collect は、加工した要素を Lis...
Java

Java 逆引き集 | Collections.frequency / disjoint などユーティリティ — コレクション比較

Collections.frequency / disjoint などユーティリティ — コレクション比較配列やリスト、セット同士を「重複数の比較」「共通要素の有無」「部分一致」などで比べたいとき、j...
Java

Java 逆引き集 | CopyOnWriteArrayList(読み取り多い並列環境) — 読み取り優先

CopyOnWriteArrayList(読み取り多い並列環境) — 読み取り優先書き込み時に「配列のコピー」を作って更新し、読み取りや反復を常に安全にするのが CopyOnWriteArrayLis...
Java

Java 逆引き集 | ConcurrentLinkedQueue(ロックフリーキュー) — 高スループット

ConcurrentLinkedQueue(ロックフリーキュー) — 高スループット複数スレッドから同時に追加・取得しても待ち時間がほぼ発生しない、ロックフリーな待ち行列が ConcurrentLin...
Java

Java 逆引き集 | IdentityHashMap(== でキー比較) — 特殊用途

IdentityHashMap(== でキー比較) — 特殊用途IdentityHashMap は Java の特殊な Map 実装で、キーの比較に equals() ではなく ==(参照同一性) を...
Java

Java 逆引き集 | WeakHashMap の利用ケース(キャッシュと GC) — メモリリーク防止

WeakHashMap の利用ケース(キャッシュと GC) — メモリリーク防止WeakHashMap は「キーを弱参照で保持する Map」。キーへの強参照が外部で途切れると、GC(ガベージコレクショ...
Java

Java 逆引き集 | NavigableMap / NavigableSet(近傍検索) — 前後関係の取得

NavigableMap / NavigableSet(近傍検索) — 前後関係の取得NavigableMap と NavigableSet は、ソート済みのデータ構造に「近傍検索(前後関係の取得)」...
Java

Java 逆引き集 | Deque(ArrayDeque) — 両端操作、高速スタック/キュー

Deque(ArrayDeque) — 両端操作、高速スタック/キューJava の Deque(Double Ended Queue)は「両端から追加・削除できる」データ構造です。代表的な実装が Ar...
Java

Java 逆引き集 | PriorityQueue(優先度キュー) — ジョブスケジューラ

PriorityQueue(優先度キュー) — ジョブスケジューラ優先度で「先に処理すべきもの」から取り出せるのが PriorityQueue。デフォルトでは最小値が先頭の最小ヒープ構造で、自然順また...
Java

Java 逆引き集 | イミュータブルコレクション(List.of, Map.of) — 不変の集合

イミュータブルコレクション(List.of, Map.of) — 不変の集合Java 9 以降では、List.of, Set.of, Map.of などの イミュータブル(不変)コレクション を簡単に...
Java

Java 逆引き集 | MultiMap パターン(Map <K, List<V>>) — 1対多管理

MultiMap パターン(Map<K, List<V>>) — 1対多管理Java の標準ライブラリには「MultiMap」というクラスはありません。しかし「1つのキーに複数の値を紐付けたい」場面は...
Java

Java 逆引き集 | Map のストリーム処理(entrySet→stream) — キー/値単位処理

Map のストリーム処理(entrySet→stream) — キー/値単位処理Mapは「キー→値」のペアを扱う構造。Stream APIと組み合わせると、条件抽出、並べ替え、集計が短く安全に書けます...
Java

Java 逆引き集 | Map.computeIfAbsent / compute / merge — 集計ロジック簡潔化

Map.computeIfAbsent / compute / merge — 集計ロジック簡潔化「存在チェック→取得→更新→再格納」の冗長なコードを、1行の原子操作で置き換えるのが computeI...
Java

Java 逆引き集 | Collections.synchronizedList 等(同期ラッパー) — 古い同期方法

Collections.synchronizedList 等(同期ラッパー) — 古い同期方法読み書きが同時に起きる環境で、既存の可変コレクションを「ひとまず安全に」使いたいときに使うのが同期ラッパー...
Java

Java 逆引き集 | Arrays クラスユーティリティ(sort / binarySearch) — 配列操作

Arrays クラスユーティリティ(sort / binarySearch) — 配列操作配列の並べ替えと検索は「まずソートしてから二分探索」が基本。Java の java.util.Arrays は...
Java

Java 逆引き集 | Collections.shuffle / sort / reverse — リスト操作ユーティリティ

Collections.shuffle / sort / reverse — リスト操作ユーティリティリストの「並び替え」「逆順」「ランダム化」を一発でやれるのが Collections ユーティリテ...
Java

Java 逆引き集 | Collections.unmodifiableList 等(読み取り専用ラッパー) — API 返却時の安全性

Collections.unmodifiableList 等(読み取り専用ラッパー) — API 返却時の安全性外部にコレクションを返すとき「勝手に書き換えられない」ようにするのが読み取り専用ラッパー...
Java

Java 逆引き集 | ConcurrentHashMap (スレッド安全な Map) — マルチスレッド環境

ConcurrentHashMap(スレッド安全な Map) — マルチスレッド環境並行処理で「キー→値」を共有したいなら、まずは ConcurrentHashMap。ロックを最小限に抑えた設計で、高...
Java

Java 逆引き集 | EnumMap / EnumSet の活用(enum 最適化) — 小さい高速マップ/集合

EnumMap / EnumSet の活用(enum 最適化) — 小さい高速マップ/集合Java には「列挙型(enum)」専用に最適化されたコレクションが用意されています。それが EnumMap ...
Java

Java 逆引き集 | HashSet の特性と重複排除 — 一意性保持

HashSet の特性と重複排除 — 一意性保持Java の HashSet は「重複を許さない集合」を表すクラスです。初心者が理解すべきポイントは「一意性保持」「順序が保証されない」「検索が速い」と...
Java

Java 逆引き集 | TreeMap(ソートされた Map) — 範囲検索

TreeMap(ソートされた Map) — 範囲検索TreeMap は Java の Map 実装のひとつで、キーを自動的にソートして保持するのが特徴です。初心者が理解すべきポイントは「キーが常に昇順...
Java

Java 逆引き集 | LinkedHashMap(挿入順/アクセス順保持) — LRU 実装の簡易版

LinkedHashMap(挿入順/アクセス順保持) — LRU 実装の簡易版Java の LinkedHashMap は、HashMap に「順序保持機能」を追加したものです。初心者が理解すべきポイ...
Java

Java 逆引き集 | HashMap の基本(キーのハッシュ化) — 索引付き検索

HashMap の基本(キーのハッシュ化) — 索引付き検索Java で「キーと値のペア」を効率的に管理する代表的なコレクションが HashMap です。初心者が理解すべきポイントは「キーをハッシュ化...
Java

Java 逆引き集 | LinkedList の使いどころ(頻繁な先頭/中間挿入) — キュー実装

LinkedList の使いどころ(頻繁な先頭/中間挿入) — キュー実装Java で「リスト構造」を扱うとき、ArrayList と LinkedList が代表的です。初心者が理解すべきポイントは...
Java

Java 逆引き集 | ArrayList の使いどころと性能(ランダムアクセス重視) — 一覧管理

ArrayList の使いどころと性能(ランダムアクセス重視) — 一覧管理Java で「一覧管理」をする際によく使うのが ArrayList。初心者がまず理解すべきは「どんな場面で使うか」「性能の特...
Java

Java 逆引き集 | コードスタイルとフォーマッタ(一定の規約) — チーム開発品質

コードスタイルとフォーマッタ(一定の規約) — チーム開発品質チーム開発では「コードの書き方が人によってバラバラ」だとレビューや保守が大変になります。そこで コードスタイルの統一 と フォーマッタの利...
Java

Java 逆引き集 | 単体テストを意識した設計(DI, インターフェース分離) — テスト容易性

単体テストを意識した設計(DI, インターフェース分離) — テスト容易性単体テストをしやすくするための設計の基本が 依存注入(DI: Dependency Injection) と インターフェース...
Java

Java 逆引き集 | バージョン互換(Java のメジャーアップでの注意) — 移行計画

バージョン互換(Java のメジャーアップでの注意) — 移行計画大きな Java のアップグレードでは「非互換のポイント」を見逃すと本番障害に直結します。LTSの選び方、削除・非推奨機能、セキュリテ...
Java

Java 逆引き集 | Javadoc コメントの書き方 — API ドキュメント化

Javadocコメントの書き方 — APIドキュメント化Javadocは「コードからAPIドキュメント(HTML)を自動生成するためのコメント形式」。読み手に意図や契約を伝え、再利用性と保守性を高めま...
Java

Java 逆引き集 | サニタイズ(入力検証) — セキュリティと整合性

サニタイズ(入力検証) — セキュリティと整合性サニタイズ (sanitize) とは「外部から受け取った入力を安全に整える」こと。Webアプリや業務システムでは、ユーザー入力をそのまま使うと SQL...
Java

Java 逆引き集 | 最小特権の原則(アクセス制御) — セキュリティ基本

最小特権の原則(アクセス制御) — セキュリティ基本最小特権の原則 (Principle of Least Privilege) とは、「プログラムやユーザーに必要最小限の権限だけを与える」ことで、セ...
Java

Java 逆引き集 | toString の実装方針 — ログ/デバッグの可視化

toString の実装方針 — ログ/デバッグの可視化toString は「オブジェクトの状態を文字列で見える化」するための最重要メソッド。ログやデバッグで素早く状況把握できるよう、読みやすく・安全...
Java

Java 逆引き集 | equals / hashCode の正しい実装 — コレクションでの動作保証

equals / hashCode の正しい実装 — コレクションでの動作保証コレクション(HashSet/HashMap/HashTableなど)で正しく動かすには、equals と hashCod...
Java

Java 逆引き集 | 不変オブジェクトの作り方(Immutable) — スレッド安全

不変オブジェクトの作り方(Immutable) — スレッド安全「一度作ったら状態が変わらない」オブジェクトが不変(Immutable)。予期せぬ書き換えが起きないので、並行処理でも扱いやすく、コード...
Java

Java 逆引き集 | 依存注入(コンストラクタ注入の利点) — テスト容易性

依存注入(コンストラクタ注入の利点) — テスト容易性Javaでよく使われる設計パターンの一つが 依存注入(Dependency Injection, DI)。その中でも「コンストラクタ注入」は、テス...
Java

Java 逆引き集 | 簡単なユーティリティクラス作成(static メソッド) — 共通処理集約

簡単なユーティリティクラス作成(static メソッド) — 共通処理集約Javaでは「よく使う処理」を一箇所にまとめておくと便利です。そのために ユーティリティクラス を作り、static メソッド...
Java

Java 逆引き集 | 入出力のエンコーディング(UTF-8 など) — 文字化け防止

入出力のエンコーディング(UTF-8 など) — 文字化け防止文字化けの原因は「保存時の文字コード」と「読み込み時の文字コード」が一致していないこと。Javaでは 明示的にエンコーディングを指定するこ...
Java

Java 逆引き集 | 配列→コレクション変換(Arrays.asList 等) — API 互換

配列→コレクション変換(Arrays.asList 等) — API 互換Javaでは「配列」と「コレクション(List, Set, Mapなど)」がよく登場します。配列は固定長・基本的な構造、コレク...
Java

Java 逆引き集 | アルゴリズム基礎(ソート/検索の考え方) — パフォーマンス判断

アルゴリズム基礎(ソート/検索の考え方) — パフォーマンス判断プログラムでよく使う処理が ソート(並べ替え) と 検索(探す)。初心者がまず理解すべきは「どういう方法があるか」「どのくらい速いか(計...
Java

Java 逆引き集 | アサーション(assert) — デバッグ補助

アサーション(assert) — デバッグ補助Javaの アサーション(assert) は「プログラムの前提条件が正しいか」を実行時にチェックする仕組みです。バグを早期に発見するための補助機能であり、...
Java

Java 逆引き集 | リフレクション基礎(Class, Method) — フレームワーク開発/DI

リフレクション基礎(Class, Method) — フレームワーク開発/DIJavaの リフレクション(Reflection) は「クラスやメソッドを動的に調べたり呼び出したりする仕組み」です。通常...
Java

Java 逆引き集 | シリアライズ(Serializable の注意点) — 永続化/送受信

シリアライズ(Serializable の注意点) — 永続化 / 送受信Javaの シリアライズ は「オブジェクトをバイト列に変換して保存や送受信できるようにする」仕組みです。ファイル保存、ネットワ...
Java

Java 逆引き集 | リソース自動クローズ(try-with-resources) — リソース漏れ防止

リソース自動クローズ(try-with-resources) — リソース漏れ防止「使い終わったら必ず閉じる」を、言い忘れなく自動でやってくれる構文が try-with-resources。Java ...
Java

Java 逆引き集 | ロギングの基本(slf4j + Logback 等) — 運用ログ

ロギングの基本(slf4j + Logback 等) — 運用ログアプリケーションの「動作記録」を残すのがロギング。print文でのデバッグから卒業し、slf4j + Logback を使うと、運用に...
Java

Java 逆引き集 | 日付時間API(java.time: LocalDate/LocalDateTime/Duration) — 日時処理

日付時間API(java.time: LocalDate / LocalDateTime / Duration) — 日時処理日時は「正しく扱えるか」で品質が決まります。java.time(Java ...
Java

Java 逆引き集 | 文字列の正規表現(Pattern / Matcher) — テキスト検証

文字列の正規表現(Pattern / Matcher) — テキスト検証正規表現は「文字列がルールに合っているか」「欲しい部分だけ抜き出す」ための強力な道具。Javaでは java.util.rege...
Java

Java 逆引き集 | 型推論(var) — ローカル変数の簡潔化(Java 10+)

型推論(var) — ローカル変数の簡潔化(Java 10+)Java 10から導入された var は、ローカル変数の型をコンパイラに推論させる仕組みです。「型を明示しなくても、右辺から自動的に型が決...
Java

Java 逆引き集 | 可視性とパッケージ設計 — モジュール分離

可視性とパッケージ設計 — モジュール分離Javaでは アクセス修飾子(public / private / protected / default) と パッケージ構造 を組み合わせることで、コード...
Java

Java 逆引き集 | ワイルドカード(? extends / ? super) — API 汎用性

ワイルドカード(? extends / ? super) — API 汎用性Javaのジェネリクスには ワイルドカード という仕組みがあります。「型を柔軟に受け取る」ための記法で、APIの汎用性を高め...
Java

Java 逆引き集 | ジェネリクス基礎(型パラメータ) — 型安全なコレクション

ジェネリクス基礎(型パラメータ) — 型安全なコレクションJavaの ジェネリクス(Generics) は「型をパラメータ化」する仕組みです。コレクション(List, Map, Setなど)を使うとき...
Java

Java 逆引き集 | アノテーションの基礎(@Override 等) — メタ情報

アノテーションの基礎(@Override 等) — メタ情報Javaの アノテーション は「コードに付けるメタ情報(補足情報)」です。コンパイラやフレームワークに「この要素はこう扱ってほしい」と伝える...
Java

Java 逆引き集 | Enum の使い方(プロパティとメソッド) — 定数管理

Enum の使い方(プロパティとメソッド) — 定数管理「限られた選択肢」を型として安全に扱うのが enum。単なる定数集ではなく、プロパティやメソッドを持てる“小さなクラス”です。業務コードの「状態...
Java

Java 逆引き集 | 内部クラス(static / 非static / 匿名) — 小さなヘルパー実装

内部クラス(static / 非static / 匿名) — 小さなヘルパー実装Javaではクラスの中にさらにクラスを定義できます。これを 内部クラス(nested class) と呼びます。「外部ク...
Java

Java 逆引き集 | 抽象クラス vs インターフェース — API 設計の選択

抽象クラス vs インターフェース — API 設計の選択「共通の型をどう表すか」を決めるのが抽象クラスとインターフェース。どちらも“契約”を提供しますが、設計の狙いが少し違います。初心者でも迷わない...
Java

Java 逆引き集 | 継承とポリモーフィズム — 拡張性のある設計

継承とポリモーフィズム — 拡張性のある設計Javaのオブジェクト指向の柱が 継承 と ポリモーフィズム(多態性)。「共通部分を親にまとめる」「違いは子で表現する」ことで、拡張性と保守性が高まります。...
Java

Java 逆引き集 | クラス設計の基本(単一責任) — 保守性を高める

クラス設計の基本(単一責任) — 保守性を高める「クラスは、変わる理由を一つだけ持つ。」単一責任の原則は、この一文に尽きます。役割を一つに絞ると、変更の影響が限定され、読みやすくテストもしやすいコード...
Java

Java 逆引き集 | アクセス修飾子(public/private/protected/default) — カプセル化

アクセス修飾子(public / private / protected / default) — カプセル化Javaの アクセス修飾子 は「どこからそのクラスやメンバにアクセスできるか」を制御する仕...
Java

Java 逆引き集 | final の使い方(変数・クラス・メソッド) — 不変性確保

final の使い方(変数・クラス・メソッド) — 不変性確保Javaの final は「これ以上変更できない」という意味を持ちます。対象が 変数 か クラス か メソッド かによって効果が変わります...
Java

Java 逆引き集 | static とインスタンスの違い — 状態管理

Static とインスタンスの違い — 状態管理「static はクラスに属する」「インスタンスはオブジェクトに属する」。この一言が本質です。どの状態を“全体共有”にするか、“個別”にするかで、設計の...
Java

Java 逆引き集 | インスタンス生成(new)とファクトリパターンの基礎 — オブジェクト管理

インスタンス生成の基本(new)Javaでオブジェクトを作る最も基本的な方法は new。コンストラクタを呼び、必要な初期化を済ませて“使える状態”のインスタンスを得ます。class User { pr...
Java

Java 逆引き集 | 可変引数メソッド(…) - 汎用ユーティリティ

可変引数メソッド(...) — 汎用ユーティリティJavaでは、メソッドの引数の数が決まっていない場合に 可変長引数(varargs) を使えます。これにより「0個以上の引数」を柔軟に受け取ることがで...
Java

Java 逆引き集 | forEach とラムダの基本(簡単な処理) - 可読性向上

forEach とラムダの基本 — 可読性向上ラムダは「短く書ける無名の関数」、forEachは「コレクションの各要素に処理を当てる」ためのメソッドです。従来の for 文より読みやすく、意図が伝わり...
Java

Java 逆引き集 | List / Map / Set の基本概念(インターフェース) - データ構造選択

List / Map / Set の基本概念(インターフェース) — データ構造選択Javaのコレクションフレームワークには「データをどう扱うか」を決める基本インターフェースが用意されています。代表的...
Java

Java 逆引き集 | 配列(一次元・多次元) - 固定長データ処理

配列(一次元・多次元) — 固定長データ処理Javaの配列は「同じ型のデータをまとめて扱う箱」。サイズは固定で、宣言時に決めた長さを変えることはできません。一次元配列は「横一列」、多次元配列は「表や行...
Java

Java 逆引き集 | StringBuilder / StringBuffer - 文字列連結の効率化

StringBuilder / StringBuffer — 文字列連結の効率化文字列を何度も結合・加工する処理では、Stringの「不変性」が足かせになりがちです。StringBuilder と S...
Java

Java 逆引き集 | String 操作 - 表示・ログ処理

String 操作(concat, substring, format) — 表示・ログ処理文字列は「表示」「ログ」「メッセージ生成」で毎日のように使います。Javaの代表的な操作である concat...
Java

Java 逆引き集 | null/Optional の使い分け - NPE 回避、意図の明示

null/Optional の使い分け — NPE 回避、意図の明示Javaでよくあるバグの一つが NullPointerException (NPE)。「変数が null なのにメソッドを呼んでしま...
Java

Java 逆引き集 | カスタム例外の作り方 - 明確なエラー伝搬

カスタム例外の作り方 — 明確なエラー伝搬「何が問題か」を正確に伝えるのが例外の役割。標準例外だけでは業務の意図が伝わりにくい場面で、カスタム例外が活躍します。APIレイヤでは、呼び出し側が“何をどう...
Java

Java 逆引き集 | 例外処理(try / catch / finally) - 安定性と後始末

例外処理(try / catch / finally) — 安定性と後始末プログラムは「想定外のエラー」に出会うことがあります。ファイルが見つからない、数値が不正、ネットワークが切れる…。こうしたとき...
Java

Java 逆引き集 | 戻り値(参照/プリミティブ) - API レイヤ設計

戻り値(参照/プリミティブ) — API レイヤ設計メソッドは「処理の結果」を返すことができます。この結果を 戻り値 と呼びます。戻り値には プリミティブ型(int, double, boolean ...
Java

Java 逆引き集 | メソッド定義と引数(可変長引数) - 再利用可能ロジック

メソッド定義と引数(可変長引数) — 再利用可能ロジックプログラムを整理して「同じ処理を何度も使えるようにする」のが メソッド。引数は「外から渡す材料」。可変長引数は「材料の数が決まっていないとき」に...
Java

Java 逆引き集 | ループ(for / enhanced for / while) - 集合処理とレコードループ

ループ(for / enhanced for / while) — 集合処理とレコードループ同じ処理を繰り返すとき、Javaでは主に for、enhanced for(拡張 for)、while を使...
Java

Java 逆引き集 | 条件分岐(if / switch) - ビジネスロジックの分岐

条件分岐(if / switch) — ビジネスロジックの分岐プログラムは「状況に応じて処理を変える」ことが多いです。Javaでは代表的に if文 と switch文 を使います。初心者向けに「どんな...
Java

Java 逆引き集 | 型変換(キャスト、ボクシング/アンボクシング) - データ受け渡し時

型変換の概要(キャスト/ボクシング/アンボクシング)異なる型どうしでデータを受け渡すとき、Javaは「キャスト(型変換)」で数値型を変えたり、「ボクシング/アンボクシング」でプリミティブ型とラッパー型...
Java

Java 逆引き集 | 変数宣言(プリミティブ/参照型) - 型選びと初期化

変数宣言の基本Javaの変数は「型 名称 = 初期値;」の形で宣言します。型は“何を入れる箱か”を決めるもの。プリミティブ型は値そのものを、参照型は“モノが置いてある場所(アドレス)”を持ちます。//...
Java

Java | 「配列+ArrayList+多次元配列+toString / deepToString」総合バグ修正問題集

では今回は、「配列+ArrayList+多次元配列+toString / deepToString」総合バグ修正問題集(50問)」 を紹介します。初心者~中級者向けに、「間違いを見つけて修正する形式」...
Java

Java | 多次元配列+ArrayList:バグ修正問題集

では今回は、「多次元配列+ArrayList版のバグ修正問題」20問 を紹介します。配列と ArrayList を混ぜた問題で、初心者〜中級者向けに 間違いを見つけて修正する形式 にしています。問題 ...
Java

Java | Java初心者向け 配列操作 総まとめ教材

では、Java初心者向け「配列操作 総まとめ教材」 を作ります。対象は これから配列を学ぶ人 で、1次元・2次元・多次元・ArrayList・表示方法・よくある間違い を全部まとめた教材です。例題・図...
Java

Java | 配列と List の複雑ネストをまとめた ASCII 図+出力例付きの一覧

では、配列と List の複雑ネストをまとめた ASCII 図+出力例付きの一覧を作ります。これで「多次元・ネスト構造での println / toString / deepToString の挙動」...
Java

Java | フォールスルーのある switch を戦略パターンで安全に置き換える 練習問題

「フォールスルーのある switch を戦略パターンで安全に置き換える練習問題集」を用意しました。複数条件をまとめたいケースを題材にして、switch文のフォールスルーを戦略パターンへリファクタリング...
Java

Java | switch文リファクタ手法の比較

では「switch → 戦略パターン → enum+戦略 → Map+ラムダ」の流れを整理して、どの場面でどの手法を選ぶべきかを比較表にまとめますね。switch文リファクタ手法の比較手法特徴メリット...
Java

Java | switch文を戦略パターンにリファクタリングする練習問題

「switch文を戦略パターンにリファクタリングする練習問題」をいくつか用意しました。実務でありがちなケースを題材にしています。練習問題1:注文ステータス管理元コード(switch)switch (s...
Java

Java | フォールスルーを使わないで同じ挙動を実現するリファクタ例(戦略パターンなど)

「フォールスルーを使って複数条件をまとめる」代わりに、戦略パターン(Strategy Pattern)などの設計パターンを使うと、より柔軟で保守性の高いコードになります。戦略パターンでのリファクタ例元...
Java

Java | switch文のデバッグでフォールスルーを見つける方法

「switch文のデバッグでフォールスルーを見つける方法」ですね。実務でよくハマるポイントなので、整理してコツをまとめます。フォールスルーとは?breakを書き忘れると次のcaseまで処理が流れる現象...
Java

Java | 実務で使う switch 文のテンプレート集(例外・ログ対応つき)

「実務で使える switch 文のテンプレート集」を、例外処理やログ出力を組み込んだ形でまとめてみます。業務コードでは「ただ分岐する」だけでなく、異常系の扱いやログ記録が重要になるので、それを意識した...
Java

Java | if文・switch文の書き換えトレーニング

if文で書いた処理をswitch文に書き換える」ことで、条件分岐の理解が深まります。ここではトレーニング用の例題をいくつか用意して、if文 → switch文の変換を見ていきましょう。例題1:曜日表示...
Java

Java | 例外階層 × ロギング設計ベストプラクティス

では以下に、「例外階層 × ロギング設計ベストプラクティス」〜例外種別に応じたログレベル設計・運用テンプレート〜を、実務教材スタイル(クラス構造+設計思想+コード表+運用方針表) でまとめます。1. ...
Java

Java | 例外階層の設計テンプレート(アプリ全体で統一する例外方針)

「例外階層の設計テンプレート(アプリ全体で統一する例外方針)」は、チーム開発や長期運用の現場で必須の“例外ポリシー設計”です。ここでは、アプリ全体で共通化する例外階層図分類ルール(業務/システム/基盤...
Java

Java | 例外と早期returnの組み合わせテンプレート

「例外と早期 return の組み合わせテンプレート(業務クラス構造つき)」は、実務で“安全で読みやすくメンテしやすい”コードを書くための基本骨格です。ここでは、3層構造(Controller/Ser...
Java

Java | 三次元版ライフゲーム(セルオートマトン)

三次元版ライフゲーム(セルオートマトン)の例題「ライフゲーム」は二次元の格子でよく知られていますが、三次元に拡張すると「立方体の中で細胞が生きたり死んだりする」シミュレーションになります。初心者向けに...
Java

Java | 早期 return のベストパターン集

「早期 return のベストパターン集(実務例5選)」は、**「ネストを浅くして読みやすく、安全にする」**ための超重要テクニックです。初心者でも実務で即使えるように、👀 図解(ASCII)+ 💻 ...
Java

Java | 安全設計ベストプラクティス:returnで抜ける vs 例外を投げる

実務では「return で抜けるべきか」「throw(例外)で止めるべきか」は非常に重要な設計判断ポイントです。ここでは、安全設計ベストプラクティスとして、初心者でも理解できるように図+コード+判断基...
Java

Java | 実務対応版:「安全なリトライ処理テンプレート集(ログ+例外対応)」

これは「break を使ったループ制御+安全設計」を実務テンプレート化したものです。Java+SLF4J/Spring Boot想定で、そのまま業務コードに組み込みやすい形にしてあります。すべて 例外...
Java

Java | 実務でよく使う for → Stream 書き換え10パターン

ここでは、実務でよく使う「for文 → Stream API」書き換え10パターンを、初心者でも理解できるように、「for文(Before) → Stream(After)」形式でコード付きにまとめま...
Java

Java | 「Stream構文早見表(map/filter/groupingBy/sorted)」図解版

ここでは、Stream API の主要構文(map / filter / sorted / groupingBy など)を図解で理解できる早見表を作ります。「操作の意味」「処理の流れ」「例」を視覚的に...
Java

Java | Stream API 安全設計ベストプラクティス(例外・ログ対応)

ここでは、実務で使う Stream API の安全設計ベストプラクティスをまとめます。特に、例外処理・ログ出力・副作用回避・大規模データ対応にフォーカスしています。1️⃣ 基本ルール:副作用は極力避け...
Java

Java | for文 vs Stream API + 実務パターン集(図解ビジュアル版)

「for文フロー + Streamフロー + 実務パターン集」を 矢印・アイコン・カラー付きで一目で理解できる形 にします。┌───────────────┐│ データ入力 ││ List<Emplo...
Java

Java | 拡張 for 文 vs Stream API の処理フロー横並び比較図

では、「拡張 for 文 vs Stream API の処理フロー横並び比較図」 を作ります。これで どの処理がどこで行われているかを一目で理解できる教材 にします。例題:社員リストから「年齢 ≥ 2...
Java

Java | Stream API パイプライン図解

では、「filter → map → sorted → groupingBy」の一連パイプラインを図解で直感理解」できる教材を作ります。例題:社員リストを加工して部署ごとに名前を並び替え集計する入力デ...
Java

Java | 同じ処理を拡張 for 文と Stream API 両方で比較する図解

ここでは 「拡張 for 文」と 「Stream API」 で同じ処理を行った場合の流れを図解で比較します。初心者でも「どっちが何をしているか」を直感的に理解できるようにしました。例題:社員リストから...
Java

Java | for文 vs Stream API の比較+よく使うパターン集

では、これまで作った for文 vs Stream API の比較フロー と 実務でよく使う Stream API パターン集 を統合して、「現場でよくある処理例をすべて1枚で見れる初心者向け教材」 ...
Java

Java | 実務でよく使う Stream API パターン(filter/map/sorted/groupingBy)

では、実務でよく使う Stream API のパターン(filter / map / sorted / groupingBy / collect など)をまとめた1枚図 を作ります。初心者でも現場コー...
Java

Java | 「map/filter/sorted/groupingBy」だけを図解で理解する教材

では、「map / filter / sorted / groupingBy」を図解で直感的に理解する教材を作ります。文章だけでなく、処理の流れを矢印で表す図解スタイルで解説します。1. filter...
Java

Java | 「for-each+例外処理+ログ」のテンプレートをクラス構造で整理(実務クラス設計例)

ここでは「拡張for文(for-each)+例外処理+ログ出力」を組み合わせた、実務的なクラス構造テンプレートを示します。実際のプロジェクトでよく使う「データ処理+エラー対応+ログ管理」の構成をベース...
Java

Java | フラグ管理を使ったメニューのON/OFFを作るステップ実装

では ビット演算でフラグ管理をする実践例 を、ステップごとに初心者向けに作ってみましょう。今回は「メニューの ON/OFF」を管理する例です。1. 何を作るか3つの機能(メニュー)があります:音楽効果...
Java

Java | ビット演算・シフト演算の練習問題セット

それでは、プログラミング初心者向けにビット演算・シフト演算の練習問題セットを作り、採点付きWebテスト(HTML+JavaScript)形式にします。このテストのポイントビット演算(&, |, ^, ...
Java

Java | 逆順処理でよくあるバグ集

では「逆順処理でよくあるバグ(境界条件ミスや IndexOutOfBounds)」を整理してみます。1. 境界条件の off-by-one エラーfor (int i = arr.length - 1...
Java

Java | 実務で for文 と foreach/Stream をどう使い分けるか

for文 vs foreach / Stream の使い分けでは「実務で for文 と foreach/Stream をどう使い分けるか」の判断基準を整理します。1. インデックスが必要かどうか必要な...
Java

Java | 論理演算子を使った「採点付きミニ演習プログラム」

では、Java の論理演算子を使った「採点付きミニ演習プログラム」を作りましょう。このプログラムは、ユーザーが入力した点数をもとに「合格/不合格」や「特待生」などを判定します。論理演算子 &&, ||...
Java

Java | インクリメント/デクリメント理解度チェックテスト

Java理解度チェックテスト(インクリメント/デクリメント)ではこの「インクリメント/デクリメント理解度チェックテスト」を、Java コンソールアプリ形式でつくりましょう。初心者でもそのまま コピペし...
Java

Java | Java の型推論 var を使った実践例

ここでは、Java の型推論 var を使った実践例 5つを、初心者にも分かりやすく・実用的にまとめます。各サンプルはすぐ動かせるコード付きです。(Java 10以降対応)① ループ(for文)での ...
Java

Java | インクリメント/デクリメントを使わずに済ませる、よりモダンで安全な書き方

インクリメントを使わないモダンな書き方では「インクリメント/デクリメントを使わずに済ませる、よりモダンで安全な書き方」を紹介します。1. 拡張 for文(foreach)配列やリストを順番に処理するな...
Java

Java | レビューで「褒められる」インクリメントの使い方

レビューで褒められるインクリメントの使い方では「レビューで“褒められる”インクリメント/デクリメントの使い方(良い例集)」をまとめます。1. for文の基本形for (int i = 0; i < l...
Java

Java | 実際の現場でレビューで指摘されやすい「インクリメントのアンチパターン集」

インクリメント/デクリメントのアンチパターン集では「実務でレビューでよく指摘されるインクリメント/デクリメントのアンチパターン集」をまとめます。1. 条件式に直接書くwhile (i++ < arr....
Java

Java | インクリメント/デクリメントを安全に使うためのリファクタリング例(悪いコード → 良いコード)

インクリメント/デクリメントのリファクタリング例では「悪いコード → 良いコード」のリファクタリング例を紹介します。実務でありがちな“インクリメント/デクリメントの危険な使い方”を、安全で読みやすい形...
Java

Java | 実務でよくあるインクリメント関連のバグパターン

実務でよくあるインクリメント関連のバグパターンでは「実務でありがちなインクリメント忘れや境界条件ミス」の典型例を整理してみましょう。1. インクリメント忘れによる無限ループint i = 0;whil...
Java

Java | 実務でよく使うインクリメントの具体的なパターン集

実務でよく使うインクリメントのパターン集では「実務でよく使うインクリメントの具体的なパターン集」を整理してみましょう。1. for文のカウンタ最も典型的な使い方。配列やリストを順番に処理する。for ...
Java

Java | 実務で安全にインクリメント/デクリメントを使うための最善の方法

インクリメント/デクリメントのベストプラクティス集実務で安全にインクリメント/デクリメントを使うためのベストプラクティス集を整理しました。1. ループのカウンタは i++ に統一for (int i ...
Java

Java | オーバーフローを実験するJavaプログラム

では「オーバーフローを実験するJavaプログラム」を、初心者でも理解しやすいように作ってみましょう。(「オーバーフロー」とは、変数に入る最大の値を超えてしまったときに、値が反対側に回り込んでしまう現象...
Java

Java | 「オートボクシングでのパフォーマンス」や「キャッシュ範囲の仕組み(-128〜127)」をコードで実験

では ①キャッシュの仕組みの確認(-128〜127) と ②オートボクシングのパフォーマンス比較(プリミティブ vs ラッパー) を実験するための Java の実行可能なコード を用意します。手元のJ...
Java

Java | 複数の入力をまとめて List に格納するサンプル

ここでは 複数の入力をまとめて List<Integer> に格納するサンプル を紹介します。「Scannerで文字列として入力 → 数値に変換 → Listに追加」という流れです。サンプルコード:複...
Java

Java | 実際の入力処理(Scannerで文字列を読み込んで数値に変換する例

実際に ユーザー入力(文字列)を Scanner で受け取り → 数値に変換 → オブジェクトとして扱う 流れをまとめます。入力処理の基本(Scannerを使う)例1: 整数入力 → int と In...
Java

Java | 「NaN」「Infinity」など特殊値

Javaの特殊値とは?Javaでは、浮動小数点型(floatやdouble)に以下の特殊値が存在します:特殊値説明生成例Double.POSITIVE_INFINITY正の無限大1.0 / 0.0Do...
Java

Java | 全ラッパークラス(Integer, Double, Boolean, etc.)ごとの変換例まとめ表

Javaの 全ラッパークラス(基本型と対応するクラス)について、「文字列 ⇄ 数値 ⇄ オブジェクト」変換の代表例 を一覧表にまとめました。ラッパークラス変換パターン一覧基本型ラッパークラス文字列 →...
Java

Java | 文字列 ⇄ 数値 ⇄ ラッパークラスのオブジェクト

Javaの 「文字列 ⇄ 数値 ⇄ ラッパークラスのオブジェクト」 の変換パターンを、初心者でも見やすいように表にまとめました。変換パターン一覧表変換方向サンプルコード説明文字列 → 数値(基本型)i...
スポンサーリンク