在Java中如何以及在何处使用Static修饰符?

zen*_*ngr 12 java static

我们应该如何以及在何处使用Static修饰符:

1.领域和
2.方法?

对于例如java.lang.Math类中,字段的方法,如ABS(),ATAN(),COS()等是静态的,即它们可以作为被访问:Math.abs()

但为什么这是一个好习惯呢?

说,我不保持静态并创建类的对象并访问它,无论如何我都可以,我将得到一个警告,你试图以非静态方式访问静态方法(如指出通过@duffymo,而不是Math类).

更新1:

因此,效用方法应该是静态的,即其工作仅取决于方法参数.那么,例如,该方法updateString(String inputQuery, String highlightDoc)应该是这个问题中的静态方法吗?

Ale*_*lex 21

您可以将"静态"方法或字段视为在类定义之外声明它.换一种说法

  1. 静态字段/方法只有一个"副本".
  2. 静态字段/方法无法访问非静态字段/方法.

有几种情况你想要做一些静态的东西.

字段的规范示例是创建一个静态整数字段,该字段在类的所有实例(对象)中保持计数.另外,单例对象例如通常也使用静态修改器.

类似地,静态方法可用于执行"实用程序"作业,所有必需的依赖项都作为参数传递给方法 - 您不能在静态方法中引用"this"关键字.

在C#中,您还可以拥有静态类,正如您可能猜到的那样,它们只包含静态成员:

public static class MyContainer
{
    private static int _myStatic;

    public static void PrintMe(string someString)
    {
        Console.Out.WriteLine(someString);
        _myStatic++;
    }

    public static int PrintedInstances()
    {
        return _myStatic;
    }
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*iko 8

Static使用较少的内存,因为每个Classloader只存在一次.

要使方法静态可以节省一些时间,因为您不必先创建一个对象,这样就可以调用一个函数.你可以/应该使用静态方法,当它们几乎独立时(即Math.abs(X) - 函数确实没有对象.)基本上它是一个方便的东西(至少就我看来 - 其他人可能也会不同意:P)

静态字段应该谨慎使用.有很多模式需要静态字段......但首先是基础知识:

静态字段只存在一次.所以如果你有一个简单的类(有点伪代码):

class Simple {
 static int a;
 int b;
}
Run Code Online (Sandbox Code Playgroud)

现在你用以下物体制作物品:

Simple myA = new Simple();
Simple myB = new Simple();
myA.a = 1;
myA.b = 2;
myB.a = 3;
myB.b = 4;
System.out.println(myA.a + myA.b + myB.a + myB.b);
Run Code Online (Sandbox Code Playgroud)

你会得到3234 - 因为通过设置myB.a你实际上也会覆盖myA.a,因为a是静态的.它存在于记忆中的一个地方.

你通常想避免这种情况,因为可能会发生奇怪的事情.但是,如果您以工具模式为例进行谷歌搜索,您会发现这种行为实际上非常有用.

希望能稍微清理一下.