溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中finalize()方法如何使用

發(fā)布時間:2021-07-01 16:59:55 來源:億速云 閱讀:149 作者:Leah 欄目:編程語言

Java中finalize()方法如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

垃圾收集器的工作過程大致是這樣的:一旦垃圾收集器準備好釋放無用對象占用的存儲空間,它首先調用那些對象的finalize()方法,然后才真正回收對象的內存。通過使用finalize(),就可以在垃圾收集器運行期間進行一些特殊的工作。下面一例就說明了finalize()的一種巧妙用法。

現(xiàn)在的商業(yè)應用系統(tǒng)越來越多的采用WEB形式。在WEB形式應用中,每一次頁面訪問是獨立的,前后不相關聯(lián),哪怕多個用戶在同一時刻訪問應用的同一個頁面,用戶相互之間也是不知道的。如果想要檢查當前有哪些用戶正在使用系統(tǒng)(如準備恢復數(shù)據(jù)備份或進行系統(tǒng)升級時,系統(tǒng)管理員都很希望知道這些信息),該怎么辦呢? 基于Servlet、Jsp技術的WEB服務器提供了隱含的Session、Application對象,利用它可以幫開發(fā)者實現(xiàn)一些信息的持續(xù)保存和共享。當用戶訪問一個WEB應用時,WEB服務器會自動創(chuàng)建一個Session對象,該對象可以供用戶在會話期內在應用的所有頁面中共享數(shù)據(jù); Application是WEB應用的一個全局對象。利用Session、Application對象,可以達到跟蹤所有用戶信息的目的。

當用戶打開瀏覽器開始請求WEB應用的登錄頁面時,WEB服務即為該客戶創(chuàng)建一個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等動作信息,使系統(tǒng)可以跟蹤當前連接的用戶信息。

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";  %>

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI