我想知道什么时候使用静态方法?假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?
例子:
Obj x = new Obj();
x.someMethod();
或:
Obj.someMethod(); // Is this the static way?
我很困惑!
我想知道什么时候使用静态方法?假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?
例子:
Obj x = new Obj();
x.someMethod();
或:
Obj.someMethod(); // Is this the static way?
我很困惑!
当前回答
我发现了一个很好的描述,当使用静态方法:
没有硬性的、写得很好的规则来决定什么时候使一个方法静态或非静态,但是有一些基于经验的观察,这不仅有助于使一个方法静态,而且还教会了什么时候在Java中使用静态方法。你应该考虑在Java中让一个方法是静态的:
If a method doesn't modify state of object, or not using any instance variables. You want to call method without creating instance of that class. A method is good candidate of being static, if it only work on arguments provided to it e.g. public int factorial(int number){}, this method only operate on number provided as argument. Utility methods are also good candidate of being static e.g. StringUtils.isEmpty(String text), this a utility method to check if a String is empty or not. If function of method will remain static across class hierarchy e.g. equals() method is not a good candidate of making static because every Class can redefine equality.
来源在这里
其他回答
在阅读了Misko的文章之后,我相信静态方法从测试的角度来看是不好的。相反,您应该使用工厂(可能使用像Guice这样的依赖注入工具)。
我如何确保我只有一个东西
只吃一种 问题是"我如何确保我 只吃一种东西”是很好的 回避了。实例化一个 单个ApplicationFactory在你的 主要的,结果,只有你 实例化所有的单个实例 你的独生子女。
静态方法的基本问题是它们是过程代码
静态方法的基本问题是 它们是过程代码。我没有 知道如何对过程代码进行单元测试。 单元测试假设我可以 实例化我的应用程序的一部分 在隔离。在实例化过程中 我将依赖项与 mock /友军替换 真正的依赖关系。与程序 编程没有什么可以“连接”的 由于没有对象,代码 数据是分开的。
如果将静态关键字应用于任何方法,则称为静态方法。
静态方法属于类,而不是类的对象。 不需要创建类实例而调用的静态方法。 方法可以访问静态数据成员,并可以更改它的值。 静态方法可以通过类名。静态名来访问。示例:Student9.change(); 如果要使用类的非静态字段,则必须使用非静态方法。
//改变所有对象的公共属性的程序(静态字段)。
class Student9{
int rollno;
String name;
static String college = "ITS";
static void change(){
college = "BBDIT";
}
Student9(int r, String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);}
public static void main(String args[]){
Student9.change();
Student9 s1 = new Student9 (111,"Indian");
Student9 s2 = new Student9 (222,"American");
Student9 s3 = new Student9 (333,"China");
s1.display();
s2.display();
s3.display();
} }
O/P: 111印度BBDIT 222美国BBDIT 333中国BBDIT
使用静态方法的唯一合理的地方可能是Math函数,当然main()必须是静态的,也可能是小型工厂方法。但是逻辑不应该保存在静态方法中。
静态方法是Java中可以在不创建类对象的情况下调用的方法。它属于这个阶级。
当我们不需要使用实例调用方法时,我们使用静态方法。
静态方法有两个主要目的:
用于不需要任何对象状态的实用程序或辅助方法。 由于不需要访问实例变量,具有静态 方法消除了调用方实例化对象的需要 只需要调用这个方法。 为了所有人共享的状态 类的实例,比如计数器。所有实例必须共享 相同的状态。仅仅使用该状态的方法应该是静态的 好。