何时使用静态变量/方法以及何时在Java中使用实例变量/方法? [关闭]

问题描述 投票:12回答:5

我想问一个问题,什么时候使用静态变量/方法或者在Java中的其他情况下实例变量/方法是有利的?

我知道这取决于某些情况(比如将util-classes编程为静态方法),但我们可以声明类似于一般策略的东西吗?

java static instance
5个回答
18
投票

在新手级别:

在以下情况下使用实例变量:每个变量对于不同的对象具有不同的值例如。学生姓名,卷号等。

在以下情况下使用静态变量:变量的值独立于对象(对于每个对象不唯一)。例如。学生人数。


6
投票

静态变量:当您需要在整个应用程序中使用的东西时,每个实例都需要知道变量。

实例变量:它与对象和对象的属性不同,而静态变量是Class的属性。

静态功能:用于做一些实用任务。无需任何对象声明即可调用。

实例功能:需要对象来调用此功能。

static或instance取决于您的用途。


6
投票

static变量通常用于常量,如果是类,则对所有实例都是通用的。例如,许多人不喜欢在代码中“硬编码”常量;他们喜欢用一个有意义的名字制作一个public staticprivate static变量,并在他们的代码中使用它,这应该使代码更具可读性。

简而言之

任何独立于类实例状态的方法或变量都应该是静态的。


1
投票

将静态变量视为类范围的全局变量,或者,如果使用“final”关键字,则将其视为类范围的全局常量。明智地使用静态非最终变量 - 它们在所有类实例之间共享,并且可能导致一些非明显的错误。我建议完全避免使用可变的静态变量 - 有少数情况下,使用依赖注入无法实现这种需求。

使用全局变量总是会使单元测试更加困难 - 需要考虑的另一个缺点。


0
投票

至于方法:根据定义,每个方法Foo.method(Bar1 b1, Bar2, b2)总是可以有其他等效设计:

Bar.altmethod(Foo f, Bar b2)

static staticMethod(Foo f, Bar b1, Bar b2)

你也可以将后一种方法作为一个实例方法包装在一个服务类中,该服务类本身就是一个单例(因此该方法的静态有点隐藏它所在的类)。

让你的方法作为你的一个方法参数(静态版本)的类的实例方法的唯一令人信服的理由是,当你期望那个类的子类,并且它可能对那些子类有用时有一个专门的方法实现。

想像

class GeographicalFigure {
    Object quadrature() { ... }
}

保留以后添加的可能性可能是有用的

class Circle extends GeographicalFigure {
    Object quadrature() {
        throw new ThisIsNoGoodException();
    }
}

除此之外,您的所有选择都基本相同。

© www.soinside.com 2019 - 2024. All rights reserved.