我只是想解决一个问题。与具有私有可见性的普通方法相比,拥有私有静态方法有什么意义?
我本来以为拥有静态方法的一个优点是可以在没有类实例的情况下调用它,但是由于它的私有性,甚至有一点是静态的吗?
我能想到的唯一原因是,它有助于从概念上理解类级别(而不是对象级别)上的方法。
我只是想解决一个问题。与具有私有可见性的普通方法相比,拥有私有静态方法有什么意义?
我本来以为拥有静态方法的一个优点是可以在没有类实例的情况下调用它,但是由于它的私有性,甚至有一点是静态的吗?
我能想到的唯一原因是,它有助于从概念上理解类级别(而不是对象级别)上的方法。
Answers:
静态的特性与可见性无关。
想要使用静态方法(某些不依赖于非静态成员的代码)的原因仍然有用。但是也许您不希望任何人/其他任何人使用它,而只是您的课堂。
<
to的替换<
,等等。在编写时……
&
为&
[我正在编写代码,即使我没想到它是必需的,我也将转换&
为&
它没有]。它后来成为必要处理&号,但该方法是公共的,改变它扩大&
到&
能够打破它执行自己的代码外&
至- &
替代。但是,如果该方法是私有的,则可以固定该方法以进行处理,&
而不会导致任何外部代码出现问题。
一个相当普遍的原因(在Java中)是通过使用一种简单的private static
方法来减少构造函数的混乱情况,从而在构造函数中初始化不可变字段变量。
private
:外部类不应看到它。static
:它可以执行一些操作中,独立的1主机类的状态的。以下是一些人为设计的示例...
例如:
public class MyClass{
private final String concatenated;
public MyClass(String a, String b){
concatenated = concat(a,b);
}
public String getConcatenated(){
return concatenated;
}
/**
* Concatenates two Strings as `s1---s2`
**/
private static final String concat(String s1, String s2){
return String.format("%s---%s", s1, s2);
}
}
1 假设它与其他static
变量没有相互作用。
super(...)
调用必须是类的构造函数的第一行,因此您不能声明局部变量来帮助您确定要传递给超级调用的内容。但是,您可以调用(私有)静态方法,该方法使用必要的行数来计算要传递给超级构造函数的值。
您会看到许多方法中重复了几行代码,因此您决定将它们提取到单个方法中,因为重复的代码并不好。
您将方法设为私有,因为它不是为广泛使用而设计的,并且您不希望无关的代码调用它。(在评论中讨论这一点……)
由于该方法不访问任何实例字段,因此可以将其设为静态,将其设为静态可以使您更容易理解甚至更快。
然后....(也许现在,也许以后,也许永远不会)
一旦方法已经取得了一成不变的,它是明确的,它可以移出之类的,说给一个统一的类。
将其转换为参数之一的实例方法也很容易,通常这就是代码应该在的地方。
我可以想到的一个非常简单的示例是,如果要对传递给main函数的输入参数(或某些操作)进行一些处理。因此,在这种情况下,如果处理量很大并且在其他任何地方都不会使用相同的功能,那么拥有私有功能将是有意义的,因为它将不会在其他任何地方使用/调用+ static,因为main是静态的。