JavaRush /Java Blog /Random-JA /コーヒーブレイク#93。Java での String クラスの仕組み。Java で Web インターフェースを実装...

コーヒーブレイク#93。Java での String クラスの仕組み。Java で Web インターフェースを実装する方法を学ぶ

Random-JA グループに公開済み

Java での String クラスの仕組み

出典: DZone最近、フォーラムで次の質問に遭遇しました。「ここではStringオブジェクト がいくつ作成されますか?」一つか二つ?"。
String langName = new String("Java");
特にJava でStringクラス がどのように機能するかについてあまり知識がない人にとっては、複雑な質問であることはわかっていたので、他の人がどのように答えたか興味がありました。それで、私はコメントセクションに飛び込みました。 コーヒーブレイク#93。 Java での String クラスの仕組み。 Java で Web インターフェースを実装する方法を学ぶ - 1驚いたことに、コメント者の中には「1つ」を正解とする人もいたのですが、それよりも「2つ」と答える人が多かったです。一瞬、Stringsについての自分の知識を疑い始めました。正解は、すべては状況次第だということです。この質問は十分に明確ではなく、議論の余地があります。これを次のように言い換えます。

1. このステートメントが実行されると、メモリ内に Java String オブジェクトがいくつ作成されますか?

答えは 1 つだけです。

このステートメントを実行した後、メモリ内に Java String オブジェクトがいくつ残るでしょうか?

答えは2つです。上記の例のようなステートメントを使用してプログラムのメモリ ダンプを確認したら、不確実性が解消されたことを願っています。 上の画像のプログラム メモリ ダンプは、同じ内容を持つ2 つのStringコーヒーブレイク#93。 Java での String クラスの仕組み。 Java で Web インターフェースを実装する方法を学ぶ - 2オブジェクトの存在を示しています。これは、Stringクラスのコンストラクターを呼び出し、文字列リテラルを引数として渡すと、2 つのオブジェクトがメモリ ヒープに追加されることを示しています。1 つは通常の (非プール) メモリ内に、もう 1 つは文字列定数プール (SCP) 内に追加されます。ヒープの一部でもあるメモリ内の領域。追加した後から困難が始まります。コンストラクターを呼び出すと、常に新しいオブジェクトが非プール領域に配置されます。ただし、文字列リテラルであるコンストラクター引数もオブジェクトであり、文字列プールに同じ内容の文字列が含まれていない場合、クラスのロード中に作成され、SCP に保存されます。Java言語仕様には、「文字列リテラル (より一般的には、定数式 (§15.28) の値である String) は、String メソッド . intern を使用して一意のインスタンスを共有するために「インターン」される」と記載されています。Java の文字列はリテラルであり、定数式の値を表すため、プールされます。これをさらに明確にするために、記事の冒頭に示したコードを次のように書き直してみましょう。
String java = "Java";
String langName = new String(java);
さて、本題の質問に戻りましょう。次のステートメントは 1 つまたは 2 つのStringオブジェクトを作成します。
String langName = new String("Java");
この質問に答えて疑いを取り除くために、main メソッドのバイトコードを見てみましょう。
public static main([Ljava/lang/String;)V
   L0
    LINENUMBER 11 L0
    NEW java/lang/String
    DUP
    LDC "Java"
    INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V
    ASTORE 1

   L1
    LINENUMBER 14 L1
   FRAME APPEND [java/lang/String]
    GOTO L1

   L2
    LOCALVARIABLE args [Ljava/lang/String; L0 L2 0
    LOCALVARIABLE langName Ljava/lang/String; L1 L2 1
    MAXSTACK = 3
    MAXLOCALS = 2
6 行目には LDC (Load Constant) コマンドがあります。要素を文字列定数プールからスタックにロードします。これは、コンストラクターが呼び出された時点で、オブジェクトでもある Java リテラルがすでにプールに追加されていることを意味します。これはクラスのロード中に発生しました。したがって、文字列リテラルを使用してStringクラス コンストラクターを呼び出すと、オブジェクトが 1 つだけ作成され、プールされていないメモリの場所に配置されます。

Java で Web インターフェースを実装する方法を学ぶ

出典: Dev.to JavaScript の世界には、便利で楽しい Web フレームワークが提供されていることに疑いの余地はありません。Java 開発者にとって興味深い代替手段として、オープンソースのVaadinフレームワークがあります。これを使用すると、 Java プログラミング言語のみを使用して、Web 用のグラフィカル ユーザー インターフェイス(GUI)を簡単に実装できます。HTML や JavaScript を 1 行も記述する必要はありません。百聞は一見にしかず: コーヒーブレイク#93。 Java での String クラスの仕組み。 Java で Web インターフェースを実装する方法を学ぶ - 3

Vaadinはどのように機能しますか?

スクリーンショットの左側に Java クラスが表示されます。このコードは、Apache Tomcat、Eclipse Jetty、またはその他のサーブレット コンテナなどのサーバー上で実行されます。プラットフォームが提供する API を使用して、テキスト フィールド、コンボ ボックス、データ グリッド、日付ピッカー、アップロード フィールドなどのユーザー インターフェイス (UI)コンポーネントを作成できます。これらのコンポーネントを組み合わせてビュー (ページまたは UI とも呼ばれる) を作成し、レイアウトを使用してユーザー インターフェイス (UI) コンポーネントを垂直方向、水平方向、または CSS を使用したその他の方法で配置できます。前の例では、TextFieldButton をverticalLayoutに追加して作成しました。ビューの準備ができたら、@Routeアノテーションを使用して URL 経由でビューを開くことができます。この例では、 @Route("hello")を使用して http://localhost:8080/hello で利用できるようにしました。Vaadin アプリケーションは Java の Web アプリケーションです。このフレームワークは、HTTP リクエストとレスポンスを処理するサーブレット実装 ( VaadinServlet ) を提供します。このサーブレットは、 @Routeアノテーションが付けられた Java クラスをスキャンして、ブラウザーに正しいビューを表示します。Vaadin アプリケーションが最初にリクエストされると、Vaadin はクライアント エンジンとして機能する軽量の JavaScript ファイルで応答します。このエンジンは、ブラウザーでのイベントの処理と、それを JSON メッセージとしてサーバーに送信します。VaadinServletオブジェクトはリクエストを処理し、同様に JSON レスポンスをクライアント側エンジンに返します。次に、エンジンはこのメッセージを使用して、更新する必要があるページ上の要素 (存在する場合) を更新します。Vaadin は HTTP セッションを使用して、ユーザー インターフェイスの状態を含むコンポーネント ツリーを保存します。コンポーネントのようなものは、表現とその状態 (有効/無効、キャプション、値など) を形成します。これらすべてが、言及する価値のあるレベルのセキュリティを提供します。ユーザー インターフェイス ロジックはサーバー上にあるため、攻撃者はアクセスできません。チェックはサーバー上で実行されます。たとえば、setEnabled(false)を使用してボタンが無効になっている場合、これはブラウザの単なる表面的な機能ではありません。サーバーは、無効になっているボタンに追加されたクリック リスナーでロジックを実行せず、攻撃者がブラウザの開発者ツールを悪用することを防ぎます。有効な状態を変更するか、VaadinServletを呼び出してマウス クリック (クリック イベント) をシミュレートします。

Vaadinは無料で使用できますか?

はい。Vaadin は、Apache License 2.0 に基づいて公開されているオープン ソース フレームワークです。これを使用して本格的な Web アプリケーションを作成するために何も購入する必要はありません。パフォーマンスを向上させる市販のコンポーネントがありますが、必須ではありません。たとえば、ビューをさらに迅速に作成できるようにするビジュアル デザイナーと CRUD コンポーネントがあります。購読する前に、これらのコンポーネントを無料で試すことができます。

Vaadin は JSP および JSF の代替品ですか?

はい。JSP、JSF、さらには Angular などの JavaScript フレームワークの代替として使用できます。Vaadin の顧客の多くは、これらのテクノロジーから Vaadin への移行に成功しています。

Vaadin は Spring と Jakarta EE をサポートしていますか?

はい。Vaadin は Spring および Jakarta EE (旧 Java EE) と正式に統合されています。Spring Initializr を使用して新しい Spring Boot プロジェクトを作成するときに、Vaadin を依存関係として追加できます。Jakarta EE の場合は、Jakarta EE を使用する簡単な Hello, World サンプルをダウンロードできます。この記事の執筆時点では、Jakarta EE バージョン 8 のみがサポートされています。

ヴァーディンを使うのは誰ですか?

フォーチュン 500 企業の多くが Vaadin を使用しているほか、世界中で成功を収めているスタートアップ企業や 20 万人以上の開発者が使用しています。クイック スタートガイドおよびその他のVaadin ドキュメントを確認してください。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION