-
Java 9のJShellで関係演算子と論理演算子を試す方法
Java 9で導入されたJShellは、Java言語の機能や豊富な標準ライブラリを対話的に探索・実験できる強力なREPLツールです。この記事では、JShellを使って関係演算子と論理演算子の動作を実際に確認してみましょう。 関係演算子とは 関係演算子(==、!=、<、>、<=、>=)は、主に値の比較に使用される演算子です。boolean型以外のプリミティブ型のオペランドを受け取り、評価結果としてboolean値(trueまたはfalse)を返します。 論理演算子とは JShellでは、式の中で使用できる論理演算子もサポートされています。論理演算子はboolean型のオペ
-
Java 9のPublisherインターフェースのルールとは?Reactive Streamsの規約を徹底解説
PublisherインターフェースとはPublisher(パブリッシャー)とは、無限に続く可能性のある順序付けられた要素を、Subscriber(サブスクライバー)からの需要(デマンド)に応じて発行するプロバイダーのことです。これはJava 9で導入されたFlow API(Reactive Streams)の中核となる概念であり、非同期ストリーム処理におけるバックプレッシャー(背圧)制御を実現する基盤となっています。Publisher<T>インターフェースは型Tの要素を発行する役割を担い、サブスクライバーが接続するためのsubscribe()メソッドを1つだけ提供します。publi
-
Java 9のJShellを使ってjava.time.LocalDateを操作する方法
JShellは、Java 9で導入されたREPL(Read-Eval-Print-Loop)型の対話型ツールです。ユーザーが入力したコードをその場で評価し、結果を即座に返してくれるため、小さなコード断片の動作確認やAPIの学習に非常に便利です。LocalDateクラスとはjava.time.LocalDateクラスは、日付情報(年/月/日)やその関連属性を取得するための多数のメソッドを提供しています。また、うるう年かどうかといった日付の分類に関するメタ情報も取得できます。LocalDateクラスはイミュータブル(不変)である点が重要な特徴です。日付に対して加算や減算を行うメソッド(plusDa
-
Java 9のJShellで中間ストリーム操作を活用する方法
JShellとはJShellはJava 9で導入されたREPL(Read-Eval-Print Loop)ツールです。式、変数、メソッド、クラスなどの簡単な文を入力として受け付け、その結果を即座に表示します。コードを少しずつ試しながら動作を確認できるため、学習やプロトタイピングに非常に便利です。中間ストリーム操作とはStream(ストリーム)は値の連なり(シーケンス)を表すものです。中間ストリーム操作とは、ストリームを受け取り、そこへ処理を適用して別のストリームを返す操作のことを指します。たとえばラムダ式を各要素に適用し、その結果からなる新しいストリームを生成します。代表的な中間ストリーム操作
-
Java 9でスレッドのスタックトレースを取得する方法:Thread.getStackTrace()とStackWalkerクラスの使い方
Java 9では、現在実行中のスレッドのスタックへアクセスするための標準APIとして、StackWalkerクラスが新たに追加されました。それ以前のJavaバージョンでは、Throwable::getStackTrace、Thread::getStackTrace、SecurityManager::getClassContextといったメソッドを使用してスレッドスタックを取得していました。 Thread.getStackTrace()メソッドは、対象スレッドのスタックダンプを表すStackTraceElement[](スタックトレース要素の配列)を返します。配列の最初の要素はスタックの最上部、
-
Java 9のJShellでストリームの終端操作(ターミナル操作)を活用する方法
JShellは、Java 9から導入された対話型(REPL)ツールです。簡単な文や式などを入力として受け取り、それを評価して、結果を即座にユーザーへ出力します。コードをファイルに保存してコンパイルする必要がないため、APIの動作確認や学習に非常に便利なツールです。 終端操作(Terminal Operation)とは? 終端操作(ターミナル操作)とは、ストリームを入力として受け取る一方で、出力として新しいストリームを返さないストリーム操作のことです。中間操作(filterやmapなど)が別のストリームを返すのに対し、終端操作は最終的な結果を生成します。 例えば、終端操作はラムダ式に適用でき、単
-
Java 9のJShellでswitch文を定義する方法【break文の使い方も解説】
JShellは、Java 9で導入されたREPL(Read-Evaluate-Print-Loop:読み込み・評価・出力・繰り返し)をベースとした対話型ツールです。このツールを使うことで、簡単な文をその場で実行・評価し、結果をすぐに出力できます。 switch文は、if-else文と同様に複数の条件を判定できる制御構造です。いずれのcaseにも一致しなかった場合にはdefault句が実行され、条件に一致した後はbreak文を使ってswitchブロックから抜け出すことができます。 switch文の基本的な定義方法 まずは、break文を含まないシンプルなswitch文をJShellで定義してみま
-
Java 9のStackWalker APIで特定のスタックフレームをスキップする方法
Java 9で導入されたStackWalker APIは、任意の時点における現在のスレッドのスタックトレースのスナップショットを取得し、それを順番に辿る(ウォークする)ためのメソッドを提供します。 Thread::getStackTrace()と比較したStackWalkerクラスの主な利点は以下のとおりです。 特定のクラスやスタックフレームをフィルタリング・スキップできる 宣言クラスのClassオブジェクト自体を直接取得できる 完全なスタックトレースを一括で取得するのではなく、短いスタックトレースかフルスタックトレースかを選択できる 以下の例では、java.util.stream.Str
-
Java 9のStackWalkerでリフレクションフレームを表示する方法
Java 9では、java.lang.StackWalker クラスを使った標準APIが提供されました。このクラスは、スタックフレームへの遅延アクセス(lazy access)を可能にすることで高い効率性を実現するように設計されています。また、実装固有のフレームやリフレクションフレームを含むスタックトレースを取得できるオプションも用意されており、デバッグ作業において非常に役立ちます。たとえば、StackWalkerインスタンスの生成時に SHOW_REFLECT_FRAMES オプションを指定すると、リフレクション経由で呼び出されたメソッドのフレームもスタックトレースに出力されるようになります
-
【Java入門】Java 9のJShellでラッパーオブジェクトを作成する方法をわかりやすく解説
ラッパークラスとは Javaのすべてのプリミティブ型(int、doubleなど)には、それに対応する組み込みのラッパークラスが用意されており、これらのクラスはすべてイミュータブル(不変)として設計されています。代表例としては、Integer、Float、Double、Byteなどが挙げられます。 コードの中でラッパークラスを活用する主なメリットは次のとおりです。 対応するプリミティブ型に関する型情報(最大値・最小値・サイズなど)へアクセスできる プリミティブ型の値が自動的にオブジェクト参照型へ変換されるオートボクシング(Auto-Boxing)を利用できる コレクションなどのデータ構造の中で
-
Java 9のJShellで配列を初期化・操作する方法を徹底解説
JShellは、Java 9から導入されたコマンドラインツールであり、簡単な文や式、クラス、メソッド、変数などを入力すると、その評価結果を即座に出力してくれる便利な機能です。 Javaにおける配列もまたオブジェクトの一種です。配列を使用するには、まず宣言を行い、その後に生成(インスタンス化)する必要があります。整数型の配列を格納する変数を宣言する場合は、「int[] array」のように記述します。なお、配列のインデックスは「0」から「配列の長さ - 1」までの範囲となる点に注意しましょう。 以下のコードスニペットでは、インデックスを使って配列から特定の要素を取得する方法を示しています。要素へ
-
Java 9のjdeprscanツールとは?使い方とオプションを徹底解説
jdeprscanツールは、クラス・アーカイブ(JARファイル)・フォルダを対象に静的解析を実行し、非推奨(deprecated)としてマークされたAPI要素を検出するためのコマンドラインツールです。なお、このツールが検出できるのはJava SEで非推奨とマークされた項目のみであり、サードパーティ製ライブラリなどでマークされた項目は検出できない点に注意してください。また、解析対象のクラス(またはクラス群)が依存しているすべてのクラスは、コンパイル時および実行時に利用可能である必要があります。依存クラスが見つからない場合、このツールは「cannot find a class」というエラーメッセー
-
Java 9のJShellで参照型を宣言する方法をわかりやすく解説
JShellとは JShellは、Java 9で導入された対話型(REPL)ツールです。ユーザーが入力したコードをその場で評価し、結果を即座に出力してくれるため、小さなコード断片の動作確認やJavaの学習に非常に便利なツールです。 参照型とは何か 値型と異なり、参照型は値そのものを直接保持しません。代わりに、実際の値が格納されているメモリ上のアドレス(参照)を保持します。つまり、参照型の変数には、データが置かれている別のメモリ領域を指し示す情報が入っているということです。Javaにおける主な参照型には、String、配列、クラス、インターフェースなどがあります。 ヒープ上に作成されるオブジ
-
Java 9のmodule-info.javaでrequires句を使う方法を徹底解説
Java 9のモジュールとはモジュールはJava 9で導入された重要な概念です。この概念を活用することで、コードを「モジュール」と呼ばれる小さなコンポーネントへ分割できます。各モジュールはそれぞれ独自の責務を持ち、正しく動作するために必要な他のモジュールへの依存関係を明示的に宣言します。モジュールを宣言するには、ソースコードのルートディレクトリに「module-info.java」ファイルを配置する必要があります。requires句の種類「module-info」ファイルには、用途に応じていくつかの種類の「requires」句が用意されています。1)requires <module>
-
Java 9のJShellで守るべきルールまとめ!REPLツールの使い方と注意点を解説
Java 9では、対話型のREPL(Read-Evaluate-Print-Loop)ツールであるJShellが導入されました。JShellを使うことで、コードスニペットを実行しながら、その結果を即座に確認できます。ここでいうスニペット(snippet)とは、標準的なJava構文で記述できる1つの命令文を指し、単一の式、ステートメント、または宣言に相当します。 JShellは学習やプロトタイピングに非常に便利なツールですが、利用する際にはいくつか守るべきルールがあります。以下にその主なルールをまとめます。 JShellで従うべき主なルール スニペットには、import宣言、クラス宣言、メソッ
-
Java 9のJShellで文字列ユーティリティと不変性を実装・確認する方法
JShellとは? JShellはJava 9で導入された対話型のコマンドラインツールです。式、クラス、メソッド、フィールド、インターフェースなどの簡単なステートメントをその場で入力・実行できるため、学習や動作検証に非常に便利です。また、Stringクラスは標準ライブラリのjava.langパッケージに含まれており、日常的なテキスト処理を行うための多彩なメソッドを提供しています。 本記事では、JShellを使った文字列ユーティリティの活用方法と、Stringクラス特有の「不変性(イミュータブル性)」について、実際の実行例を交えて解説します。 1) 文字列ユーティリティメソッド Stringクラ
-
Java 9のjdepsツールとは?重要性と主なオプションを徹底解説
jdepsとは?――Javaクラス依存関係アナライザー jdepsは、Javaに標準搭載されたクラス依存関係分析ツール(Java Class Dependency Analyzer)です。コマンドラインから手軽に実行でき、指定したJavaクラスファイルのパッケージレベルおよびクラスレベルの依存関係を表示できます。 分析対象の入力として指定できるのは、以下のいずれかです。 .classファイルへのパス名 ディレクトリ JARファイル 完全修飾クラス名(該当するすべてのクラスファイルを解析) Java 9においてjdepsが重要な理由 Java 9ではプラットフォーム・モジュールシステム(
-
【Java 9入門】module-info.javaにおけるexports句の役割と使い方を徹底解説
Java 9のモジュールとは何かJava 9で導入されたプラットフォーム・モジュールシステム(Project Jigsaw)において、モジュール(Module)とは、コードとデータをひとつにまとめた単位です。モジュールには名前が付けられ、他のモジュールへの依存関係を宣言し、外部からアクセス可能なpublic型を含むパッケージをエクスポート(公開)し、利用するサービスや提供するサービス実装を指定します。これらの設定はすべて、モジュールのルートディレクトリに配置されるmodule-info.javaファイルに記述します。exports句の2つの形式module-info.javaファイルでは、「e
-
【Java 9】クラスローダーを使ってすべてのモジュールを一覧表示する方法
Java 9におけるクラスローダーの変化 Java 9より前のバージョンでは、拡張(extension)クラスローダーとアプリケーション(application)クラスローダーは、どちらも java.net.URLClassLoader クラスのインスタンスでした。しかしJava 9では、クラスローダーの分類が見直され、従来の拡張クラスローダーに代わってプラットフォームクラスローダー(Platform Class Loader)が新たに導入されました。 プラットフォームクラスローダーが導入された主な目的は、ブートストラップクラスローダーによってロードされるクラスが、デフォルトですべての権限(パ
-
Java 9におけるクラスローダーの変更点を徹底解説
すべてのJavaプログラムはJava仮想マシン(JVM)上で実行されます。コンパイル後、Javaのクラスはプラットフォームやマシンに依存しないバイトコードへと変換され、.classファイルとして保存されます。クラスを使用する際には、ClassLoader(クラスローダー)がそのクラスをメモリに読み込みます。クラスは名前によって参照された時点でJava環境に導入され、クラスの実行開始時にクラスローダーによるロードが行われます。main()メソッドは、そのクラスを起動するためのエントリーポイントです。Java 9では、このクラスローダーに関していくつかの重要な変更が加えられました。以下に主な変更点