Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态(类)变量的生存期

静态(类)变量的生存期
EN

Stack Overflow用户
提问于 2011-05-28 11:08:34
回答 3查看 11.3K关注 0票数 4

有相当一段时间,我很高兴地认为,只要应用程序运行,静态实例变量就存在。然而,令我惊愕和惊慌的是,我觉得这不是真的。

仅仅为了测试,我创建了一个字符串的静态列表,并且在我的主activity类中,重写了onDestroy方法来打印一条消息来验证应用程序是否退出。在onCreate方法中,我只是添加了一个新的string,并打印了列表的内容。我发现列表的大小不断增加,前面添加的所有字符串值仍然存在。

我甚至在这里读过一些地方,以便实例变量与应用程序一样存在,但我担心情况并非如此。

更准确地说,我在为Android使用Facebook时意识到了这个问题。我已经看到,AuthListener类中侦听器列表中的SessionEvents实例随着时间的推移而不断增加。因此,每当应用程序启动,用户登录使用FB时,侦听器方法就会被触发的次数与SessionEvents类中存在的实例一样多。

以前有没有人注意到这一点,我是否在理解android的工作方式上犯了什么重大错误?

什么给的?

谢谢你的阅读!

更新

我被BalusCrdineiu纠正了。我真的不是有意在这里制造一个关于实例和类变量的混乱。唉,在我急于提出我的问题时,我犯了一个我不希望犯的错误。我非常清楚staticinstance变量之间的区别。我只是打算编写class变量,但不太清楚如何将静态变量称为instance变量。

不过,我的问题仍然存在。@MisterSquonk --不,我不想混淆我的Activity何时结束以及应用程序何时被破坏。下面是我在一个示例中尝试的--我只有一个Activity作为Main。当我按下这个Activity的后退按钮时,我假设Activity从堆栈中移除,而应用程序也被销毁。我已经启动了任务管理器来验证我的应用程序不再运行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 10:08:24

因此,我发布了同样的问题,不幸的是,在安卓开发者Google组中,我犯了同样的错误,将static变量命名为instance变量。

我收到了一些非常好的答复,尤其是来自Kostya的回复。我在这个小组的互动帮助我掌握了Android平台的基本“规则”。

希望消息线程也能帮助你。

票数 6
EN

Stack Overflow用户

发布于 2011-05-28 11:20:23

您似乎没有区分静态变量和实例变量。静态变量是在类本身上定义的。实例变量仅存在于类实例中。

示例:

代码语言:javascript
运行
AI代码解释
复制
class Test {
    public static int a;
}

变量a是在类本身定义的,而不是在类的实例上定义的。每个实例都将访问同一个变量。如果一个实例将a的值设置为5,则其他每个实例都会将该值视为5。一旦实例消失,变量就不会消失,因为它与任何实例(它是一个类变量)根本没有关联。它将继续存在,直到时间结束(或直到应用程序退出,两者以第一位为准)。

另一方面,下面的示例使用实例变量:

代码语言:javascript
运行
AI代码解释
复制
class Test {
    public int a;
}

这个变量只能从类的实例中访问。每个实例都有一个不同的变量副本。一旦实例被销毁,变量就会与它一起运行。

为了说明:

代码语言:javascript
运行
AI代码解释
复制
import java.util.List;
import java.util.ArrayList;

class Test {
  // instanceVar will be initialized whenever a new Test object is created
  private List<Integer> instanceVar = new ArrayList<Integer>();

  // staticVar will be initialized right now
  private static List<Integer> staticVar = new ArrayList<Integer>();

  public void updateInstanceVar() {
    instanceVar.add(1);
    instanceVar.add(2);
  }

  public void updateStaticVar() {
    staticVar.add(1);
    staticVar.add(2);
  }

  public static void main(String[] args) {
    Test test1 = new Test();
    test1.updateInstanceVar(); // test1.instanceVar = [1, 2]
    test1.updateStaticVar();   // Test.staticVar    = [1, 2]

    Test test2 = new Test();
    test2.updateInstanceVar(); // test2.instanceVar = [1, 2]
    test2.updateStaticVar();   // Test.staticVar    = [1, 2, 1, 2]
  }
}
票数 6
EN

Stack Overflow用户

发布于 2011-05-28 11:21:02

当应用程序销毁实例变量时,一些gui部件默认保存状态,然后在onCreate方法中恢复状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163828

复制
相关文章
类的静态成员变量
类的静态成员要在类内声明,类外定义。这样做的原因参照 here类外定义时又要注意哪些内容呢?不在头文件中定义静态成员变量这是“尽量不在头文件中定义变量”(参考)的延伸。错误的代码示例class.h#ifndef __CLASS_H#define __CLASS_Hclass A{ static int var;};int A::var = 1;#endifmain.cppint main() { return 0;}test1.cpp#include "class.h"test2
村子里的设计师
2023/05/20
1.2K0
静态类、静态方法、静态变量的区别
一直疑惑静态类、静态方法、静态变量的内存驻用情况。今天就写了个Demo来深入八一八他们的区别和注意点。
西柚dzh
2022/06/09
1.7K0
静态类、静态方法、静态变量的区别
7.5 变量的存储方式和生存期
4、全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。
小林C语言
2019/07/12
7730
6.7 变量的存储方式和生存期
函数中的局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间 的。在调用该函数时,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这 些存储空间,因此这类局部变量称为自动变量
小林C语言
2019/08/19
6230
JVM运行时的数据区,静态变量,成员变量,类变量
①声明的位置 局部变量:方法体们中,形参,代码块们中 成员变量:类中方法外 - 类变量:有static修饰 - 实例变量:没有static修饰 ②可用的修饰符 局部变量:final 成员变量:public、protected、private、final、static、volatile、transient ③值存储的位置 局部变量:栈 实例变量:堆 类变量:方法区。 ④作用域 局部变量:从声明处开始,到所属的]结束口实例变量:在当前类中“this.”(有时this.可以缺省),在其他类中“对象名.”访问 类变量:在当前类中“类名.”(有时类名.可以省略),在其他类中“类名.” 或“对象名.”访问 ⑤生命周期 局部变量:每一个线程,每一次调用执行都是新的生命周期口 实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量是独立的 类变量:随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的
名字是乱打的
2022/05/13
1.1K0
JVM运行时的数据区,静态变量,成员变量,类变量
PHP类的静态(static)方法和静态(static)变量使用介绍
2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
用户7657330
2020/08/14
4.3K0
Java中静态变量(类变量)、实例变量、局部变量和成员变量
学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。
用户8639654
2021/07/19
2.4K0
7.5 C语言变量的存储方式和生存期
4、全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。
小林C语言
2020/12/07
8290
7.5 C语言变量的存储方式和生存期
详解java中静态方法有哪些_java类中的静态变量
定义: 在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。
全栈程序员站长
2022/11/01
1.6K0
spring类中给静态变量赋值
大家在用spring读取配置文件中的数据的时候,一定用过@Value这个注解。但有时候如果我们想要给静态变量赋值发现就不管用了,给静态变量赋值,要把@Value注解放到静态变量的set方法上。
一缕82年的清风
2021/12/06
3.1K0
C++类中静态变量和静态方法使用介绍
刷剑指offer第64题涉及到类内静态成员与方法的知识,有点模糊,找了两篇博客整理一下。
全栈程序员站长
2022/09/01
2.8K0
【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )
静态成员归属 : 静态成员变量 是特殊的成员变量 , 是 类所有的 成员 , 而不是对象所有的成员 ;
韩曙亮
2023/10/15
2.1K0
【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )
面试题3(对于类的静态变量的理解)
运行下面程序,请选择输出结果 public class x( private static int a pubilc static void main(String[ ] args) { modify(a) System. out.println(a); } public static void modify(int a) { a++; } (a) 0 (b) 1 (0) 2 (d) 3 考点: 考察求职者对于类的静态变量的理解。 出现频率: ★★★★ 【面试题解析】类的静态变量a在modify()方法
Java学习
2018/04/13
6210
C++:43---派生类向基类转换、静态/动态的类变量
一、继承中类的类型转换规则 我们普通的编程规则规定,如果我们想把引用或指针绑定到一个对象上,则引用或指针的类型必须与所绑定的对象的类型一致或者对象的类型含有一种可接受的const类型转换规则。但是继承关系中的类比较例外,其规则如下: ①我们可以将基类的指针或引用绑定到派生对象上 #include <iostream>class A {};class B:public A{};int main(){ A *a; B b; a = &b; return 0;} ②即使不是指针/引用类型,我们也可以将派生类转换为
用户3479834
2021/02/03
1.9K0
C++:43---派生类向基类转换、静态/动态的类变量
静态局部变量和静态全程变量static。
static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。
全栈程序员站长
2022/08/14
1.2K0
静态局部变量和静态全程变量static。
普通全局变量,静态局部变量,静态全局变量
普通全局变量: 静态局部变量: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void func() { static int b
大忽悠爱学习
2021/03/02
2K0
普通全局变量,静态局部变量,静态全局变量
java静态变量,静态方法的理解
1,外部调用静态方法/变量可以使用类名.方法名/变量名的方式调用,也可以使用对象名.方法名/变量名,但是实例方法只能通过后者,因为调用静态方法变量无需实例化.
全栈程序员站长
2022/06/30
7910
关于静态/常量类型 修饰 类/方法/变量的部分理解
Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。
知识浅谈
2021/12/07
9130
静态变量和实例变量的区别
静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。
唐怀瑟
2018/08/30
1.2K0
java静态全局变量和全局变量的区别_java静态全局变量
Java的面向对象的代码结构会使在多个位置引用变量更加困难。有时也很难确定给定变量应属于哪个类,尤其是当它是一个广泛使用的值(例如数据库连接器或数学常数)时。
全栈程序员站长
2022/09/24
4.7K0
java静态全局变量和全局变量的区别_java静态全局变量

相似问题

静态类变量的生存期

20

类中静态只读变量的生存期

22

静态变量的生存期

23

Java静态类的生存期

40

静态类成员/类引用的生存期?

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档