Javaの一時的なキーワード:それは何ですか?それはどのように機能しますか?
公開: 2022-03-06他のすべてのプログラミング言語と同様に、Javaプログラミング言語には特定の意味を持つ予約語のリストがあります。 Javaによって予約されているこの52語のセットは、キーワードと呼ばれます。 それらには事前定義された意味があるため、プログラマーはキーワードを使用してクラス、オブジェクト、変数、およびその他の識別子に名前を付けることはできません。 これらの52個のキーワードのうちの1つは、一時的なキーワードです。これがブログの焦点になります。
目次
Javaの一時的なキーワードを理解する
Transientは、Javaプログラミング言語に存在するより有用な修飾子の1つです。 一時的なキーワードの主な役割は、シリアル化の場合に発生します。 一時修飾子をクラスのフィールドメンバーに適用して、これらの特定のメンバーのシリアル化をオフにすることができます。
簡単に言えば、Javaのtransientキーワードは、シリアル化を回避するためにプログラマーが使用できます。 データ構造の特定のオブジェクトがプログラマーによって一時的なものとして定義されている場合、そのオブジェクトはシリアル化されません。 その結果、transientキーワードを使用して、一時変数がオブジェクトの永続状態の一部ではないことをJVM(Java仮想マシン)に示すことができます。
非常に基本的な例を使用して、Javaでのtransientキーワードの動作を理解してみましょう。 まず、Addressクラスを作成し、クラスの3つの属性(streetName、areaName、houseNumber)を定義します。 3番目の属性であるhouseNumberを保存または保存したくないので、一時的に保持します。
クラスAddressはSerializableを実装します {{ プライベート文字列streetName; プライベート文字列areaName; プライベート一時文字列houseNumber;
//セッターとゲッター } |
次に、Addressクラスのインスタンスをシリアル化します。
{を試してください ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“ addressinfo.ser”)); アドレスa=new Address(); a.setstreetName( "MIG"); a.setareaName( "Vikas Nagar"); emp.sethouseNumber( "110"); //オブジェクトをシリアル化します oos.writeObject(a); oos.close(); } catch(例外e) {{ System.out.println(e); } |
コードが正しく機能する場合、「houseNumber」情報は一時的なものとして定義されているため、保存されていません。 次に、それを逆シリアル化して元のオブジェクトに戻し、情報が保存されているかどうかを確認します。
{を試してください ObjectInputStream o = new ObjectInputStream(new FileInputStream(“ addressinfo.ser”)); //オブジェクトを読み返します アドレスreadAddressInfo=(アドレス)o.readObject(); System.out.println(readAddressInfo.getstreetName()); System.out.println(readAddressInfo.getareaName()); System.out.println(readAddressInfo.gethouseNumber()); o.close(); } catch(例外e) {{ System.out.println(e); } |
上記のJavaプログラムを実行すると、次の出力が表示されます。
MIG
ビカス・ナガル
ヌル
ご覧のとおり、シリアル化のため、「houseNumber」情報は永続的な状態に保存されませんでした。そのため、出力として「null」という値を受け取ります。 これが、transientキーワードが使用される理由です。永続的ではなく一時的な方法で値を変数に格納するためです。
Javaでの「transient」キーワードのユースケース
一時的なキーワードとその機能を理解したので、次に発生する論理的な質問は、一時的なキーワードをいつ使用するかということです。
一時的なキーワードを使用することでメリットが得られる状況のいくつかを深く見て、一時的なキーワードについての学習を広げましょう。
覚えておくべき、よくあるユースケースを次に示します。
- 一時的なキーワードの最初のユースケースは、クラスのインスタンス内の他のフィールドから計算または派生したデータフィールドがある場合です。 結果として、これらのフィールドはプログラムで計算する必要があり、他の値に依存します。 そのため、このようなフィールドを永続化する代わりに、transientキーワードを使用して非シリアル化することができます。 他の数値から計算されるこのような一時的な値の例には、タイムスタンプベースの値、パーセンテージベースの値などがあります。これらすべての場合で、現在存在する値に基づいて変数の値を計算しています。
- もう1つの重要なユースケースは、JVMの外部にリークされてはならず、transientキーワードを使用してシリアル化されない可能性のある、あらゆるタイプの安全な情報を処理している場合です。
- Java Development Kit内で「シリアライズ可能」とマークされていないフィールドは、transientキーワードで使用できます。 ここで注意すべき重要な点は、シリアル化可能なインターフェイスを実装していないすべてのJavaクラスは、シリアル化可能なクラス内で参照されていないため、シリアル化できないことです。 その結果、メインクラスをシリアル化する前に「transient」とマークされていない場合、これらは「java.io.NotSerializableException」をスローする可能性があります。
- そして最後に、いくつかのフィールドをシリアル化することが意味をなさない場合があります。 たとえば、コードにロガー参照を追加した場合、その情報をシリアル化する必要はありません。 インスタンスの状態を表す情報をシリアル化する必要があります。 一方、ロガーは状態を表さないため、シリアル化しても意味がありません。 したがって、transientキーワードとともに使用する必要があります。
結論は
上記のユースケースは、決して網羅的なものではありません。 一時的なキーワードを試して、独自のユースケースを考え出します。 結局のところ、キーワードはプログラマー向けに作成されており、キーワードの機能と意味を理解している場合にのみ、ほとんどのキーワードを作成できます。
これで、Javaの一時的なキーワードに関するこのブログの最後に到達しました。 これは、ソフトウェア開発のキャリアで成長するために習得する必要がある、より入門的な概念の1つです。 ソフトウェア開発の分野は非常にダイナミックですが、靴下を脱いで最善を尽くす準備ができていれば、非常に歓迎されます。
upGradでは、さまざまなドメインに属する世界中の学生を指導および指導し、ソフトウェア開発でのキャリアの開始を支援してきました。 ソフトウェア開発における当社のPGP–フルスタック開発の専門分野は、初心者および経験豊富な専門家向けに設計されています。 専門家の家庭教師と最先端の学習資料に加えて、才能のある仲間、包括的な配置サポート、業界リーダーとの1対1のメンタリングも受けられます。 コースの内容を確認して、すぐに登録してください。
1. Javaのtransientキーワードとは何ですか?
Javaの一時的なキーワードを使用して、オブジェクトのシリアル化を回避できます。 一時的なキーワードを使用して、特定のフィールドが保持する値が永続的でないことを確認します。
2.transientキーワードはJavaのどの要素で使用できますか?
Javaでtransientキーワードを使用して、クラス、変数、オブジェクト、またはフィールドを非シリアル化できます。
3. Javaではtransientキーワードとvolatileキーワードはどのように異なりますか?
シリアル化プロセスを回避するためにtransientキーワードが使用されますが、変数でvolatileキーワードが使用されるため、メインメモリに格納されません。