类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,为了节省系统内存开销、共享资源,应该将一些变量声明为静态变量。

代码一:

public class MemoryTest {

static class Data{

private int week;

private String name;

Data(int i, String s){

week = i;

name = s;

}

}

Data weeks[] = {

new Data(1,"monday"),

new Data(2,"Tuesday"),

new Data(3,"Wednesday"),

new Data(4,"Thursday"),

new Data(5,"Friday"),

new Data(6,"Saturday"),

new Data(7,"Sunday")

};

public static void main(String[] args) {

final int N = 20000;

MemoryTest test = null;

for (int i = 0; i <=N; i++) {

test = new MemoryTest();

}

System.out.println(test.weeks.length);

}

}

代码二:

public class MemoryTest {

static class Data{

private int week;

private String name;

Data(int i, String s){

week = i;

name = s;

}

}

static Data weeks[] = {

new Data(1,"monday"),

new Data(2,"Tuesday"),

new Data(3,"Wednesday"),

new Data(4,"Thursday"),

new Data(5,"Friday"),

new Data(6,"Saturday"),

new Data(7,"Sunday")

};

public static void main(String[] args) {

final int N = 20000;

MemoryTest test = null;

for (int i = 0; i <=N; i++) {

test = new MemoryTest();

}

System.out.println(test.weeks.length);

}

}

应该发现上面那两个类的区别吧

Data weeks[] 与 static Data weeks[]

代码一会在内存中保存20000个weeks的副本,而代码二则在内存中保存1个weeks的副本,然后共享该副本,这样的话就不会造成内存的浪费。

虽然静态的变量能节约大量的内存,但是并不是所有的地方都适合用,建议在下列条件都符合的情况下,尽量用静态变量:

(1)变量所包含的对象体积较大,占用内存较多。

(2)变量所包含的对象生命周期较长。

(3)变量所包含的对象数据稳定。

(4)该类的对象实例有对该变量所包含的对象的共享需求。

如果变量不具备上述特点,建议不要轻易使用静态变量。

最后,再提一点内存的优化,就是有关对象的重用,比如:对象池和数据库连接池等。那样的话,是很节约内存空间的,不过,在用的时候要考虑各个方面,比如:运行环境的内存资源的限制等。为了防止对象池中的对象过多,要记得清除。

java 静态变量的使用_java的static静态变量是不是不安全的?应该如何正确的使用他呢...相关推荐

  1. java中静态变量的作用_Java中static变量作用和用法详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  2. java 成员变量的初始化_Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  3. java未知变量的类型_Java语言中类、变量及方法的声明 | 学步园

    类声明 [ public][ abstract][ final] class NameOfClass [ extends Super][ implements Interfaces] pubilc:声 ...

  4. java 代码块的意义_Java基础(9) - 静态、代码块

    关键字 加载顺序 .类初始化 .方法区.进程 存在作用: 变量 -> 全局共享 (跨线程,但不支持跨进程) 方法 -> 不用类实例就能直接使用,避免New的消耗.(为什么静态方法不能访问非 ...

  5. java 变量 动态类型_Java:如何将变量从一种类型动态转换为另一种类型?

    慕斯卡3215842 是的,可以使用反射Object something = "something";String theType = "java.lang.String ...

  6. java简述什么是标识符_Java概述(标识符、变量、基本数据类型)

    Java语言的跨平台原理 跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性.该特性是由JVM实现的,我们编 ...

  7. java怎么用doss窗口_Java基础1-环境变量的配置

    一.为什么要配置环境变量? 1.当我们安装好JDK以后,Windows+R->cmd->javac回车,这时会出现: 这是因为我们刚安装好的JDK文件,windows操作系统是无法找到ja ...

  8. java变量和运算符_Java(二)—— 变量和运算符

    java 的循环结构 java 的循环结构 java 的循环结构 1:while 循环 :2:do-while 循环 3:for 循环 ** while 循环 while是最基本的循环,它的结构为: ...

  9. java创建目录时带权限_java – 无法在外部存储中创建目录,尽管权限显然设置正确...

    我有 在我的清单文件中,但是尝试创建一个目录时我失败了 Log.d(LOG_STRING, android.os.Environment.getExternalStorageState() ); ja ...

最新文章

  1. 四月青少年编程组队学习(Python一级)Task01
  2. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。
  3. mysql 写入性能瓶颈_如何通过性能调优突破MySQL数据库性能瓶颈?
  4. 强烈推荐asp.net数据访问的官方指南系列 (Data Access Tutorials)
  5. 顺通车间扫码出入库管理系统仓库扫码软件
  6. linux sdr 2832u软件无线电,使用R820T+RTL2832U玩软件无线电
  7. ydui时间组件报错nvalid prop: custom validator check failed for prop “startDate“.
  8. 个人档案php源码,php人事档案管理系统
  9. 炫彩的按钮渐变动画——css3
  10. 一文说明前端和后端的区别、职业发展以及就业前景!
  11. 桂林理工大学 程序设计实践课程 实习报告
  12. 图的创建以及遍历(邻接矩阵法存储图)
  13. python中re.sub函数
  14. 有控制雷电武器的java游戏_雷电飞机射击游戏 JAVA
  15. GPT3类自动补全助手,个体+超级团队成为可能 | 技术趋势
  16. 2021年全国大学生物联网设计竞赛(华为杯)华北赛区决赛获奖名单
  17. 大学计算机基础课程作业第4-6章,大学计算机基础课程作业(4—6章)(5页)-原创力文档...
  18. RabbitMQ 通俗易懂 简单开发(一)
  19. Windows 应急响应篇(保姆级检查流程)
  20. python拼图游戏_Python加pyGame实现的简单拼图游戏实例

热门文章

  1. 通用职责分配软件原则之3-低耦合原则
  2. golang import中的.和_的使用,import的几种方式点,下划线,别名
  3. gocd_如何将DangerJS集成到GoCD管道中
  4. C#入门,基本的整型输入
  5. 如何向女朋友解释什么是HTTP协议
  6. Python数据库编程pymysql
  7. __name__ == ‘__main__‘的原理
  8. meshgrid 的使用方法
  9. 远程桌面复制文件到本地磁盘
  10. [深度学习TF2][RNN-LSTM]文本情感分析包含(数据预处理-训练-预测)