iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中finalize()方法如何使用
  • 476
分享到

Java中finalize()方法如何使用

2023-06-17 13:06:57 476人浏览 独家记忆
摘要

Java中finalize()方法如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java中finalize()的另类用法,做过JAVA编程的都知道,在J

Java中finalize()方法如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Java中finalize()方法如何使用

本文链接: https://www.lsjlt.com/news/289299.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中finalize()方法如何使用
    Java中finalize()方法如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java中finalize()的另类用法,做过JAVA编程的都知道,在J...
    99+
    2023-06-17
  • java中的finalize怎么使用
    在Java中,finalize()是一个方法,用于对象在被垃圾收集器回收之前进行清理操作。finalize()方法由垃圾收集器在确定...
    99+
    2023-08-25
    java finalize
  • Java对象销毁和finalize方法怎么使用
    这篇文章主要介绍了Java对象销毁和finalize方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java对象销毁和finalize方法怎么使用文章都会有所收获,下面我们一起来看看吧。对象的销毁在C...
    99+
    2023-07-02
  • Java之对象销毁和finalize方法的使用
    目录对象的销毁finalize方法GC对对象的回收在finalize方法中,是否重新给自己指定一个引用来避免被GC回收?如果finalze方法中出现死循环会发生什么?如果对象的创建出...
    99+
    2024-04-02
  • C#中Dispose和Finalize方法使用介绍
    一、前言 在C#中,由于有了垃圾回收机制的支持,对象的析构和以前的C++有了很大的不同,这就要求程序员在设计类型的时候,充分理解.NET的机制,明确怎样利用Dispose方法和Fin...
    99+
    2024-04-02
  • Java详解对象终止方法finalize()的用法
    finalize()方法机制 Java 语言提供了对象终止(finalization)机制来允许开发人员提供对象被销毁之前的自定义处理逻辑。 当GC去回收垃圾时, 总会在即将回收之前...
    99+
    2024-04-02
  • 关于Java中finalize析构方法的作用详解
    目录一. 析构方法1. 概念2. 作用3. 特点二. 基本使用1. finalize简介2. 代码案例2.1 Counter计数器2.2 CounterTest测试类四. 结语一. ...
    99+
    2023-05-19
    Java finalize析构方法 Java析构方法作用 Java finalize
  • 深入了解Java中finalize方法的作用和底层原理
    目录finalize方法是什么finalize方法与C++的析构函数的区别finalize方法合适清理的对象可以触发finalize执行的方法finalize实现对象再生问题fina...
    99+
    2022-12-29
    Java finalize方法作用 Java finalize方法原理 Java finalize方法 Java finalize
  • java中getinfo方法如何使用
    在Java中,getInfo方法的使用取决于它的定义和返回值类型。通常情况下,getInfo方法用于获取对象的某些信息,并将该信息返...
    99+
    2023-08-16
    java getinfo
  • Java 中main方法如何使用
    这篇文章给大家介绍Java 中main方法如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。让我们先从最简单的"单线程"来入手:(1)带引号说明只是相对而言的单线程,(2)基于java。clas...
    99+
    2023-06-17
  • java中executeQuery()方法如何使用
    在Java中,executeQuery()方法是用于执行SELECT语句并返回查询结果的方法。使用executeQuery(...
    99+
    2023-08-09
    java executeQuery()
  • java中addMouseListener()方法如何使用
    这篇文章主要讲解了“java中addMouseListener()方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中addMouseListener()方法如何使用”吧!j...
    99+
    2023-06-21
  • java中Calendar.add()方法如何使用
    在Java中,可以使用Calendar类的add()方法来对日期和时间进行加/减操作。add()方法有两个参数,第一个参数是表示日期...
    99+
    2023-08-15
    java Calendar.add()
  • 怎么在Java对finalize方法实现禁止
    这篇文章将为大家详细讲解有关怎么在Java对finalize方法实现禁止,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是finalize方法finalize()方法被定义在Java.la...
    99+
    2023-05-31
    java finalize fin
  • java中的format方法如何使用
    Java中的format方法可以通过以下方式使用:1. 使用格式化字符串作为参数:```javaString formattedSt...
    99+
    2023-09-29
    java
  • java中的equals方法如何使用
    在Java中,equals()方法用于比较两个对象是否相等。equals()方法是Java中的Object类的方法,所有的对象都继承...
    99+
    2023-09-15
    java
  • List方法如何在Java中使用
    本篇文章给大家分享的是有关List方法如何在Java中使用  ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java List 用法实例详解Java中可变数组的原理就...
    99+
    2023-05-31
    java list ava
  • java中的sort方法如何使用
    在Java中,可以使用`java.util.Collections.sort()`方法来对集合进行排序。`sort()`方法接受一个...
    99+
    2023-08-15
    java sort
  • Class.forName方法如何在java中使用
    Class.forName方法如何在java中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言在做JAVA EE开发的过程中,更多的是使用框架来提高开发效率.越来越发...
    99+
    2023-05-31
    java class.forname fo
  • == 与equals()方法如何在Java中使用
    == 与equals()方法如何在Java中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java中的== 和equals()方法:Java中的数据类型,可分为两类:1...
    99+
    2023-05-31
    java == equals()
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作