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

问题描述:

如果我们声明一个方法是静态的,那么不需要实例化,我们可以在类体内的任何地方调用该方法。我们可以在Java中的函数中调用函数吗?

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

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

编辑:

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

但是在Java小程序中,我记得看到一个函数被另一个函数调用。

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 

见平方()函数

+9

当你尝试它时发生了什么? – 2011-05-04 07:07:59

+0

你看到的可能是可用的超类的方法(如果你扩展框架的小程序,你也可以获得大部分的方法) – MByD 2011-05-04 07:32:25

没有你不能。

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

public class A{ 

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

    } 
} 

你不叫吧,就像自己的例子,你怎么称呼它在A的当前实例,这就好比​​

编辑

在你的例子中,当你在init(否则你不能称它)时,你已经有一个MethodCall的实例。所以致电square()实际上是this.square()getContentPane()这是JApplet的一种方法(它是MethodCall的超类)

+1

Downvoter - 我想听听这个答案不正确。 – MByD 2011-05-04 07:21:04

+0

+1用于抵消反对票。 – 2011-05-04 07:27:16

当然可以,只要它是在功能可见。举例来说,调用函数和被调用函数在同一个类或子类中。如果其被调用的方法范围的子类应该是默认的,保护的或公共的。

+0

这是不准确的。在这些情况下,你实际上称它为“this”。 – MByD 2011-05-04 07:15:50

+0

正确。但问的问题是没有启动一个对象。 – 2011-05-04 07:18:12

+0

如果你到达那里 - 你已经有一个对象... – MByD 2011-05-04 07:19:52

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

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 
    } 
} 

注意,在这种情况下,内本身的功能调用是无限递归。

+0

只需要注意:方法public void bar()中的调用bar()也是无限递归的。 – 2011-05-04 07:16:57

+0

@Danilo我在底部添加了注释以避免评论中的信息太多,谢谢。 – 2011-05-04 07:20:14

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

这是可能的,只要你想调用的函数在相同的类或类层次结构中,或者你调用的函数本身是静态的。

这应该工作:

public class CallTest { 

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

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

}