java中的方法可以嵌套,效果如何?

例如,这是合法的:

class NAME { method { method {} } } 

这会产生什么影响? 是否涉及任何特定的语法?

更新由于Java 8方法可以使用lambdas嵌套,请参阅另一个问题 。

此答案适用于Java 8之前的Java版本

原始答案如下:

java中的方法可以嵌套[…]吗?

不,那是不可能的。

你能得到的最接近的是:

 class Name { void methodOne() { class InnerClass { void methodTwo() { } } } } 

也就是说,在方法中定义的内部类中定义的第二种方法。

您可以在内部类中声明方法static,因此您不必调用new

那是无效的语法; 没有这样的function支持。 (虽然它正在考虑用于Java 7)

相反,您可以使用刚才提到的嵌套类。

没有。

一种解决方案就是将要调用的方法声明为“父”方法之外的私有方法 – 如果您真的很烦,可以使用一些命名约定来表明它们“属于”“父”方法。

您可以考虑的另一件事 – 在程序员中似乎并不广为人知 – 是您可以声明任意范围块并对其进行标记,然后使用break来突破该块。

所以以下是完全合法的Java:

 void method() { myInnerMethod : { // do some stuff if (condition) { break myInnerMethod; } // do some more stuff } } 

当然,范围块实际上不是一种方法,但在某些情况下,它可以用来做你想要的“内部方法”。

不,这是无效的语法。 这是一种耻辱 – 这是我从Ada想念的事情之一。 没有能力定义嵌套方法确实在组织具有大量私有方法的类时会产生很多问题。 从那里,它是一个滑坡,缺乏凝聚力的土地。

您可以使用嵌套类,但它们需要付出代价。 每个嵌套类都会生成一个$ named类。 每个都有打开文件句柄(如果没有从存档中提取)以及其类定义所占用的内存。 有些系统会对可以部署的文件数量(因此总生成的类)设置上限(例如,Google Apps)。

换句话说,我不会使用嵌套类来模仿嵌套方法(以防你决定尝试。)

现在,假设你可以使用嵌套方法(如在Ada中),那些方法只能在封闭方法中可见(它们比典型的私有方法更受限制。)它们将能够看到在中定义的变量和参数。外部范围(但可能仅在定义为最终范围时。)

它允许您在嵌套命名空间中组织方法和算法。 智能使用时,嵌套方法确实有助于组织代码。

如果没有检查,我会说编译器不接受这个,因为此时需要在类中定义方法。 但是,您可以在方法内定义内部类(请参阅“本地和匿名内部类”)。

http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html

不接受Java。 看起来你想做递归,只需再次调用相同的方法。

 method(){ method(); }