搜尋
首頁Javajava教程Java的finalize()方法怎麼使用

Java的finalize()方法怎麼使用

Apr 30, 2023 pm 02:43 PM
javafinalize()

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檔案提供一個簡單的介面進行登入、登出處理。文件內容如下:

      

以上是Java的finalize()方法怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。