我们可以在Java函数中调用函数吗?

时间:2011-05-04 07:06:25

标签: java

如果我们声明一个方法是静态的,那么无需实例化,我们可以在类体内的任何地方调用该方法。

如果我们没有声明一个方法是静态的,那么可以实例化一个对象,然后调用该方法。

现在如果我们不声明一个方法是静态的并且也没有实例化,我们可以在一个函数中调用一个函数吗?

编辑:

我现在明白了,我的预感是正确的。除非有静态或对象实例化,否则我们不能在函数内调用另一个函数。

但是在Java applets中我记得看到一个函数是从另一个函数调用的。

import javax.swing.*;
import java.awt.Container;

public class MethodCall extends JApplet
{
    public void init()
    {
        String output = "";
        JTextArea outputarea=new JTextArea(10,20);
        Container c = getContentPane();
        c.add(outputarea);

        int result;
        for(int x=1;x<=10;x++)
        {
            result = square(x);
            output += "Square of " + x + " is " + result + "\n";
        }//end of for loop

        outputarea.setText(output);
    }//end of init()

    public int square(int y)
    {
        return y*y;
    }//end of square()

}//end of class MethodCall

参见square()函数

5 个答案:

答案 0 :(得分:11)

你的问题不是很清楚,但这里有一个简短的总结:

class A {
    public static void foo() {
        bar();      // illegal, no object
        foo();      // legal, implicit
        A.foo();    // legal, explicit
        A a = new A();
        a.bar();    // legal - we call a non-static function on an object
    }

    public void bar() {
        bar();      // legal, implicit
        this.bar(); // legal, explicit
        foo();      // legal, implicit
        A.foo();    // legal, explicit
    }
}

请注意,在这种情况下,对函数内部函数的调用是无限递归的。

答案 1 :(得分:3)

否你不能。

如果方法不是静态的,则必须从某个类的实例调用它。即使在这里给出的例子中,例如

public class A{

    private void foo()
    {
        bar();
    }
    private void bar()
    {

    }
}

你不会像自己一样调用bar,你在A的当前实例上调用它,就像this.bar()

修改

在您的示例中,当您在MethodCall时,您已经拥有init的实例(否则您无法调用它)。所以square()的来电实际上是this.square()。与getContentPane()相同,这是JApplet的一种方法(它是MethodCall的超类

答案 2 :(得分:0)

是的,只要它对功能可见,你就可以。比如说调用函数和被调用函数在同一个类或子类中。如果它是一个子类,则被调用的方法范围应该是default,protected或public。

答案 3 :(得分:0)

如果我正确理解你的问题,你会问你是否可以用标准的非静态Java方法调用函数中的函数。

只要您要调用的函数位于同一个类或类层次结构中,或者您调用的函数本身是静态的,这是可能的。

答案 4 :(得分:0)

这应该有效:

public class CallTest {

    public static void someMethod(){
        System.out.println("blabla");
    }

    public static void main(String[] args) {
        CallTest.someMethod();
    }

}