Java SEを網羅的にカバーした技術記事シリーズ

### 自己紹介

皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また以下のような書籍も執筆しています。
* [「マスタリング Java EE 5」（2007年）](https://amzn.asia/d/j0txqK5)
* [「アプリケーションアーキテクチャ設計パターン」（2017年）](https://amzn.asia/d/9avaCyF)

いずれも**Java EE**（**Jakarta EE**）を中心にした企業システム開発のための書籍です。中でも [「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)は、（Javaに限定されない）比較的普遍的なテーマを扱っており、内容的にはまだまだ陳腐化していないため、興味のある方は是非手に取っていただけると幸いです（中級者向け）。

### Udemy講座のご紹介

この一連の記事の内容は、私が講師を務めるUdemy講座『**Java Basic編**』および『**Java Advanced編**』と同じ範囲をカバーしています。
* 『**Java Basic編**』はこちらの[**リンク**](https://www.udemy.com/course/learn-java-se-basic/?referralCode=594C958456356851C97C)から購入できます。
* 『**Java Advanced編**』はこちらの[**リンク**](https://www.udemy.com/course/learn-java-se-advanced/?referralCode=842152129A73A717FE6B)から購入できます。

これらのコースは、**セールス対象外のためタイミングを気にすることなく購入可能**です。

また私の方では、**定価の約30%OFFで購入できるクーポン**を定期的に発行しています。クーポンはQiita内の他記事で発行していますので、興味のある方は、ぜひ私の他の記事をチェックしてみてください。

### Java SEを網羅的にカバーした技術記事シリーズについて

今般、Java SEの膨大なテクノロジー領域を、広くそして深くカバーした一連の技術記事をQiitaに投稿しました。
これらの一連の記事は、私が講師を担当するUdemy講座『Java Basic編』と『Java Advanced編』と同じ範囲をカバーしています。
シリーズ全体の構成と範囲、各記事へのリンク先は以下のとおりです。

|Udemyコース|分類|チャプター|チャプター概要|
|:--|:--|:--|:--|
|Java Basic編|1 Javaの概要|[1.1 Javaの概要](https://qiita.com/KenyaSaitoh/items/22f32b9d7aea5844d779)|Javaを学ぶべき理由や、今日に至るまでの歴史、プログラミング言語としての特性などについて|
|||[1.2 Javaの開発環境](https://qiita.com/KenyaSaitoh/items/0cc6025e54a5f023cfca)|Javaプログラムの開発や実行に必要なツール類や環境、それらをセットアップする方法などについて|
|||[1.3 Javaのエディションとバージョン](https://qiita.com/KenyaSaitoh/items/c2f6ddda0125a149dbe2)|Javaの3つのエディションや、Javaがバージョンアップのたびにどのような機能を追加してきたのかについて|
||2 Hello World|[2.1 Javaプログラムの基本と"Hello, World!"](https://qiita.com/KenyaSaitoh/items/3ca40ec9b7ddef75012a)|テキストエディタを用いて最も基本的なJavaプログラム（"Hello, World!"）を作成し、動作させる方法|
|||[2.2 Eclipseによる基本的な開発](https://qiita.com/KenyaSaitoh/items/bb6161f70b1ff22e5c89)|Eclipse（Pleiades）を用いて、簡単なJavaプログラムを作成し動作させる方法|
||3 変数とリテラル|[3.1 変数とデータ型](https://qiita.com/KenyaSaitoh/items/acfd83ec90e99d719d71)|Javaプログラミングの最も基本的な概念である変数と、変数に格納する値の種類を表すデータ型について|
|||[3.2 リテラル](https://qiita.com/KenyaSaitoh/items/58f82a8ccde3b2e3712c)|リテラルすなわち様々なデータの「表記方法」について|
|||[3.3 変数と型に関する様々な言語仕様](https://qiita.com/KenyaSaitoh/items/0cba76c8cb056ca70aef)|プリミティブ型変数と文字列型変数に関連する様々な言語仕様をさらに深掘り|
||4 演算子|[4.1 演算子](https://qiita.com/KenyaSaitoh/items/151d068cef70aa2f8ac5)|変数やリテラルに対して様々な処理を行うための演算子について|
||5 配列と参照型|[5.1 配列](https://qiita.com/KenyaSaitoh/items/ddc7d8e3442fd22a1d75)|データをまとめて管理する仕組みである配列について|
|||[5.2 参照型変数とnull値](https://qiita.com/KenyaSaitoh/items/f981f19b55ae477e5915)|参照型変数の考え方や、初期値であるnull値について|
||6 制御構文|[6.1 制御構文の概要](https://qiita.com/KenyaSaitoh/items/07e820abb887585c6dfc)|構造化プログラミングの特徴である制御構文の概要について|
|||[6.2 条件分岐](https://qiita.com/KenyaSaitoh/items/3ce5c6473594a6dcdbd0)|制御構文の一つである条件分岐の実装方法について|
|||[6.3 繰り返し](https://qiita.com/KenyaSaitoh/items/ae37c4d7b38bec9c1601)|制御構造の一つである繰り返しすなわちループの実装方法について|
||7 クラスの基本|[7.1 クラスの基本](https://qiita.com/KenyaSaitoh/items/ab59cc7f703fd0dd113c)|Javaプログラムの基本的な粒度であるクラスについて、その概念や作成方法、命名規約などについて|
|||[7.2 クラスの主要なメンバー](https://qiita.com/KenyaSaitoh/items/9d53a9155485b78bd739)|クラスの主要なメンバーであるフィールド、メソッド、コンストラクタについて|
|||[7.3 オーバーロードと様々なメソッド呼び出し](https://qiita.com/KenyaSaitoh/items/42ca1cd16ba35cf2e199)|メソッドとコンストラクタの仕様についてさらに深掘り|
||8 スタティックとfinal|[8.1 スタティックなメンバー](https://qiita.com/KenyaSaitoh/items/10e7abd3b38724975a03)|クラスそのものが直接保持するメンバーであるスタティックメンバーについて|
|||[8.2 finalと定数](https://qiita.com/KenyaSaitoh/items/992dcc0e4734353d7afc)|final修飾子の意味と、定数という「値の再代入が禁止された変数」の用法について|
||9 パッケージとインポート|[9.1 パッケージとインポート](https://qiita.com/KenyaSaitoh/items/d6a55136de5d8f20cd67)|クラス名を分類するための仕組みであるパッケージと、異なるパッケージからクラスをインポートする方法について|
||10 クラスの様々な仕組み|[10.1 カプセル化とアクセス修飾子](https://qiita.com/KenyaSaitoh/items/e3b423b1f7d95c4e9e7a)|アクセス修飾子とそれによって実現される「カプセル化」の概念について|
|||[10.2 クラス間の関係](https://qiita.com/KenyaSaitoh/items/f07b9d4306c73a4bb8c6)|クラスとクラスの間に「関連」や「依存」があるケースについて|
||11 継承と委譲|[11.1 継承と多態性](https://qiita.com/KenyaSaitoh/items/8fe2ebb65df4753bd907)|オブジェクト指向言語の主要な特徴である継承と、多態性（継承によってクラスの振る舞いが変わること）について|
|||[11.2 委譲](https://qiita.com/KenyaSaitoh/items/1f47e2582e9ec785958a)|継承と同じように実装を再利用するための設計パターンである委譲について|
||12 インタフェース|[12.1 インタフェースと多態性](https://qiita.com/KenyaSaitoh/items/281a7e481f1dc1019c3c)|実装と外部仕様を分離するための機能であるインタフェースと、インタフェースによる多態性について|
||13 Objectクラスの特徴|[13.1 Objectクラスとオブジェクトの様々な特性](https://qiita.com/KenyaSaitoh/items/f8ed90168d5fe0e10e62)|クラスの階層構造において最上位の位置するObjectクラスの様々な特性について|
||14 開発とデバッグ|[14.1 Eclipseによる開発支援機能とデバッグ](https://qiita.com/KenyaSaitoh/items/c8564972c02b3b046e6e)|Eclipseによる開発支援機能の操作方法や、デバッグするための方法について|
||15 列挙型|[15.1 列挙型](https://qiita.com/KenyaSaitoh/items/faa01ef594bff6622b21)|「静的な値」の組み合わせを管理するための特殊な型である列挙型について|
||16 文字列|[16.1 文字列を表すクラスの特徴とAPI](https://qiita.com/KenyaSaitoh/items/fe85a697abcfe1e11f98)|Stringクラスを中心に、文字列を表すクラスの特徴とそのAPIについて|
|||[16.2 正規表現とAPI](https://qiita.com/KenyaSaitoh/items/6dd5bfc35282c7d92365)|正規表現の基本的な仕様と、Javaで正規表現を使った検索・置換を行うためのAPIについて|
||17 数値|[17.1 ラッパークラスの特徴とAPI](https://qiita.com/KenyaSaitoh/items/fff28b132c7e1048ca97)|プリミティブ型をオブジェクトとして扱うためのラッパークラスの特徴やAPIについて|
|||[17.2 数値関連クラスとそのAPI](https://qiita.com/KenyaSaitoh/items/7c446c27b6cbeb01f322)|ラッパークラス以外の数値関連クラスの特徴やそのAPIについて|
||18 コレクション|[18.1 コレクションフレームワーク](https://qiita.com/KenyaSaitoh/items/4ae092ca8e91c356b9be)|複数のデータを一括して処理するための仕組みであるコレクションフレームワークについて|
|||[18.2 コレクションの様々な機能](https://qiita.com/KenyaSaitoh/items/29212deb3c3ece07592f)|ソートや同期化など、コレクションフレームワークが提供する様々な機能について|
||19 例外|[19.1 例外の基本](https://qiita.com/KenyaSaitoh/items/99b64f1a1208bd6a4a1e)|Java言語においてエラーを表す概念である例外と、例外をハンドリングするための仕組みについて|
|||[19.2 例外の様々な機能とアサーション](https://qiita.com/KenyaSaitoh/items/04583dda9a00348b5a1a)|ユーザー定義例外や例外チェーンなど例外のその他の機能や、プログラムの動作を検証するためのアサーションの仕組みについて|
||20 日付|[20.1 古典的な日時クラスとAPI](https://qiita.com/KenyaSaitoh/items/47252eef414d16595584)|未だに現役で利用されている古典的な日時クラスの特徴とAPIについて|
|||[20.2 Date and Time API](https://qiita.com/KenyaSaitoh/items/6644c14017c45918a5a1)|古典的な日時APIの課題を解消するために導入されたDate and Time APIついて|
||21 その他の機能|[21.1 入れ子クラス](https://qiita.com/KenyaSaitoh/items/e9bd4876a29645a97c3c)|クラス内で宣言されるクラスである、入れ子クラスの仕様について|
|||[21.2 Optionalクラスとnull値の取り扱い](https://qiita.com/KenyaSaitoh/items/6d801ba8274cbe82122b)|null安全の考え方や、null安全を担保するためのOptionalという機能について|
|||[21.3 java.langとjava.utilパッケージのその他の主要なクラス](https://qiita.com/KenyaSaitoh/items/a1ff6f0146f30d0c39f9)|java.langパッケージとjava.utilパッケージに所属する、その他の利用頻度の高いクラスとそのAPIについて|
|||[21.4 Java標準のその他のツール](https://qiita.com/KenyaSaitoh/items/c9e03200681503fa8788)|javaコマンド、jarコマンド、javadocコマンドなど、Java標準の各種ツールについて|
|Java Advanced編|1 『Java Basic編』の総復習と本コースの開発環境|（割愛）|（割愛）|
||2 Javaモジュールシステム|[2.1 Javaモジュールシステム](https://qiita.com/KenyaSaitoh/items/a04a1e94d28153fd1afb)|ライブラリの考え方や、モジュールを管理するための「モジュールシステム」と呼ばれる仕組みについて|
||3 スレッド|[3.1 スレッドの仕組みと操作](https://qiita.com/KenyaSaitoh/items/8ff0a564ada70e3b5ee5)|非同期・並列処理の考え方や、Javaに言語仕様として備わっているスレッドの仕組みと操作方法について|
|||[3.2 並行処理ユーティリティとExecutorフレームワーク](https://qiita.com/KenyaSaitoh/items/9e049e7fb49b22546c05)|マルチスレッドを効率化するため並行処理ユーティリティと、その中でも最も代表的なExecutorフレームワークについて|
|||[3.3 並行処理ユーティリティのその他の機能](https://qiita.com/KenyaSaitoh/items/9c30c0c51acef432e443)|並行処理ユーティリティのExecutorフレームワーク以外の機能ついて|
||4 ラムダ式とストリームAPI|[4.1 ラムダ式と関数型インタフェース](https://qiita.com/KenyaSaitoh/items/98be8b9140aa195409d7)|Javaにおける関数の概念や、それを実装するためのラムダ式について|
|||[4.2 ストリームAPI](https://qiita.com/KenyaSaitoh/items/a979047c98e0798cb865)|データに対してパイプライン処理を行うためのストリームAPIについて|
||5 ファイル操作とI/O|[5.1 ファイル操作](https://qiita.com/KenyaSaitoh/items/2db603a30d2bc2e0256f)|ファイルの操作（コピー・移動等）と、ファイルへの入出力を行うためのクラスの特徴やAPIについて|
|||[5.2 java.ioパッケージのその他の主要なクラス](https://qiita.com/KenyaSaitoh/items/1d40317f71fb64287278)|ファイル以外のリソースを扱うための、java.ioパッケージのその他の主要なクラスの特徴やAPIについて|
||6 ネットワーク|[6.1 TCPとUDPによるネットワーク通信](https://qiita.com/KenyaSaitoh/items/b9f8b3d188cc67c62da1)|TCP/IPの概念や、Java NIOと呼ばれるAPIによってTCP/IPベースのネットワーク通信を行う方法について|
|||[6.2 HTTPによるアプリケーション連携](https://qiita.com/KenyaSaitoh/items/3986521007c966449cc3)|HTTPの基本的な仕様やHTTPクライアントの構築方法について|
||7 総称型|[7.1 総称型](https://qiita.com/KenyaSaitoh/items/3e791f7273a57e29597c)|型をパラメータ化することでクラスの汎用性を高める仕組みである総称型について|
||8 リフレクションとアノテーション|[8.1 クラスローダーの仕組みとClassクラス](https://qiita.com/KenyaSaitoh/items/1cab7aef068bd84da35c)|クラスをメモリにロードする仕組みであるクラスローダーや、クラスのメタ情報を管理するClassクラスについて|
|||[8.2 リフレクションの仕組みとAPI](https://qiita.com/KenyaSaitoh/items/03e2a4afa884c8f584f0)|クラスのメタ情報を扱うことにより様々な処理を可能にするリフレクションという機能について|
|||[8.3 アノテーションの仕組みとAPI](https://qiita.com/KenyaSaitoh/items/c8ef46b3746dab8ebcef)|クラスやメソッドなどに「注釈」として付与するアノテーションについて|
||9 最新の機能|[9.1 レコードクラス](https://qiita.com/KenyaSaitoh/items/68cf891a1b42e2e010bf)|プレーンでイミュータブルなクラスを簡潔に記述するためにJava 16で登場したレコードクラスについて|

### 「Oracle認定Javaプログラマ」との対応関係について

『Java Basic編』と『Java Advanced編』は認定資格である「Oracle認定Javaプログラマ」（Silver、Gold）の範囲ともリンクしていますので、資格取得のための教材としても有用です。
ただしこのコースの目的は資格取得ではなく、あくまでも実践的なJavaスキルの習得にあるため、「Oracle認定Javaプログラマ」の範囲と完全一致しているわけではありません。「Oracle認定Javaプログラマ」には含まれていなくても現場実践の観点では必要と思われるものは範囲に取り込み、逆に「Oracle認定Javaプログラマ」の範囲の中でも一部の（現場での活用が限定的な）機能については、敢えて触れていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597954/cbe973e3-c5df-dfd9-0463-5bf8dd15a131.png)
また本コースは「スキルの積み上げやすさ」と「現場におけるスキル活用」の観点で構成されているため、テーマの登場順序や組み方にも差異があります。例えば「Oracle認定Javaプログラマ」では、現場での利用頻度が高い「列挙型」は「Silver」の出題範囲に入っていませんが、本コースでは『Basic編』に登場します。
なお本コースと「Oracle認定Javaプログラマ」における主要な出題範囲との対応関係は、以下の表に掲載のとおりです。

|資格種別|出題範囲|対応するコース|対応するチャプター|
|--|--|--|--|
|Silver|Javaテクノロジと開発環境についての理解|Basic編|[1.2 Javaの開発環境](https://qiita.com/KenyaSaitoh/items/0cc6025e54a5f023cfca)<br>[1.3 Javaのエディションとバージョン](https://qiita.com/KenyaSaitoh/items/c2f6ddda0125a149dbe2)|
||簡単なJavaプログラムの作成|Basic編|[2.1 Javaプログラムの基本と"Hello, World!"](https://qiita.com/KenyaSaitoh/items/3ca40ec9b7ddef75012a)<br>[9.1 パッケージとインポート](https://qiita.com/KenyaSaitoh/items/d6a55136de5d8f20cd67)|
||Javaの基本データ型と文字列の操作|Basic編|[3.1 変数とデータ型](https://qiita.com/KenyaSaitoh/items/acfd83ec90e99d719d71)<br>[3.2 リテラル](https://qiita.com/KenyaSaitoh/items/58f82a8ccde3b2e3712c)<br>[3.3 変数と型に関する様々な言語仕様](https://qiita.com/KenyaSaitoh/items/0cba76c8cb056ca70aef)<br>[6.1 制御構文](https://qiita.com/KenyaSaitoh/items/07e820abb887585c6dfc)<br>[16.1 文字列を表すクラスの特徴とAPI](https://qiita.com/KenyaSaitoh/items/fe85a697abcfe1e11f98)|
||演算子と制御構造|Basic編|[4.1 演算子](https://qiita.com/KenyaSaitoh/items/151d068cef70aa2f8ac5)<br>[6.1 制御構文の概要](https://qiita.com/KenyaSaitoh/items/07e820abb887585c6dfc)<br>[6.2 条件分岐](https://qiita.com/KenyaSaitoh/items/3ce5c6473594a6dcdbd0)<br>[6.3 繰り返し](https://qiita.com/KenyaSaitoh/items/ae37c4d7b38bec9c1601)|
||配列の操作|Basic編|[5.1 配列](https://qiita.com/KenyaSaitoh/items/ddc7d8e3442fd22a1d75)|
||クラスの宣言とインスタンスの使用|Basic編|[7.1 クラスの基本](https://qiita.com/KenyaSaitoh/items/ab59cc7f703fd0dd113c)<br>[13.1 Objectクラスとオブジェクトの様々な特性](https://qiita.com/KenyaSaitoh/items/f8ed90168d5fe0e10e62)|
||メソッドの作成と使用|Basic編|[7.2 クラスの主要なメンバー](https://qiita.com/KenyaSaitoh/items/9d53a9155485b78bd739)<br>[7.3 オーバーロードと様々なメソッド呼び出し](https://qiita.com/KenyaSaitoh/items/42ca1cd16ba35cf2e199)<br>[8.1 スタティックなメンバー](https://qiita.com/KenyaSaitoh/items/10e7abd3b38724975a03)|
||カプセル化の適用|Basic編|[10.1 カプセル化とアクセス修飾子](https://qiita.com/KenyaSaitoh/items/e3b423b1f7d95c4e9e7a)|
||継承による実装の再利用|Basic編|[11.1 継承と多態性](https://qiita.com/KenyaSaitoh/items/8fe2ebb65df4753bd907)|
||インタフェースによる抽象化|Basic編|[12.1 インタフェースと多態性](https://qiita.com/KenyaSaitoh/items/281a7e481f1dc1019c3c)|
|||Advanced編|[4.1 ラムダ式と関数型インタフェース](https://qiita.com/KenyaSaitoh/items/98be8b9140aa195409d7)|
||例外処理|Basic編|[19.1 例外の基本](https://qiita.com/KenyaSaitoh/items/99b64f1a1208bd6a4a1e)<br>[19.2 例外の様々な機能とアサーション](https://qiita.com/KenyaSaitoh/items/04583dda9a00348b5a1a)|
||モジュール・システム|Advanced編|[2.1 Javaモジュールシステム](https://qiita.com/KenyaSaitoh/items/a04a1e94d28153fd1afb)|
|Gold|Javaの基礎|Basic編|[8.2 finalと定数](https://qiita.com/KenyaSaitoh/items/992dcc0e4734353d7afc)<br>[15.1 列挙型](https://qiita.com/KenyaSaitoh/items/faa01ef594bff6622b21)<br>[21.1 入れ子クラス](https://qiita.com/KenyaSaitoh/items/e9bd4876a29645a97c3c)|
||例外処理とアサーション|Basic編|[19.1 例外の基本](https://qiita.com/KenyaSaitoh/items/99b64f1a1208bd6a4a1e)<br>[19.2 例外の様々な機能とアサーション](https://qiita.com/KenyaSaitoh/items/04583dda9a00348b5a1a)|
||Javaのインタフェース|Basic編|[12.1 インタフェースと多態性](https://qiita.com/KenyaSaitoh/items/281a7e481f1dc1019c3c)|
||汎用とコレクション|Basic編|[17.1 ラッパークラスの特徴とAPI](https://qiita.com/KenyaSaitoh/items/fff28b132c7e1048ca97)<br>[18.1 コレクションフレームワーク](https://qiita.com/KenyaSaitoh/items/4ae092ca8e91c356b9be)<br>[18.2 コレクションの様々な機能](https://qiita.com/KenyaSaitoh/items/29212deb3c3ece07592f)|
|||Advanced編|[7.1 総称型](https://qiita.com/KenyaSaitoh/items/3e791f7273a57e29597c)|
||関数型インタフェースとラムダ式|Advanced編|[4.1 ラムダ式と関数型インタフェース](https://qiita.com/KenyaSaitoh/items/98be8b9140aa195409d7)|
||JavaストリームAPI|Advanced編|[4.3 ストリームAPI](https://qiita.com/KenyaSaitoh/items/a979047c98e0798cb865)|
||組込み関数型インタフェース|Advanced編|[4.2 ストリームAPI](https://qiita.com/KenyaSaitoh/items/a979047c98e0798cb865)|
||ストリームに対するラムダ演算|Advanced編|[4.2 ストリームAPI](https://qiita.com/KenyaSaitoh/items/a979047c98e0798cb865)|
||モジュール型アプリケーションに移行する|Advanced編|[2.1 Javaモジュールシステム](https://qiita.com/KenyaSaitoh/items/a04a1e94d28153fd1afb)|
||並列処理|Advanced編|[3.1 スレッドの仕組みと操作](https://qiita.com/KenyaSaitoh/items/8ff0a564ada70e3b5ee5)<br>[3.2 並行処理ユーティリティとExecutorフレームワーク](https://qiita.com/KenyaSaitoh/items/9e049e7fb49b22546c05)<br>[3.3 並行処理ユーティリティのその他の機能](https://qiita.com/KenyaSaitoh/items/9c30c0c51acef432e443)|
||並列ストリーム|Advanced編|[4.2 ストリームAPI](https://qiita.com/KenyaSaitoh/items/a979047c98e0798cb865)|
||I/O（基本およびNIO2）|Advanced編|[5.1 ファイル操作](https://qiita.com/KenyaSaitoh/items/2db603a30d2bc2e0256f)<br>[5.2 java.ioパッケージのその他の主要なクラス](https://qiita.com/KenyaSaitoh/items/1d40317f71fb64287278)|
||JDBCによるデータベース・アプリケーション|Practical編（予定）|－|
||ローカライズ|Advanced編|[21.3 java.langとjava.utilパッケージのその他の主要なクラス](https://qiita.com/KenyaSaitoh/items/a1ff6f0146f30d0c39f9)|
||アノテーション|Advanced編|[8.3 アノテーションの仕組みとAPI](https://qiita.com/KenyaSaitoh/items/c8ef46b3746dab8ebcef)|