我们可以在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
见平方()函数
没有你不能。
如果某个方法不是静态的,则必须从某个类的实例中调用该方法。即使在这里给出,如
public class A{
private void foo()
{
bar();
}
private void bar()
{
}
}
你不叫吧,就像自己的例子,你怎么称呼它在A的当前实例,这就好比
编辑
在你的例子中,当你在init
(否则你不能称它)时,你已经有一个MethodCall
的实例。所以致电square()
实际上是this.square()
。 getContentPane()
这是JApplet的一种方法(它是MethodCall
的超类)
Downvoter - 我想听听这个答案不正确。 – MByD 2011-05-04 07:21:04
+1用于抵消反对票。 – 2011-05-04 07:27:16
你的问题是不是真的不清楚,但这里有一个简单的总结:
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
}
}
注意,在这种情况下,内本身的功能调用是无限递归。
只需要注意:方法public void bar()中的调用bar()也是无限递归的。 – 2011-05-04 07:16:57
@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();
}
}
当你尝试它时发生了什么? – 2011-05-04 07:07:59
你看到的可能是可用的超类的方法(如果你扩展框架的小程序,你也可以获得大部分的方法) – MByD 2011-05-04 07:32:25