static变量生命周期 在php和java中的不同

<%!
static class Count {
    private static int count = 0;
    public static int getCount(){
        count++;
        return count;
    }
}
%>
<%
 out.print(Count.getCount());
%>

  通过浏览器连续访问,会分别输出:1,2,3,4,5,6,........

<?php
class Count{
    private static $count = 0;
    public static function getCount(){
        self::$count++;
        return self::$count;
    }
}
echo Count::getCount();
?>

  通过浏览器连续访问,会分别输出:1,1,1,1,1,1,........

总结

1、java的static变量伴随着java虚拟机的退出而消亡,java虚拟机运行期间,static变量一直存在。

2、php的static变量只针对一次请求(一次php文件的执行),php文件执行完毕,该static变量也随机消亡,再次请求(再次执行该php文件),会重新创建该static变量。

时间: 2024-11-09 15:36:40

static变量生命周期 在php和java中的不同的相关文章

static变量生命周期小研究

A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再打开C,C显示a的值为:222222222222222 就算用ie打开B,用chrome打开C,C仍然显示为:22222222222222,证明与客户端无关: 2.在IIS中,直接打开C,显示为:11111111111111111 证明静态变量的值与服务器有关 3.在IIS中,先打开B,再打开C,C

java 静态变量生命周期(类生命周期)

Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放内存空间.static变量的生命周期取决于类的生命周期 类初始化顺序: 静态变量.静态代码块初始化 构造函数 自定义构造函数 结论:想要用static存一个变量,使得下次程序运行时还能使用上次的值是不可行的.因为静态变量生命周期虽然长(就是类的生命周期),但是当程序执行完,也就是该类的所有对象都已经

关于堆内存和普通变量生命周期的问题

来源:孙鑫老师c++教程第7集 在创建非模态对话框时 void CMyboleView::OnDialog(){ // TODO: Add your command handler code here方法一 TestDlg *ptdlg=new TestDlg(this); ptdlg->Create(IDD_DIALOG1,this); ptdlg->ShowWindow(TRUE); 方法二 CDialog1 dlg; dlg.Create(IDD_DIALOG1,this); dlg.S

[shell] shell 变量生命周期, source, export

1. shell 的派生 用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令, 或声明变量,也可以创建并运行shell脚本程序.运行shell脚本程序时,系统将创建一个子shell. 此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell.当一个脚本程序运行完毕,脚本shell将终止,返回到执行该脚本之前的shell. 从这种意义上来说,用户可以有许多 shell,每个shell都是由某个sh

react篇章-React State(状态)-将生命周期方法添加到类中

将生命周期方法添加到类中 在具有许多组件的应用程序中,在销毁时释放组件所占用的资源非常重要. 每当 Clock 组件第一次加载到 DOM 中的时候,我们都想生成定时器,这在 React 中被称为挂载. 同样,每当 Clock 生成的这个 DOM 被移除的时候,我们也会想要清除定时器,这在 React 中被称为卸载. 我们可以在组件类上声明特殊的方法,当组件挂载或卸载时,来运行一些代码: <!DOCTYPE html> <html> <head> <meta cha

Java内存区域和变量生命周期

在一台电脑上的内存存储区域分为6种: 1.寄存器: 寄存器是运行最快的,寄存器在系统中早就已经存在了,寄存器的数量是有限的,被严格要求            Java程序员不能显示的调用寄存器 2.栈:   栈中存储着基本数据类型的变量以及引用变量 栈中元素在超出其生命周期后会自动销毁             栈中元素一经创建,系统会为其分配内存空间,在其内存空间里存取的值是真值(真实存放的值)            栈中元素互不影响 每个在栈中的变量都有其自己对应的内存空间 里面存取着值  

PoEdu--------------数据的本质、static、生命周期和作用域

数据类型的本质 数据类型:所谓的数据类型都是帮我们定义好一个大小,我们不用一个bit一个bit的操作. 变量名:一个固定内存大小的别名,根据这个别名可以操作内存. 表示方式:1.基础数据类型. 2.自定义数据类型(typedef)例:(typedef unsigned int uint; #define uint unsigned int) 使用 typedef必须加分号结束并且用uint代替unsigned int.是我们更好的理解程序的语义,本质并没有发生改变,并没有创建新的数据类型. 使用

面向过程—面向对象(C++的封装,this)_内存四区_变量生命周期

1.面向对象主要涉及  构造函数.析构函数.虚函数.继承.多态等. 2.对各种支持 的底层实现机制 c语言中,数据 和 处理数据的操作(函数) 是分开来声明,即语言本身并没有支持 “数据和函数”的关联性. 在C++中,通过抽象数据类型(abstract data type, ADT),在类中定义数据和函数,来实现数据和函数直接的绑定. C++成员数据:static.nonstatic C++成员函数:static.nonstatic.virtual C++中的类class从面向对象理论出发,将变

switch case里的变量生命周期

1 #include <stdio.h> 2 3 int main() 4 { 5 6 int isw = 0; 7 switch(isw) { 8 9 case 1: //just lables 10 int a = 0; //a在这里定义,有效期到switch的},如果直接走了case2,此变量是没有定义的 ,所以编译不过. 11 break; //trans to goto statement 12 case 2: 13 break; 14 default: 15 break; 16 }