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 サイトの他の関連記事を参照してください。