首頁 >Java >java教程 >Java的finalize()方法怎麼使用

Java的finalize()方法怎麼使用

王林
王林轉載
2023-04-30 14:43:06984瀏覽

Javafinalize()的另類用法,做過JAVA程式設計的都知道,在JAVA中有一種垃圾收集器的機制,當它運行時(通常在系統內存低到一定限度時自動運行),會回收不再使用的對象所佔用的內存,所以,在JAVA程序中,我們通常只考慮創建對象,而從不關心對象的清除。 Finalize()是JAVA為類別提供的一種特殊方法。

垃圾收集器的工作過程大致上是這樣的:一旦垃圾收集器準備好釋放無用物件佔用的儲存空間,它首先呼叫那些物件的finalize()方法,然後才真正回收物件的記憶體。透過使用finalize(),就可以在垃圾收集器運作期間進行一些特殊的工作。下面一例就說明了finalize()的一種巧妙用法。

現在的商業應用系統越來越多的採用WEB形式。在WEB形式應用中,每一次頁面訪問是獨立的,前後不相關聯,即使多個用戶在同一時刻訪問應用的同一個頁面,用戶相互之間也是不知道的。如果想要檢查目前有哪些使用者正在使用系統(如準備恢復資料備份或進行系統升級時,系統管理員都很希望知道這些資訊),該怎麼辦呢? 基於Servlet、Jsp技術的WEB伺服器提供了隱含的Session、Application對象,利用它可以幫開發者實現一些資訊的持續保存與分享。當使用者存取一個WEB應用程式時,WEB伺服器會自動建立一個Session對象,該對象可以供使用者在會話期內在應用的所有頁面中共享資料; Application是WEB應用的一個全域對象。利用Session、Application對象,可以達到追蹤所有使用者資訊的目的。

當使用者開啟瀏覽器開始要求WEB應用程式的登入頁面時,WEB服務即為該客戶建立一個session,此後,在session的timeout時間內,該客戶都使用這個session(timeout時間可設定,如Tomcat伺服器是在各應用的web.xml檔案中設定)。若使用IE瀏覽器, Session與客戶IP位址、客戶程式進程ID所共同識別的連線有對應關係,相同IP位址、相同進程的視窗(如透過IE-檔案-新建-視窗開啟的新視窗)具有同一個session,所以session可用來識別各個獨立的客戶應用連線。

下面是一個範例:

為了方便處理,先建一個簡單類別(user)用來表達使用者資訊及存放sessionId:

package com;  public class user {  public String name="";  public String sessionId="";  }

另一個類別( testSession)用於處理使用者的login、logout等動作訊息,使系統可以追蹤目前連線的使用者資訊。

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中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除