Javaのfinalize()メソッドの使い方
Java での finalize() の別の使用法 JAVA プログラミングを行ったことがある人なら誰でも、JAVA にガベージ コレクター メカニズムがあることを知っています。実行中 (通常、システム メモリが特定の制限に達すると自動的に実行されます) は、使用されなくなったオブジェクトによって占有されているメモリをリサイクルします。そのため、JAVA プログラムでは、通常、オブジェクトの作成のみを考慮し、オブジェクトのクリアについては考慮しません。 。 Finalize() は、JAVA がクラス用に提供する特別なメソッドです。
ガベージ コレクターの作業プロセスは大まかに次のとおりです。ガベージ コレクターは、不要なオブジェクトによって占有されているストレージ領域を解放する準備ができると、最初にそれらのオブジェクトの Finalize() メソッドを呼び出し、次に実際に再利用します。オブジェクトの記憶。 Finalize() を使用すると、ガベージ コレクターの実行中に特別な作業を実行できます。次の例は、finalize() の賢い使い方を示しています。
現在、商用アプリケーションシステムではWEB形式を採用するシステムが増えています。 WEB 型アプリケーションでは、各ページへのアクセスは独立しており関連性がなく、複数のユーザーが同時にアプリケーションの同じページにアクセスしたとしても、ユーザー同士はお互いを知りません。現在システムを使用しているユーザーを確認したい場合はどうすればよいでしょうか (たとえば、データ バックアップの復元やシステム アップグレードの実行の準備をしているとき、システム管理者はこの情報を知りたいと考えています)? サーブレットおよび Jsp テクノロジに基づく WEB サーバーは、次のことを行います。 hidden これには Session オブジェクトと Application オブジェクトが含まれており、開発者が一部の情報を継続的に保存および共有するのに役立ちます。ユーザーが WEB アプリケーションにアクセスすると、WEB サーバーは自動的に Session オブジェクトを作成し、ユーザーはこれを使用してセッション中にアプリケーションのすべてのページのデータを共有できます。Application は WEB アプリケーションのグローバル オブジェクトです。 Session オブジェクトと Application オブジェクトを使用すると、すべてのユーザー情報を追跡するという目的を達成できます。
ユーザーがブラウザを開いてWEBアプリケーションのログインページへのリクエストを開始すると、WEBサービスは顧客向けにセッションを作成し、その後セッションのタイムアウト時間内に顧客はこのセッションを利用します。 (タイムアウト時間は、Tomcat サーバーが各アプリケーションの web.xml ファイルで設定されるなど、設定できます)。 IEブラウザを使用する場合、SessionはクライアントIPアドレスとクライアントプログラムのプロセスIDで識別される接続と対応関係があり、同一IPアドレス、同一プロセスのWindows(IE-ファイル-新規で開いた新規ウィンドウなど) -Window) には同じ A セッションがあるため、セッションを使用してそれぞれの独立したクライアント アプリケーション接続を識別できます。
以下は例です。
処理を容易にするために、まずユーザー情報を表現する単純なクラス (user) を作成し、sessionId:
package com; public class user { public String name=""; public String sessionId=""; }
別のクラス ( testSession) は、システムが現在接続しているユーザー情報を追跡できるように、ユーザーのログイン、ログアウト、その他のアクション情報を処理するために使用されます。
package com; import java.util.Vector; import com.user; public class testSession { public user User; private Vector vsid; public testSession() { User=new user(); } public boolean verify(String username,String password) throws Exception //验证用户/密码 { return true; } public void setSessionVar(String sesid,Vector sid) { this.User.sessionId=sesid; this.vsid=sid; } private static synchronized void addappses(user puser, Vector pvsid) { //记录一个新连接的用户 int pos=-1; user l_user; if (puser==null || pvsid==null) return; for(int i=0;i l_user=(user)pvsid.get(i); if(l_user.sessionId.equals(puser.sessionId)){ pos=i; break; } } if(pos==-1){ pvsid.add(puser); } else{ pvsid.set(pos,puser); } } private static synchronized void removeappses(user puser, Vector pvsid) { //移除一个退出的用户 int pos=-1; user l_user; if (puser==null || pvsid==null) return; for(int i=0;i l_user=(user)pvsid.get(i); if(l_user.sessionId.equals(puser.sessionId)){ pos=i; break; } } if(pos!=-1){ pvsid.remove(pos); } } protected void finalize() { this.removeappses(this.User,this.vsid); } public boolean login(String username) throws Exception { //处理登录 this.User.name=username; this.addappses(this.User,this.vsid); return true; } public boolean logout() throws Exception { //处理注销 this. finalize(); this.User=null; this.vsid=null; return true; } }
各ユーザーは、ユーザーの情報を保存するために testSession オブジェクトを作成します。クラスtestSessionを記述するためには、別のファイルlogintest.jspを同時に導入する必要があります。たとえば、この JSP ファイルは、ログインおよびログアウト処理のための単純なインターフェイスを提供します。ファイルの内容は次のとおりです:
<%@ page import=" com.testSession, java.util.Vector"%> <%@page contentType="text/html;charset=GBK" %> <% request.setCharacterEncoding(response. getCharacterEncoding());%> <% String actionType=request.getParameter("actiontype"); String actionResult=""; if(actionType!=null) { if(actionType.equals("login")){ // -1- String userName=request.getParameter("username"); if(userName==null || userName.equals("")){ ; } else{ String password=request.getParameter("password"); if(password==null) password=""; testSession ts= (testSession)session.getAttribute("testSession"); if(ts!=null) { //-1.1- session.removeAttribute("testSession"); if( !ts.User.name.equals("")) ts.logout(); } ts=new testSession(); if(!ts.verify(userName,password)) { //验证用户与密码,看是否合法用户 actionResult="login fail"; //非法用户,显示错误信息 } else{ //验证成功 session.setAttribute("testSession",ts); Vector app_vts= (Vector)application.getAttribute("app_vts"); if(app_vts==null) { app_vts=new Vector(); application.setAttribute("app_vts",app_vts); } ts.setSessionVar(session.getId(),app_vts); ts.login(userName); actionResult=userName+" login success"; } } } if(actionType.equals("logout")){ testSession ts= (testSession)session.getAttribute("testSession"); if(ts!=null) { session.removeAttribute("testSession"); if( !ts.User.name.equals("")){ //-2- actionResult=ts.User.name; ts.logout(); } session.invalidate(); } actionResult=actionResult+" logout success"; } } else actionResult="null"; %>
以上がJavaのfinalize()メソッドの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。
