从静态上下文访问非静态方法

时间:2011-08-25 09:53:38

标签: java methods access-modifiers

我对此感到有些困惑,我在这里浏览建议的答案并没有立即产生结果。

我的问题很基本。让我们假设我有一个像这样的方法。

private int someFunction(int x, int y){
    return (x+y+5)
} 

但是我想从main(public static void main(String args[]) ))调用这个函数。我该怎么做呢?

如果有一个教程,你认为在这种情况下会帮助我,我也会非常感激。

5 个答案:

答案 0 :(得分:8)

此函数不需要访问任何成员变量,因此您可以将该方法声明为static:

private static int someFunction(int x, int y) {
        ^^^^^^
    return (x+y+5)
} 

这样您就可以使用mainsomeFunction(arg1, arg2)YourClass.someFunction(arg1, arg2)拨打电话。


如果方法实际上确实需要访问成员变量(和/或this引用),则不能将该方法声明为静态。在这种情况下,您必须创建包含该方法的类的实例才能调用它:

new YourClass().someFunction(0, 1);

或(如果您以后需要重复使用该实例)

YourClass x = new YourClass();
x.sumFunction(0, 1);

答案 1 :(得分:1)

您需要具有特定方法所属的类的实例才能调用实例方法。

在你的情况下,

new MyClass()。someFunction(5,6);

答案 2 :(得分:0)

您必须先创建实例。根据定义,无法从静态上下文访问实例方法(非静态方法)。

因此,例如,如果您的类MyApp包含someFunction()main(String[] args),请在主方法中执行以下操作:

new MyApp().someFunction(1, 2);

答案 3 :(得分:0)

基本上,你只能从对象[类的实例]而不是类本身调用非静态方法。

查看Sun java教程,了解对象与类之间的区别,如果您有点困惑 - 这是一个非常重要的概念!

如果函数没有引用任何局部变量,你可以使函数变为静态,或者创建一个类的实例以便能够在本地调用它。

答案 4 :(得分:0)

由于您的方法someFunction不是静态的,您将无法从静态上下文i:e main()调用此方法。 1.所以你可以做一些功能

static private someFunction () 

2.或者可以从main()创建一个对象并调用someFunction,如:

  

a a = new A();
  a.someFunction(4,5);