服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java中finalize()的另类用法(1)

做过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<pvsid.size();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<pvsid.size();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;

}

}

做过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<pvsid.size();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<pvsid.size();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;

}

}

做过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<pvsid.size();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<pvsid.size();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;

}

}

做过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<pvsid.size();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<pvsid.size();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;

}

}

扫描关注微信公众号