Java 9の国際化(i18n)機能強化のポイントを徹底解説
Java 9における国際化機能強化の概要
Java 9の国際化(Internationalization)機能強化には、Unicode 8.0への対応、プロパティファイルのUTF-8読み込み、そしてCLDRロケールデータのデフォルト有効化が含まれます。Java 9はUnicode 8.0規格に対応しており、10,555文字、29のスクリプト(用字系)、42のブロックをサポートしています。
プロパティファイルのUTF-8エンコーディング対応
Java 9では、プロパティファイルがUTF-8エンコーディングで読み込まれるようになりました。デフォルトでは、入力ストリームの読み込み時に不正なバイト列が検出されると、MalformedInputExceptionまたはUnmappableCharacterExceptionがスローされます。
この場合、PropertyResourceBundleインスタンスは例外発生前の状態にリセットされ、入力ストリームをISO-8859-1で再読み込みして処理を継続します。
java.util.PropertyResourceBundle.encodingシステムプロパティの動作
java.util.PropertyResourceBundle.encodingシステムプロパティにISO-8859-1またはUTF-8が明示的に設定されている場合、PropertyResourceBundleインスタンスはそのエンコーディングで入力ストリームを読み込み、無効なシーケンスを検出した時点で例外をスローします。
このシステムプロパティは、PropertyResourceBundleクラスの初期化時に読み取られ評価されるため、その後にプロパティを変更・削除しても効果はありません。
ISO-8859-1を指定した場合の注意点
- ISO-8859-1エンコーディングで表現できない文字は、Unicodeエスケープ(\uXXXX形式)で記述する必要があります。
- それ以外のエンコーディング値がシステムプロパティに設定された場合は、無視されます。
問題が発生した場合の対処方法
エンコーディングに関する問題が発生した場合は、以下の選択肢を検討してください。
- プロパティファイルをUTF-8エンコーディングに変換する。
- 実行時にシステムプロパティを明示的に指定する。
java.util.PropertyResourceBundle.encoding=ISO-8859-1
-
Java 9のJShellで使える「/edit」コマンドの種類と使い方
JShellは、Java 9で導入されたコマンドラインツールです。main()メソッドを用意しなくても、宣言・ステートメント・式をその場で評価できるのが大きな特徴です。さらに、JShellにはJShell Edit Padという簡易テキストエディタが組み込まれており、「/edit」コマンドで起動することで、入力済みのコードを手軽に編集できます。 /editコマンドの3つの形式 JShellで利用できる「/edit」コマンドには、次の3つの形式があります。 /edit /edit [ID] /edit [コード名] /edit:引数なしで実行すると、現在アクティブなすべてのコードがテキストエデ
-
Javaのクラスの種類一覧!具象・抽象・final・POJO・静的・内部クラスを徹底解説
Javaには、用途や宣言方法に応じてさまざまな種類のクラスが存在します。それぞれのクラスには固有の役割があり、適切に使い分けることで、保守性の高いコードを書くことができます。この記事では、Javaの代表的な6つのクラスの種類について、コード例とともにわかりやすく解説します。 1. 具象クラス(Concrete Class) 具象クラスとは、抽象メソッドを持たない通常のクラス、または親クラスやインターフェースのすべてのメソッドを実装しているクラスのことです。直接インスタンス化できる、最も一般的なクラスです。 コード例 public class Concrete { // 具象クラス