首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中如何最好地使用静态

在Java中如何最好地使用静态
EN

Stack Overflow用户
提问于 2015-03-17 11:33:14
回答 2查看 186关注 0票数 1

我阅读了开发人员在其他线程上关于使用静态变量的几条评论:

  1. 它消耗内存:当我们从定义/创建静态变量的类退出时,是否有一种释放被静态变量占用的内存的方法?
  2. 在内存管理方面,使用静态变量和静态变量之间有什么区别,以防您无法避免使用它。

我理解使用静态是违背OOPS概念的,内存管理很差,这违背了封装的概念。如果我使用5-6静态变量,影响会非常大,以至于我不得不停止使用它。或者可能是来自你们的人,可以建议我在Java中实际使用静态,这是一种面向对象的编程语言?

EN

回答 2

Stack Overflow用户

发布于 2015-03-17 11:40:44

它消耗内存:当我们从定义/创建静态变量的类退出时,是否有一种释放被静态变量占用的内存的方法?

好的。点1->所有变量,不管是静态的还是其他的,都占用内存。因此,它的成本内存是不准确的。

接下来,静态变量和实例变量之间的区别在于它们何时变得不可访问(为GC做好准备)。当您超出实例的范围时,实例级别的实例将变得不可访问,但是使用静态引用引用的实例,除非显式地设置为null,否则它们将是可访问的。

所以,

代码语言:javascript
运行
复制
static Object o = new Object();
o=null ;

不会将对象保存在内存中。如果没有显式地设置为null,则o指向的实例将一直存在,直到定义它的类获得GCed,而当加载该类的类加载器获得GCed时(前提是引用尚未转义),GCed就会发生。

挫败了封装的概念。

静态字段不会破坏封装。封装基本上不允许访问内部结构。在这一点上可能有多个论点,所以我不讨论这个问题。

如果我使用5-6静态变量,影响会非常大,以至于我不得不停止使用它。

静态是设计选择的,而不是实现选择。在我看来,使用静态作为一个失败的选项。

票数 1
EN

Stack Overflow用户

发布于 2015-03-17 11:41:35

这是有争议的。

理想情况下,您希望拥有与所有实例相同的静态事物,即与类的概念相关的东西,而不是单个实例(例如)。Integer.parseInt()

静态变量/常量与之相关,例如默认值(Dog.defaultNumberOfLegs=4)。

静态的可变事物更棘手,而且,imho是共享状态的一个讨厌的缩写。这对于快速的实验是很好的,但是在你的生产代码中很难保存,因为由于模拟它的难度越来越大,静态的东西变得很难测试。如果您希望事物是唯一的,那么一旦您转到实际的生产代码中,就应该使用它。

撇开这一点不谈,5个或6个变量不应该成为太多的内存麻烦。它更多地与优雅/可接触性/可测试性有关。这是所有“正常”的情况。如果您真的投入其中,您可以使用单个静态变量创建引用链,这些变量会阻塞您的内存,但这不是一个现实的场景。

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

https://stackoverflow.com/questions/29098003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档