Java入門

スポンサーリンク
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - セッション

セッションを一言でいうとセッションは「同じユーザーからの一連のリクエストを“ひとまとまり”として扱うためのサーバー側の仕組み」です。HTTP は本来「1 回 1 回がバラバラで、前後のつながりを覚えな...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - Cookie

Cookie を一言でいうとCookie は「ブラウザの中に一時的にメモしておける“名札・メモ用紙”」です。HTTP は本来「1 回 1 回のリクエストがバラバラで、前後のつながりを覚えていない」仕組...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - User-Agent

User-Agent を一言でいうとUser-Agent は「このリクエストを送っている“クライアントの正体”をサーバーに伝えるヘッダー」です。ブラウザなのか、スマホアプリなのか、Java のプログラ...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - Accept

Accept を一言でいうとAccept ヘッダーは「サーバーさん、レスポンスは“この種類のデータ”で返してくれると嬉しいです、という希望を伝えるヘッダー」です。クライアント(ブラウザやアプリ)が「J...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - Content-Type

Content-Type を一言でいうとContent-Type は「このボディの中身は“何の種類のデータ”かを相手に教えるためのヘッダー」です。中身が JSON なのか、HTML なのか、画像なのか...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - ボディの役割

ボディを一言でいうとHTTP のボディは「実際にやり取りしたい“中身そのもの”が入る場所」です。ヘッダーが「説明書」だとしたら、ボディは「商品そのもの」。ユーザー情報の JSON、HTML のページ、...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - ヘッダーの役割

ヘッダーを一言でいうとHTTP のヘッダーは「リクエストやレスポンスにくっついてくる“メタ情報(付加情報)”」です。本体(ボディ)が「中身」だとしたら、ヘッダーは「この中身は何なのか」「どう扱ってほし...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - パスパラメータ

パスパラメータを一言でいうとパスパラメータは「URL の一部として書かれる“ID などの変わる部分”」です。/users/1 の 1/products/123/reviews の 123みたいに、「ど...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - クエリパラメータ

クエリパラメータを一言でいうとクエリパラメータは「同じ URL の“条件やオプション”を指定するための追加情報」です。/users という「ユーザー一覧」というリソースに対して、「有効なユーザーだけ欲...
Java

Java | Web 基礎・HTTP・REST:HTTP 詳細 - URL 構造

URL を一言でいうとURL は「インターネット上の“場所”を指し示す住所」です。ブラウザやプログラムは、この URL を手がかりに「どのサーバーの」「どのサービスの」「どのデータを」取りに行けばいい...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - 安全なメソッド

「安全なメソッド」を一言でいうとHTTP でいう「安全なメソッド」は、「サーバー側の状態を変えないメソッド」 のことです。何回呼んでも、DB の中身が変わらない。新しいデータも増えないし、削除もされな...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - 冪等性

冪等性を一言でいうと冪等性(べきとうせい)は、「同じ操作を何回繰り返しても、最終的な結果が変わらない性質」のことです。1 回やっても、10 回やっても、「状態」が同じなら冪等。回数によって結果が変わる...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - PATCH

PATCH を一言でいうとPATCH は「このリソースの“一部だけ”を変えてほしいときに使うメソッド」です。PUT が「丸ごと上書きして」なら、PATCH は「ここだけ直して(パッチを当てて)」という...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - DELETE の役割

DELETE を一言でいうとDELETE は「この URL が指しているものを“消して”」とサーバーに頼むためのメソッドです。ユーザー削除商品削除お気に入り解除など、「そのリソース自体をなくす・無効に...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - PUT の役割

PUT を一言でいうとPUT は「この場所のデータを“丸ごとこの内容で上書きして”というメソッド」です。POST が「新しく作って」だとしたら、PUT は「ここにあるものを、このデータで置き換えて」で...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - POST の役割

POST を一言でいうとPOST は「サーバーにデータを送りつけて、“何かしらの処理をしてもらう”ためのメソッド」です。特に重要なのは、新しいデータ(リソース)を作成するサーバー側の状態を変えるという...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - GET の役割

GET を一言でいうとGET は「サーバーのデータを“読むだけ”のメソッド」です。「この URL の内容を見せて」「このデータを教えて」というときに使います。サーバー側の状態を変えない(書き換えない)...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - HTTP メソッド一覧

HTTP メソッドを一言でいうとHTTP メソッドは「この URL に対して、サーバーに何をしてほしいのか」を表す“動詞”です。同じ /users という URL でも、GET なら「取得したい」、P...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - リクエスト / レスポンス

リクエスト / レスポンスを一言でいうとHTTP の世界は、ものすごく乱暴に言うと「お願い」と「返事」だけでできています。ブラウザやアプリがサーバーに送る「お願い」がリクエスト、サーバーがそれに対して...
Java

Java | Web 基礎・HTTP・REST:HTTP 基礎 - HTTP プロトコル概要

HTTP プロトコルを一言でいうとHTTP は「ブラウザ(クライアント)と Web サーバーが会話するための“決まりごと(プロトコル)”」です。ブラウザが「このページください」「このデータください」と...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - SPA と MPA

SPA と MPA を一言でいうとSPA は Single Page Application(シングルページアプリケーション) の略で、「最初に 1 つのページを読み込んだあと、画面の中身だけを Ja...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - フロントエンド / バックエンド

フロントエンド / バックエンドを一言でいうとフロントエンドは「ユーザーの目に見える“表側”」。バックエンドは「見えないところで動いている“裏側の頭脳と心臓”」。あなたが Java で書くのは、基本的...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - 3 層アーキテクチャ

3 層アーキテクチャを一言でいうと3 層アーキテクチャは、「Web アプリを 3 つの役割にきれいに分けて作ろう」という設計の型 です。プレゼンテーション層(画面・API の入り口)アプリケーション層...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - 動的コンテンツ

動的コンテンツを一言でいうと動的コンテンツは、「リクエストのたびにサーバー側で中身を“その場で作って返すコンテンツ」 です。誰がアクセスしたかいつアクセスしたかどんな条件でアクセスしたかによって、返す...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - 静的コンテンツ

静的コンテンツを一言でいうと静的コンテンツは、「サーバー側で中身が変わらないファイルを、そのままブラウザに配るもの」です。HTML、CSS、画像(PNG/JPEG)、JavaScript ファイル、P...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - アプリケーションサーバー

アプリケーションサーバーを一言でいうとアプリケーションサーバーは「ビジネスロジックを本気で動かすための“Java 実行プラットフォーム”」だと思ってください。Web サーバーが「HTTP を受け取って...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - Web サーバーとは

Web サーバーを一言でいうとWeb サーバーは、「ブラウザ(クライアント)からの HTTP リクエストを受け取り、HTTP レスポンスを返す“受付兼配達係”」です。ブラウザが「このページください」「...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - ブラウザの役割

ブラウザの役割を一言でいうとブラウザは、「人間と Web の世界をつなぐ“通訳兼プレイヤー”」です。人間が URL を入力したりボタンを押したりすると、ブラウザがサーバーに HTTP リクエストを送り...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - クライアントとサーバー

クライアントとサーバーを一言でいうとクライアントとサーバーは、「お願いする側」と「応える側」です。ブラウザやスマホアプリが クライアント、そのリクエストを受け取って処理するのが サーバー。Web の世...
Java

Java | Web 基礎・HTTP・REST:Web 全体像 - Web アプリの仕組み

Web 全体像をざっくりつかむまずは「ブラウザで URL を開くと、裏で何が起きているのか」をイメージでつかみましょう。あなたがブラウザに と入力して Enter を押すと、ブラウザは「サーバー」に対...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – モダン Java 総復習

モダン Java 総復習のゴールここまで「設計・実務視点」でいろいろ見てきましたが、モダン Java を一言でまとめると、こういう世界観になります。「Java 8 以降の機能(ラムダ、Stream、O...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – 実務でよくある罠

「実務でよくある罠」とは何かここでいう「罠」は、コンパイルは通るし一見正しく動いているように見えるのに、本番や長期運用の中でじわじわ効いてきて、バグ・障害・保守地獄につながるポイントのことです。初心者...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – モダン構文の使い過ぎ問題

「モダン構文の使い過ぎ問題」とは何かJava には、ラムダ式、Stream API、Optional、record、switch 式、パターンマッチングなど、「モダンでカッコいい構文」がたくさんありま...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – 公開 API の互換性

公開 API の互換性とは何か公開 API の互換性とは、「一度公開した API を、後から変更しても利用者のコードが壊れないようにすること」です。ここでいう「利用者」は、あなたのクラスを呼び出す別の...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – API 設計観点

API 設計観点とは何かAPI 設計観点とは、「他の人(他のクラス・他の開発者・他のシステム)が使いやすく、安全で、誤解されないインターフェースをどう作るか」という視点のことです。Java の API...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – ライブラリ選定基準

ライブラリ選定基準とは何かライブラリ選定基準とは、「このプロジェクトでどの外部ライブラリを使うかを判断するためのルール」 のことです。Java の世界には膨大なライブラリがあります。便利なものもあれば...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – チーム内 Java 方針

チーム内 Java 方針とは何かチーム内 Java 方針とは、「このチームでは Java をこう使う」という“共通ルール・共通思想”のことです。コーディング規約が「書き方のルール」だとすれば、チーム内...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – コーディング規約統一

コーディング規約統一とは何かコーディング規約統一とは、「プロジェクト全員が同じ“書き方のルール”でコードを書くようにすること」です。これは単なる“見た目の統一”ではありません。読みやすさ、保守性、レビ...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – LTS バージョン

LTS バージョンを一言でいうとJava の LTS(Long-Term Support)バージョンは、「長期間サポートされる“安定版”の Java」です。実務で言うと、「会社やプロジェクトが“これを...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – バージョンアップ対応

バージョンアップ対応を一言でいうとJava のバージョンアップ対応は、「今ちゃんと動いているシステムを壊さずに、新しい Java(JDK/JRE)に乗り換えるための一連の作業」です。単に「JDK を入...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – 非推奨 API の扱い

「非推奨 API」とは何か非推奨 API(deprecated API)は、「今はまだ使えるけれど、将来は消えるかもしれない/使ってほしくない」と宣言された API のことです。Java では @De...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – レガシーコード対応

レガシーコード対応を一言でいうとレガシーコード対応は、「よく分からないけど本番で動いている古いコード」を、壊さずに理解し、少しずつ安全にマシな状態へ近づけていく作業です。「全部書き直したい」という気持...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – 古い Java との互換性

「古い Java との互換性」とは何を指しているか「古い Java との互換性」というとき、実は複数のレイヤーの話が混ざっています。コンパイルしたクラスファイルが、どのバージョンの JVM で動くかと...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – モダン Java の書き方

「モダン Java の書き方」とは何かここでいう「モダン Java」は、Java 8 以降で手に入った機能や考え方を前提にした書き方のことだと思ってください。昔ながらの「for 文だらけ・null だ...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – 可読性とパフォーマンスのバランス

「速いコード」より「分かるコード」が先まず大前提として、実務では「とにかく速いコード」より「読んで分かるコード」の方が価値が高いです。なぜかというと、ほとんどのコードは「読む時間>書く時間>実行時間」...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – defensive programming

defensive programming を一言でいうとdefensive programming(防御的プログラミング)は、「相手(呼び出し側や外部システム)が“ちゃんとしている”と期待しすぎない...
Java

Java | Java 詳細・モダン文法:設計・実務視点 – イミュータブル設計

イミュータブル設計を一言でいうとイミュータブル(immutable)は、「一度作ったら中身が変わらないオブジェクト」のことです。Java で一番有名なのは String です。String は rep...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – escape analysis

escape analysis を一言でいうとescape analysis(エスケープ解析)は、JIT コンパイラが「このオブジェクトはメソッドの外に“逃げる”か?」「このオブジェクトはスレッドの外...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – String プール

String プールを一言でいうとString プールは、「同じ内容の文字列を、JVM の中でできるだけ 1 個だけにまとめて共有する仕組み」です。Java の String は不変(immutabl...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – 不要なオブジェクト生成

「不要なオブジェクト生成」がなぜパフォーマンス問題になるのかJava では new しても GC が片付けてくれるので、「とりあえず new しとけばいいや」となりがちです。でも、オブジェクトを作るた...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – パフォーマンス測定

「なんとなく速そう」ではなく「数字で語る」がパフォーマンス測定パフォーマンス測定の一番大事なポイントは、「体感」や「勘」ではなく、数字で語ることです。「この実装の方が速い気がする」ではなく、「この処理...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – Stop The World

Stop The World を一言でいうとStop The World(STW)は、「JVM が何か重要な作業をするために、アプリケーションのスレッドを一時的に全部止めること」です。特に GC(ガー...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – GC の基本

GC を一言でいうと「いらなくなったオブジェクトの自動掃除屋」GC(Garbage Collection)は、「もう使われていないオブジェクトを、自動で見つけて捨ててくれる仕組み」です。C や C++...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – ヒープ / スタック

ヒープとスタックを「机」と「倉庫」でイメージするまずはイメージからいきましょう。スタックは「今やっている作業のための机」。ヒープは「作ったモノを置いておく大きな倉庫」。机(スタック)の上には、今呼び出...
Java

Java | Java 詳細・モダン文法:JVM・パフォーマンス – JVM メモリ構造

JVM メモリ構造をざっくり一枚の絵にするまずイメージからいきます。JVM のメモリは、大きく言うと次のような「部屋」に分かれています。ヒープ(Heap):new したオブジェクトが住む場所スタック(...
Java

Java | Java 詳細・モダン文法:並行・非同期 – 非同期例外処理

まず「非同期の例外」がなぜややこしいのか同期コードなら、try-catch で囲めばだいたい済みます。try { int x = doSomething(); // ここで例外が出たら catch に...
Java

Java | Java 詳細・モダン文法:並行・非同期 – allOf / anyOf

allOf / anyOf を一言でいうとCompletableFuture.allOf と CompletableFuture.anyOf は、「複数の非同期処理をまとめて扱うための“ハブ”」です。...
Java

Java | Java 詳細・モダン文法:並行・非同期 – thenApply / thenCompose

まず「何をつなぎたいのか」をはっきりさせるCompletableFuture を使うとき、thenApply と thenCompose の違いで必ずつまずきます。でも本質はシンプルで、こうです。「た...
Java

Java | Java 詳細・モダン文法:並行・非同期 – CompletableFuture 組み合わせ

CompletableFuture の「組み合わせ」をざっくり俯瞰するCompletableFuture の本質は「非同期処理を“値”として扱い、それらをつなぎ合わせること」です。単発で supply...
Java

Java | Java 詳細・モダン文法:並行・非同期 – ThreadPool 設計

ThreadPool を一言でいうと「スレッドの再利用工場」ThreadPool(スレッドプール)は、「あらかじめ何本かスレッドを作っておき、タスクをそこに流し込んで再利用する仕組み」です。毎回 ne...
Java

Java | Java 詳細・モダン文法:並行・非同期 – ExecutorService 詳細

ExecutorService を一言でいうとExecutorService は、「スレッドを自分で new せずに、“仕事(タスク)だけ渡して実行してもらう”ための仕組み」です。new Thread...
Java

Java | Java 詳細・モダン文法:並行・非同期 – happens-before

happens-before を一言でいうとhappens-before は、「この処理が終わってから、あの処理が“必ずその結果を見える形で”起きる」という“時間とメモリの順序”を表す言葉です。もっと...
Java

Java | Java 詳細・モダン文法:並行・非同期 – volatile の役割

volatile を一言でいうとvolatile は、「この変数の“最新の値”を、すべてのスレッドから必ず見えるようにする」ためのキーワードです。もっと砕くと、「CPU やスレッドごとのキャッシュにこ...
Java

Java | Java 詳細・モダン文法:並行・非同期 – synchronized の仕組み

synchronized は何を「約束」してくれるのかsynchronized は一言でいうと、「同じ場所を同時に触ろうとする複数スレッドを、順番待ちにさせる仕組み」です。もっと具体的に言うと、あるオ...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – マルチ catch

マルチ catch を一言でいうとマルチ catch は、「複数の例外型を、同じ 1 つの catch ブロックでまとめて処理できる構文」です。catch (IOException | SQLExce...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – ntry-with-resources 拡張

まず「元祖」try-with-resources をおさらいするtry-with-resources は、「使い終わったら必ず close() しなきゃいけないリソース(ファイル、ソケット、DB 接続...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – null 許容と switch

なぜ「null と switch」をちゃんと考えないといけないのかswitch は「値に応じて分岐する」構文ですが、その値が null になりうるかどうかを意識していないと、実行時にいきなり Null...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – instanceof の進化

instanceof の「進化」をざっくり俯瞰するinstanceof は、もともと「あるオブジェクトが、ある型のインスタンスかどうかを調べるための演算子」としてスタートしました。昔は「型チェック」と...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – パターンマッチング(instanceof)

パターンマッチング付き instanceof を一言でいうと「instanceof で型を調べたあと、すぐ下でキャストして変数に代入する」――この“二度書き”をまとめて一発で書けるようにした構文が、パ...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – sealed class

sealed class を一言でいうとsealed クラスは「このクラスを継承してよい“サブクラスの種類”を、あらかじめ限定する仕組み」です。継承を完全に禁止する final と違って、「継承は許す...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – レコード(record)

record を一言でいうとrecord は「フィールドを持つだけの“データ用クラス”を、最小限のコードで定義するための仕組み」です。equals / hashCode / toString / コン...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – テキストブロック

テキストブロックを一言でいうとテキストブロックは、"""(ダブルクォート3つ)で囲んで「複数行の文字列を、そのままの見た目で書ける」新しい文字列リテラルです(Java 15 以降で正式導入)。今までの...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – yield

yield を一言でいうとyield は、switch「式」の中で「この case ブロックから“この値を返す”」とコンパイラに伝えるためのキーワードです。return が「メソッドから値を返す」のに...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – switch 式(Java 14+)

switch 式とは何か(Java 14 以降の新しい switch)Java 14 以降では、switch が「文(statement)」だけでなく「式(expression)」としても使えるように...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – var(ローカル変数型推論)

var を一言でいうとvar は「型を書かなくても、右辺からコンパイラが型を推論してくれるローカル変数宣言」のためのキーワードです。「型がなくなる」のではなく、「型を書く手間を省く」だけで、コンパイル...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – 日付計算の注意点

日付計算が「思ったより難しい」理由日付計算は、一見「足し算・引き算だけ」に見えますが、実際には月末の長さの違い、うるう年、タイムゾーン、夏時間(DST)、日付の境界の扱いなど、落とし穴だらけです。ja...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – Clock

Clock を一言でいうとClock は「“今”をどう決めるかをカプセル化するためのオブジェクト」です。Instant.now() や LocalDateTime.now() が、裏側で「どの時計を使...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – Instant

Instant を一言でいうとInstant は「世界共通の“ある一瞬”を、UTC 基準で表したもの」です。人間が「2025年1月18日 10時(日本時間)」と考えるのに対して、Instant は「1...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – OffsetDateTime

OffsetDateTime を一言でいうとOffsetDateTime は「日付+時刻 + UTC からのズレ量(オフセット)」をセットで表すクラスです。ZonedDateTime が「タイムゾーン...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – TimeZone の扱い

まず「タイムゾーンって何者か」を整理するタイムゾーンは、ざっくり言うと「その場所の“ローカルな時刻”と、世界共通の時刻(UTC)をどう対応づけるかのルール」です。日本(Asia/Tokyo)は「UTC...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – 不変オブジェクトとしての日時

「不変な日時」ってどういうことかまず言葉からいきます。LocalDate や LocalDateTime、ZonedDateTime など java.time のクラスは「不変(immutable)」...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – DateTime API 設計思想

なぜ新しい DateTime API が必要だったのかまず一番大事な背景からいきます。Java 8 で導入された java.time(DateTime API)は、「古い日付 API(java.uti...
Java

Java | Java 詳細・モダン文法:Optional – フィールドに Optional を持たない理由

そもそも Optional は「フィールド用」に設計されていないまず大前提として押さえておきたいのは、Optional は「戻り値用のコンテナ」として設計されている、ということです。「値があるかもしれ...
Java

Java | Java 詳細・モダン文法:Optional – Optional の誤用例

なぜ「Optional の誤用」を意識する必要があるのかOptional は「null を安全に扱うための道具」ですが、使い方を間違えると、むしろコードが読みにくくなったり、バグの温床になったりします...
Java

Java | Java 詳細・モダン文法:Optional – Optional.orElseThrow

Optional.orElseThrow を一言でいうとOptional.orElseThrow は「中身があればその値を返し、なければ“ここで失敗だ”と明示的に例外を投げる」ためのメソッドです。「こ...
Java

Java | Java 詳細・モダン文法:Optional – Optional.filter

Optional.filter を一言でいうとOptional.filter は「中身が“あるときだけ”条件をチェックし、条件を満たさなければ空にしてしまう」ためのメソッドです。Stream の fi...
Java

Java | Java 詳細・モダン文法:Optional – Optional.flatMap

Optional.flatMap を一言でいうとOptional.flatMap は「中身が“あるときだけ”、Optional を返す関数を適用し、その二重になった Optional を平らにして返す...
Java

Java | Java 詳細・モダン文法:Optional – Optional.map

Optional.map を一言でいうとOptional.map は「中身が“あるときだけ”変換し、なければ何もしないで空のまま返す」ためのメソッドです。null チェックしてからメソッドを呼ぶ、とい...
Java

Java | Java 詳細・モダン文法:Optional – null 排除設計

「null 排除設計」を一言でいうと「null 排除設計」は、“アプリケーションの中を null が自由に歩き回らないようにする設計”です。完全に null をゼロにするのは現実的ではありませんが、「...
Java

Java | Java 詳細・モダン文法:Optional – Optional 設計思想

Optional が生まれた一番大きな理由Optional が Java に入ってきた一番の理由は、「null による事故を減らしたい」これに尽きます。Java の世界では長いあいだ、「値がないこと」...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – imperative vs declarative

「命令的」と「宣言的」をざっくり一言でいうと命令的(imperative)は、「どうやってやるか」を一歩一歩、自分で指示していく書き方です。宣言的(declarative)は、「何をしたいか」だけを宣...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – forEach の落とし穴

forEach を一言でいうとforEach は「Stream の最後に、要素 1 つずつに対して“なにかする”ための終端操作」です。System.out.println したり、外部のリストに追加し...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – 例外処理と Stream

なぜ「例外処理と Stream」が難しく感じるのかStream は「関数型っぽく、処理の流れを宣言的に書く」ための仕組みです。一方で Java の例外は「throw して try-catch で受ける...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – Optional と Stream 設計

Optional と Stream を一緒に考える理由Java でモダンなコードを書くとき、Optional と Stream はセットで設計を考えると一気にきれいになります。どちらも「要素があるかも...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – downstream collector

downstream collector ってそもそも何?downstream collector は、日本語にすると「下流の Collector」です。でも名前よりもイメージが大事で、ざっくり言うと...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – partitioningBy

partitioningBy を一言でいうとCollectors.partitioningBy は、Stream の要素を「ある条件を満たすかどうか(true / false)」で きっちり 2 つの...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – groupingBy 複数キー

「groupingBy 複数キー」でやりたいことのイメージCollectors.groupingBy の「複数キー」は、ざっくり言うと「1 つの条件じゃなくて、2 個以上の条件の組み合わせでグループ分...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – Collector の自作

Collector 自作のゴールをまずイメージするCollector を自作する、というのは「Stream の要素を、標準の toList や groupingBy では表現しづらい“自分専用の集め方...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – collect の仕組み

collect を一言でいうとcollect は、「Stream に流れてきた要素たちを、“コンテナ(List / Set / Map など)や集計結果”にまとめ上げるための終端操作」です。reduc...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – reduce

reduce を一言でいうとStream#reduce は、「ストリームに流れてくる複数の要素を、“1 つの値”に畳み込むための終端操作」です。全部を 1 つに“まとめる”イメージです。合計を出す、最...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – allMatch / anyMatch

allMatch / anyMatch を一言でいうとallMatch と anyMatch は、「Stream の要素が“条件を満たしているかどうか”を、真偽値で答える終端操作」です。allMatc...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – findFirst / findAny

findFirst / findAny を一言でいうとfindFirst と findAny は、「Stream の中から“1 件だけ”要素を取り出すための終端操作」です。どちらも戻り値は Optio...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – limit / skip

limit / skip を一言でいうとlimit と skip は、どちらも 「ストリームから流れてくる要素の“範囲”を切り取るための中間操作」 です。ざっくり言うと、limit(n) は「先頭から...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – sorted

sorted を一言でいうとStream#sorted は、ストリームに流れてくる要素を「並べ替えた新しいストリーム」を返す中間操作です。「順番を整える係」が sorted だと思ってください。sor...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – distinct

distinct を一言でいうとStream#distinct() は、「ストリームの中から“重複している要素”を取り除き、“一意な要素だけ”を残す中間操作」 です。イメージとしては、「同じ値が何回も...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – flatMap の用途

flatMap を一言でいうとStream#flatMap は、「1 つの要素から“0 個以上の要素の流れ(Stream)”を作り、それらを 1 本のストリームに“平らに”つなげる中間操作」です。ma...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – map の設計

map を一言でいうとStream#map は、「ストリームの各要素に“変換処理”を 1 回ずつ適用し、その結果から“新しいストリーム”を作る中間操作」 です。元の要素を別の形にしたいとき――文字列を...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – filter の設計

filter を一言でいうとStream#filter は、「流れてくる要素のうち、“条件を満たすものだけ”を次のステップに通す中間操作」 です。SQL でいう WHERE 句に近いイメージで、tru...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – 中間操作と終端操作

中間操作と終端操作を一言でいうとStream API の「中間操作」と「終端操作」は、“流れをつくる操作(中間)” と “流れを終わらせて結果を取り出す操作(終端)”という役割分担になっています。この...
Java

Java | Java 詳細・モダン文法:Stream API 深掘り – Stream パイプライン

Stream パイプラインを一言でいうとStream パイプラインは、「データの流れを、生成 → 中間操作 → 終端操作 という“流れ(パイプライン)”としてつなげて書くスタイル」です。for 文でゴ...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – ラムダのスコープ

ラムダのスコープを一言でいうとラムダ式の「スコープ」は、「ラムダ式の“中から”“外のどこまで”見えるのか・アクセスできるのか」という話です。ここをちゃんと理解していないと、「ローカル変数をラムダの中で...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – コンストラクタ参照

コンストラクタ参照を一言でいうとコンストラクタ参照(ClassName::new)は、「new クラス名(...) を、そのまま“関数”として渡すための短い書き方」です。ラムダ式で書くと() -> n...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – メソッド参照

メソッド参照を一言でいうとメソッド参照(::)は、「すでに存在するメソッドやコンストラクタを、“ラムダ式の代わりに”そのまま関数として渡すための短い書き方」です。例えば、names.forEach(s...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – Supplier

Supplier を一言でいうとjava.util.function.Supplier<T> は、「引数は何も受け取らずに、T 型の値を 1 つ“供給する(用意してくれる)”関数」を表す関数型インター...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – Consumer

Consumer を一言でいうとjava.util.function.Consumer<T> は、「T 型の値を 1 つ受け取って“何かする”けれど、結果(戻り値)は返さない関数」 を表す関数型インタ...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – Function

Function を一言でいうとjava.util.function.Function<T, R> は、「T 型の値を 1 つ受け取って、R 型の値を 1 つ返す“変換処理”を表す関数型インターフェー...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – Predicate

Predicate を一言でいうとjava.util.function.Predicate<T> は、「T 型の値を 1 つ受け取って、true / false を返す“条件判定関数”を表す関数型イン...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – @FunctionalInterface

@FunctionalInterface を一言でいうと@FunctionalInterface は、「このインターフェースは“関数型インターフェース”として使うつもりですよ」とコンパイラに宣言するた...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – 関数型インターフェース

関数型インターフェースを一言でいうと関数型インターフェースは、「たった1つだけ“抽象メソッド”を持つインターフェースで、その1つのメソッドを“関数”として扱うための入れ物」です。ラムダ式は「単体では宙...
Java

Java | Java 詳細・モダン文法:ラムダ式・関数型 – ラムダ式の構文

ラムダ式とは何か(まずイメージから)ラムダ式は、Java 8 から入った「小さな“処理そのもの”を値として書くための記法」です。「このタイミングで、こういう処理を実行してほしい」という“やりたいこと”...
Java

Java | Java 詳細・モダン文法:ジェネリクス – ジェネリクスの制約

「ジェネリクスの制約」を一言でいうとJava のジェネリクスには、「こう書けたら便利そうだけど、仕様上あえて禁止されていること」 がいくつもあります。new T() が書けないT[](ジェネリック配列...
Java

Java | Java 詳細・モダン文法:ジェネリクス – ジェネリクスメソッド

ジェネリクスメソッドを一言でいうとジェネリクスメソッドは、「メソッドの“中だけ”で使える型パラメータを宣言して、そのメソッドを型安全に汎用化する仕組み」です。public static <T> T f...
Java

Java | Java 詳細・モダン文法:ジェネリクス – PECS 原則

PECS 原則を一言でいうとPECS 原則は、ジェネリクスのワイルドカードを使うときの合言葉です。Producer Extends, Consumer Super「値を“生産する(取り出す)側”には ...
Java

Java | Java 詳細・モダン文法:ジェネリクス – 下限境界(super)

下限境界(super)を一言でいうとジェネリクスの下限境界 ? super T は、「このコレクションは T か、その“親クラスたち”のどれかを要素型として持つ。だから、T を入れるのは安全だよ」と宣...
Java

Java | Java 詳細・モダン文法:ジェネリクス – 上限境界(extends)

上限境界(extends)を一言でいうとジェネリクスの上限境界(extends)は、「この型パラメータには、あるクラス T か、そのサブクラスだけを許可します」と制限をかけるための仕組みです。<T e...
Java

Java | Java 詳細・モダン文法:ジェネリクス – ワイルドカード(?)

ワイルドカード(?)を一言でいうとジェネリクスのワイルドカード ? は、「ここには“何らかの型”が入るけど、具体的な型は気にしない・決めたくない」というときの “あいまいな型パラメータ”です。List...
Java

Java | Java 詳細・モダン文法:ジェネリクス – ジェネリクスと配列の違い

テーマの全体像を先にまとめるジェネリクス(List<String> など)と配列(String[])は、どちらも「同じ型の要素をたくさん持つ」ために使いますが、中身のルールやチェックのタイミングがかな...
Java

Java | Java 詳細・モダン文法:ジェネリクス – 型消去の概念

型消去を一言でいうと型消去(type erasure)は、「ジェネリクスの <T> みたいな型情報は“コンパイル時だけ”に使われて、コンパイル後のクラスファイル(実行時)からは消えてしまう」という仕組...
Java

Java | Java 詳細・モダン文法:ジェネリクス – 型パラメータの宣言

「型パラメータの宣言」を一言でいうと型パラメータの宣言は、「クラスやメソッドの“名前の横に” <T> などを書いて、ここには後で具体的な型をはめ込みますよ、と宣言すること」です。class Box<T...
Java

Java | Java 詳細・モダン文法:ジェネリクス – ジェネリクスとは

ジェネリクスを一言でいうとジェネリクス(generics)は、「クラスやメソッドの中に “型の穴” を開けておいて、使うときにその穴に好きな型をはめられる仕組み」です。List<String> や M...
Java

Java | Java 標準ライブラリ:CompletableFuture 基礎

CompletableFuture を一言でいうとCompletableFuture は、「将来終わる“非同期の計算結果”を表す箱(Future)に対して、『終わったらこれをして、その後これをして…』...
Java

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

Future を一言でいうとjava.util.concurrent.Future は、「別スレッドで走っている“将来の計算結果”を受け取るための“約束の箱”」です。時間のかかる処理を Executo...
Java

Java | Java 標準ライブラリ:ExecutorService 概要

ExecutorService を一言でいうとExecutorService は、「スレッドを自分で new せずに、”仕事(タスク)だけ” を投げれば、いい感じに別スレッドで実行してくれる仕組み」で...
Java

Java | Java 標準ライブラリ:Timer / TimerTask

Timer / TimerTask を一言でいうとTimer と TimerTask は、「指定した時間後に、あるいは一定間隔で、“別スレッドで” 処理を実行してくれるシンプルなタイマー機能」です。「...
Java

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

Base64 を一言でいうとjava.util.Base64 は、「バイナリデータ(画像・PDF・任意のバイト列)を、テキスト(英数字+記号)だけで安全にやり取りできるように変換するためのクラス」です...
Java

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

UUID を一言でいうとjava.util.UUID は、「ほぼ絶対に重ならない“ランダムな ID” を簡単に作るためのクラス」です。データベースの主キー、ファイル名、トークン、セッションID など、...
Java

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

Locale を一言でいうとjava.util.Locale は「このユーザー(or この処理)は、どの言語・どの国・どの地域のルールで動けばいいのか」を表すための“タグ”です。英語なら en、日本語...
Java

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

ResourceBundle を一言でいうとjava.util.ResourceBundle は、「画面メッセージや文言を、言語ごと・国ごとに切り替えるための仕組み」です。アプリのソースコードに日本語...
Java

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

Properties クラスを一言でいうとjava.util.Properties は、「文字列のキーと文字列の値を、設定ファイル的に管理するためのクラス」です。ざっくり言うと、Map<String,...
Java

Java | Java 標準ライブラリ:StackTrace の読み方

StackTrace を一言でいうとStackTrace(スタックトレース)は、「例外が発生したときに、そのときの『呼び出し履歴』を上から順に全部並べたもの」です。どのクラスの、どのメソッドの、どの行...
Java

Java | Java 標準ライブラリ:RuntimeException を使う判断

RuntimeException を一言でいうとRuntimeException は、「“呼び出し側に明示的な例外処理を強制したくはないが、異常はちゃんと知らせたい” ときに使う例外の親クラス」です。...
Java

Java | Java 標準ライブラリ:カスタム例外

カスタム例外を一言でいうと「カスタム例外」は、自分のアプリやライブラリ専用の例外クラスを新しく定義して、エラーの意味を分かりやすく、扱いやすくするためのものです。NullPointerExceptio...
Java

Java | Java 標準ライブラリ:非チェック例外

非チェック例外を一言でいうと「非チェック例外(unchecked exception)」は、“コンパイラが try-catch や throws 宣言を強制してこない例外”かつ“たいていはプログラマー...
Java

Java | Java 標準ライブラリ:チェック例外

チェック例外を一言でいうと「チェック例外(checked exception)」は、“この失敗は普通に起こりうるから、呼び出し側でちゃんと対処を考えろ” とコンパイラが迫ってくる例外です。ファイルがな...
Java

Java | Java 標準ライブラリ:例外階層構造

例外階層構造を一言でいうとJava の「例外階層構造」は、「エラーの種類を、親子関係(クラスの継承)で整理した“族譜”」です。この“族譜”を理解しておくと、どの例外をキャッチすべきかどこで throw...
Java

Java | Java 標準ライブラリ:NIO と IO の違い

「IO」と「NIO」をざっくり一言でいうとまず一番上のイメージだけ先に置きます。従来の java.io は、「ストリームを通して、データを順番に流す I/O(線でつながったイメージ)」java.nio...
Java

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

BufferedWriter を一言でいうとBufferedWriter は、「文字をいったんバッファ(メモリ)に貯めてから、まとめて出力ストリームに書き込むことで、高速にテキストを書き込むためのクラ...
Java

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

BufferedReader を一言でいうとBufferedReader は、「文字をまとめて内部バッファに貯めながら、“行単位で”効率よく読み取るための Reader」です。ファイルやネットワークか...
Java

Java | Java 標準ライブラリ:try-with-resources

try-with-resources を一言でいうとtry-with-resources は、「使い終わったら必ず close() しなきゃいけないものを、自動で確実に閉じてくれる try 文の書き方...
Java

Java | Java 標準ライブラリ:Files.copy

Files.copy を一言でいうとFiles.copy は、「ファイル(またはディレクトリ)の中身を、別の場所にコピーするためのメソッド」です。「あるパスのものを、別のパスへコピーしたい」「入力スト...
Java

Java | Java 標準ライブラリ:Files.lines

Files.lines を一言でいうとFiles.lines は、「テキストファイルを 1 行ずつ“ストリームとして”読み出すためのメソッド」です。Files.readAllLines が「全部いっぺ...
Java

Java | Java 標準ライブラリ:Files.readAllLines

Files.readAllLines を一言でいうとFiles.readAllLines は、「テキストファイルを“まるごと読み込んで”、1行ずつ List<String> にして返してくれるメソッド...
Java

Java | Java 標準ライブラリ:Path / Paths

Path / Paths をざっくり一言でいうとPath は、「ファイルやディレクトリまでの“道順(パス)”を表すオブジェクト」です。Paths は、「Path を作るための “工場(ファクトリ)クラ...
Java

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

File クラスをざっくり一言でいうとjava.io.File は、「ディスク上の “ファイル or ディレクトリ” を指し示すための “住所カード”」です。ここがとても大事で、File 自体は「中身...
Java

Java | Java 標準ライブラリ:ファイル入出力概要

Java のファイル入出力をざっくり一言でいうとJava の「ファイル入出力(I/O)」は、「ディスク上のファイルに、プログラムから文字やバイトを読み書きするための仕組み」です。初心者のうちに、まず次...
Java

Java | Java 標準ライブラリ:Period と Duration

Period と Duration をざっくり一言でいうとPeriod と Duration は、どちらも「時間の長さ」を表すクラスですが、何を基準にしているかがまったく違います。Period … 年...
Java

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

DateTimeFormatter をざっくり一言でいうとDateTimeFormatter は、「LocalDate / LocalTime / LocalDateTime / ZonedDateT...
Java

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

ZonedDateTime をざっくり一言でいうとZonedDateTime は、「日付(年・月・日)+時刻(時・分・秒)+タイムゾーン」をまとめて表現するクラスです。LocalDateTime が「...
Java

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

LocalDateTime をざっくり一言でいうとLocalDateTime は、「日付(年・月・日)+時刻(時・分・秒)」を、タイムゾーンなしで表すクラスです。LocalDate が「日付だけ」Lo...
Java

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

LocalTime をざっくり一言でいうとLocalTime は、「日付もタイムゾーンもいらない、“純粋な時刻(時・分・秒だけ)”」を表すクラスです。朝 9 時に開店、12 時に休憩開始、18 時に閉...
Java

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

LocalDate をざっくり一言でいうとLocalDate は、「タイムゾーンも時刻も持たない、“純粋な日付(年・月・日だけ)”」をあつかうためのクラスです。誕生日、締切日、営業日、請求日など、「そ...
Java

Java | Java 標準ライブラリ:Date の問題点

なぜ「Date の問題点」を知っておくべきかJava の古い日付・時刻 API(java.util.Date / java.util.Calendar)は、長年「バグを生みやすい」「直感とズレている」...
Java

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

parallelStream を一言でいうと何かparallelStream() は、「Stream の処理を、CPU の複数コアを使って“自動で並列実行してくれるモード”」です。list.strea...
Java

Java | Java 標準ライブラリ:Stream の再利用不可性

Stream が「再利用できない」ってどういうことかまず結論から言うと、Java の Stream は「一度“流して”終端操作を呼んだら、そのストリームは二度と使えない(使い捨て)」という性質を持って...
Java

Java | Java 標準ライブラリ:Stream の遅延評価

「遅延評価」をざっくりイメージするまず感覚から固めます。Stream の「遅延評価(lazy evaluation)」とは、「stream().filter().map() と“パイプラインを組み立て...
Java

Java | Java 標準ライブラリ:Optional と Stream の併用

なぜ「Optional と Stream の併用」が話題になるのかOptional と Stream、どちらも「null を避けつつ、宣言的に書く」ための道具です。でも実務でコードを書き始めると、こう...
Java

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

joining をざっくり一言でいうとCollectors.joining は、「Stream の中の文字列たちを、1 本の文字列に“つなげて”まとめるための Collector」です。collect...
Java

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

groupingBy をざっくり一言でいうとCollectors.groupingBy は、「Stream の要素を、ある“キー”ごとにグループ分けして Map にまとめる ための仕組み」です。イメー...
Java

Java | Java 標準ライブラリ:Collectors.toList

Collectors.toList をざっくり一言でいうとCollectors.toList() は、「Stream の結果を List に集め直すための“まとめ方テンプレ”」です。stream()....
Java

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

collect の役割をざっくりイメージするStream の collect は一言でいうと、「ストリームの“流れ”を、最終的な入れ物や形(List・Set・Map・1つの値など)にまとめる操作」です...
Java

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

flatMap をざっくりイメージするまず、一番大事な感覚から。map は「1つの要素 → 1つの値」に変換する操作でした。flatMap は「1つの要素 → 0個以上の“複数要素”」に変換して、最後...
Java

Java | Java 標準ライブラリ:filter 操作

filter 操作をざっくりイメージするStream の filter は、一言でいうと「流れてくる要素の中から、条件に合うものだけを通し、合わないものを捨てる 操作」です。大事なポイントはこの 3 ...
Java

Java | Java 標準ライブラリ:map 操作

「map 操作」をざっくりイメージするStream の map は、一言でいうと「流れてくる要素を、別の値に変換して流し直す 操作」です。元の要素数は変えない1 個入ったら、必ず 1 個出てくる「中身...
Java

Java | Java 標準ライブラリ:Stream の生成

「Stream の生成」をざっくりイメージするStream API の最初の一歩は、「そもそも Stream をどうやって作るか」です。filter や map は、その前に「Stream がある」こ...
Java

Java | Java 標準ライブラリ:Stream API 概要

Stream API をざっくりイメージするまず感覚から先に。Stream API は、「配列やコレクションなど“データの列”に対して、 “何をしたいか”を宣言的に書けるパイプライン」です。for 文...
Java

Java | Java 標準ライブラリ:Collections.unmodifiableList

Collections.unmodifiableList の役割をざっくりつかむCollections.unmodifiableList は、「この List、“見たり読むのはいいけど、書き換えは禁止...
Java

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

Collections.sort の役割をざっくりつかむCollections.sort は、「List の中身を並び替えるための標準メソッド」です。配列には Arrays.sort がありましたよね...
Java

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

Comparable をざっくりイメージするまず一言でまとめると、Comparable は「このクラスの“標準の並び順”はこうです」と自分自身で宣言するためのインターフェースです。String なら「...
Java

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

Comparator の役割をざっくりイメージするComparator は一言でいうと、「オブジェクト同士を“どういう順番で並べるか”を後付けで教えるためのオブジェクト」です。int や String...
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 仮想...
スポンサーリンク
タイトルとURLをコピーしました