'level.tick()'和'Level.tick(level)'之间的区别

时间:2013-01-10 07:54:51

标签: java

我是业余时间的Java开发者,我只是想知道

之间会有什么区别
level.tick()

Level.tick(level)

('Level'是类的名称,'level'是该类的对象)

我知道因为java通过引用对象来工作,所以从类中传递静态函数作为参数传递水平肯定会与'level.tick()'具有相同的效果

(请注意,这不适用于我正在进行的项目,我以为我会问) )

3 个答案:

答案 0 :(得分:1)

第一种方法将调用Level类的非静态函数,该函数不接受任何参数。 第二种方法将调用Level类的静态函数,该函数期望类型为Level的参数。

答案 1 :(得分:1)

两者都可以实现相同的功能。最常见的是使用第一个实例方法声明。但是,如果级别可以是null,那么您需要在该调用之前添加检查。第二个静态方法声明可以包含此检查并减少您必须编写的样板。

public class Level {
  public void tick();
  public static void tick(Level level);
}

level.tick(); // Safe to call if level can't be null
Level.tick(level); // Safe to call in any case

设计应用程序以便变量值永远不会或仅在特殊情况下null可以免除很多麻烦。

答案 2 :(得分:0)

如果我理解正确,

  

我知道因为java通过引用对象来工作,所以从类中传递静态函数作为参数传递水平肯定会与'level.tick()'具有相同的效果

Level.tick(level) 

不会自动转换为

level.tick()

只有当你有一个以第二种形式为主体的静态函数时,这才有效。