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

2022-09-04 06:17:45

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

1. 字段和
2.方法?

例如,在类中,像abs(),atan(),cos()等字段方法是静态的,即它们可以作为以下内容访问:java.lang.MathMath.abs()

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

比如说,我不保持它是静态的,而是创建一个类的对象并访问它,无论如何我都可以,我只会得到一个警告,你正试图以非静态的方式访问静态方法(正如@duffymo所指出的那样,而不是在数学课的情况下)。

更新 1:

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


答案 1

您可以将“静态”方法或字段视为在类定义之外声明的。换句话说

  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;
    }
}

答案 2

静态使用较少的内存,因为它在每个类装入器中只存在一次。

使方法保持静态可能会节省一些时间,因为您不必先创建对象即可调用函数。你可以/应该使用静态方法,当它们几乎独立存在时(即。Math.abs(X) - 函数确实不需要任何对象。基本上,这是一件方便的事情(至少在我看来 - 其他人可能会并且会不同意:P)

静态字段确实应该谨慎使用。有相当多的模式需要静态字段...但首先要了解基础知识:

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

class Simple {
 static int a;
 int b;
}

现在,您可以使用以下命令制作对象:

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);

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

你通常想避免这种情况,因为可能会发生非常奇怪的事情。但是,如果你在谷歌上例如工厂模式,你会看到这种行为实际上有非常有用的用途。

希望这能澄清一点。


推荐