Comment utiliser la méthode finalize() de Java
Java est une utilisation alternative de finalize() Quiconque a fait de la programmation JAVA sait qu'il existe un mécanisme de garbage collector dans JAVA. runtime (généralement exécuté automatiquement lorsque la mémoire système est faible jusqu'à une certaine limite), la mémoire occupée par les objets qui ne sont plus utilisés sera recyclée. Par conséquent, dans les programmes JAVA, nous envisageons généralement uniquement de créer des objets et ne nous soucions jamais de l'effacement. objets. Finalize() est une méthode spéciale fournie par JAVA pour les classes.
Le processus de travail du garbage collector est à peu près le suivant : une fois que le garbage collector est prêt à libérer l'espace de stockage occupé par les objets inutiles, il appelle d'abord la méthode finalize() de ces objets, puis recycle réellement les objets. En utilisant finalize(), vous pouvez effectuer un travail spécial pendant que le garbage collector est en cours d'exécution. L'exemple suivant illustre une utilisation intelligente de finalize().
Les systèmes d'applications commerciales d'aujourd'hui adoptent de plus en plus la forme du WEB. Dans les applications de type WEB, chaque visite de page est indépendante et non liée. Même si plusieurs utilisateurs visitent la même page de l'application en même temps, les utilisateurs ne se connaissent pas. Que devez-vous faire si vous souhaitez vérifier quels utilisateurs utilisent actuellement le système (par exemple, lors de la préparation d'une restauration de données ou d'une mise à niveau du système, les administrateurs système aimeraient connaître ces informations fournies par les serveurs WEB basés sur la technologie Servlet et Jsp) ? caché Il contient des objets Session et Application, qui peuvent aider les développeurs à réaliser la sauvegarde et le partage continus de certaines informations. Lorsqu'un utilisateur accède à une application WEB, le serveur WEB créera automatiquement un objet Session, qui pourra être utilisé par l'utilisateur pour partager des données dans toutes les pages de l'application pendant la session. L'application est un objet global de l'application WEB. À l’aide des objets Session et Application, vous pouvez atteindre l’objectif de suivre toutes les informations utilisateur.
Lorsque l'utilisateur ouvre le navigateur et commence à demander la page de connexion de l'application WEB, le service WEB crée une session pour le client. Après cela, dans le délai d'expiration de la session, le client utilise. cette session (délai d'expiration Il peut être défini, par exemple, le serveur Tomcat est défini dans le fichier web.xml de chaque application). Si vous utilisez le navigateur IE, la session a une relation correspondante avec la connexion identifiée conjointement par l'adresse IP du client et l'ID de processus du programme client Windows avec la même adresse IP et le même processus (comme une nouvelle fenêtre ouverte via IE-File-New). -Window) ont la même session A, la session peut donc être utilisée pour identifier les connexions d'application client individuelles.
Ce qui suit est un exemple :
Afin de faciliter le traitement, créez d'abord une classe simple (utilisateur) pour exprimer les informations de l'utilisateur et stocker l'ID de session :
package com; public class user { public String name=""; public String sessionId=""; }
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; } }
<%@ 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"; %>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.
