日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java中finalize()的另類用法

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

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站制作、永福網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、永福網(wǎng)絡(luò)營銷、永福企業(yè)策劃、永福品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供永福建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

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

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

當(dāng)用戶打開瀏覽器開始請求WEB應(yīng)用的登錄頁面時,WEB服務(wù)即為該客戶創(chuàng)建一個session,此后,在session的timeout時間內(nèi),該客戶都使用這個session(timeout時間可設(shè)置,如Tomcat服務(wù)器是在各應(yīng)用的web.xml文件中設(shè)置)。如果使用IE瀏覽器, Session與客戶IP地址、客戶程序進(jìn)程ID所共同標(biāo)識的連接有對應(yīng)關(guān)系,相同IP地址、相同進(jìn)程的窗口(如通過IE-文件-新建-窗口打開的新窗口)具有同一個session,所以session可用于標(biāo)識各個獨(dú)立的客戶應(yīng)用連接。

下面是一個樣例:

為了方便處理,先建一個簡單類(user)用來表達(dá)用戶信息及存放sessionId:

 
 
 
  1. package com;
  2. public class user {
  3. public String name="";
  4. public String sessionId="";
  5. }

另一個類(testSession)用于處理用戶的login、logout等動作信息,使系統(tǒng)可以跟蹤當(dāng)前連接的用戶信息。

 
 
 
  1. package com;
  2. import java.util.Vector;
  3. import com.user;
  4. public class testSession {
  5. public user User;
  6. private Vector vsid;
  7. public testSession()
  8. {
  9. User=new user();
  10. }
  11. public boolean verify(String username,String password)
  12. throws Exception //驗(yàn)證用戶/密碼
  13. {
  14. return true;
  15. }
  16. public void setSessionVar(String sesid,Vector sid) {
  17. this.User.sessionId=sesid;
  18. this.vsid=sid;
  19. }
  20. private static synchronized void addappses(user puser,
  21. Vector pvsid) { //記錄一個新連接的用戶
  22. int pos=-1;
  23. user l_user;
  24. if (puser==null || pvsid==null)
  25. return;
  26. for(int i=0;i
  27. l_user=(user)pvsid.get(i);
  28. if(l_user.sessionId.equals(puser.sessionId)){
  29. pos=i;
  30. break;
  31. }
  32. }
  33. if(pos==-1){
  34. pvsid.add(puser);
  35. }
  36. else{
  37. pvsid.set(pos,puser);
  38. }
  39. }
  40. private static synchronized void removeappses(user puser,
  41. Vector pvsid) { //移除一個退出的用戶
  42. int pos=-1;
  43. user l_user;
  44. if (puser==null || pvsid==null)
  45. return;
  46. for(int i=0;i
  47. l_user=(user)pvsid.get(i);
  48. if(l_user.sessionId.equals(puser.sessionId)){
  49. pos=i;
  50. break;
  51. }
  52. }
  53. if(pos!=-1){
  54. pvsid.remove(pos);
  55. }
  56. }
  57. protected void finalize() {
  58. this.removeappses(this.User,this.vsid);
  59. }
  60. public boolean login(String username) throws Exception
  61. { //處理登錄
  62. this.User.name=username;
  63. this.addappses(this.User,this.vsid);
  64. return true;
  65. }
  66. public boolean logout() throws Exception
  67. { //處理注銷
  68. this. finalize();
  69. this.User=null;
  70. this.vsid=null;
  71. return true;
  72. }
  73. }

每一個用戶均建立一個testSession對象,來保存該用戶的信息。為了對類testSession進(jìn)行說明,必須同時引人另一個文件logintest.jsp。這個用于示例的JSP文件提供一個簡單的界面進(jìn)行登錄、注銷處理。文件內(nèi)容如下:

 
 
 
  1. <%@ page import=" com.testSession,
  2. java.util.Vector"%>
  3. <%@page contentType="text/html;charset=GBK" %>
  4. <% request.setCharacterEncoding(response.
  5. getCharacterEncoding());%>
  6. <%
  7. String actionType=request.getParameter("actiontype");
  8. String actionResult="";
  9. if(actionType!=null) {
  10. if(actionType.equals("login")){ // -1-
  11. String userName=request.getParameter("username");
  12. if(userName==null || userName.equals("")){
  13. ;
  14. }
  15. else{
  16. String password=request.getParameter("password");
  17. if(password==null)
  18. password="";
  19. testSession ts=
  20. (testSession)session.getAttribute("testSession");
  21. if(ts!=null) { //-1.1-
  22. session.removeAttribute("testSession");
  23. if( !ts.User.name.equals(""))
  24. ts.logout();
  25. }
  26. ts=new testSession();
  27. if(!ts.verify(userName,password)) {
  28. //驗(yàn)證用戶與密碼,看是否合法用戶
  29. actionResult="login fail";
  30. //非法用戶,顯示錯誤信息
  31. }
  32. else{ //驗(yàn)證成功
  33. session.setAttribute("testSession",ts);
  34. Vector app_vts=
  35. (Vector)application.getAttribute("app_vts");
  36. if(app_vts==null) {
  37. app_vts=new Vector();
  38. application.setAttribute("app_vts",app_vts);
  39. }
  40. ts.setSessionVar(session.getId(),app_vts);
  41. ts.login(userName);
  42. actionResult=userName+" login success";
  43. }
  44. }
  45. }
  46. if(actionType.equals("logout")){
  47. testSession ts=
  48. (testSession)session.getAttribute("testSession");
  49. if(ts!=null) {
  50. session.removeAttribute("testSession");
  51. if( !ts.User.name.equals("")){ //-2-
  52. actionResult=ts.User.name;
  53. ts.logout();
  54. }
  55. session.invalidate();
  56. }
  57. actionResult=actionResult+" logout success";
  58. }
  59. }
  60. else
  61. actionResult="null";
  62. %>

分享題目:Java中finalize()的另類用法
URL網(wǎng)址:http://www.dlmjj.cn/article/cdioodo.html