【发布时间】:2016-10-04 17:45:02
【问题描述】:
我一直在刷我的java,我对本地类有一些误解(我最终从未使用过),我很理解静态的概念,但在local classes 的情况下却不是。
1.为什么本地类中不允许使用静态方法?
2。为什么方法中不允许使用静态本地类?
- 本地类中不允许使用静态方法:
这里我不明白。对我来说,本地类与静态方法 main 相关联。我只是不明白为什么不能这样做。 main 方法通过 Sequence 类访问,然后由于 sayGoodbye 是静态的,因此应该通过其类访问。但不是。
public class Sequence {
public static void main(String... args) {
class EnglishGoodbye {
public static void sayGoodbye() { // this cannot be done
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
- 方法中不允许使用静态本地类:
这无法做到:这有点模棱两可,但我认为这里的静态与非静态具有相同的含义,因为静态类与静态方法相关联。我糊涂了。
public class Sequence {
public static void main(String... args) {
static class EnglishGoodbye { //static local classes not allowed
public static void sayGoodbye() {
System.out.println("Bye bye");
}
}
EnglishGoodbye.sayGoodbye();
}
}
编辑: 我得到的第一个答案是来自 oracle 的一句话:
本地类是非静态的,因为它们可以访问实例 封闭块的成员。因此,它们不能包含大多数 各种静态声明。
我的回复:
但这并不能真正解释一切。当你有内在 类你不能访问非静态字段,但你可以访问静态 字段。同样应该适用于本地课程,因为没有 静态变量然后就没用了。但是方法呢,比如我的 例子。
好的,我创建了一个架构来更好地解释我如何看待事物。不过这可能是完全错误的,我有点羞于展示它。在此架构中以及静态本地类将可访问的场景中,我将在顶部内存块中有一个本地类。每当调用静态方法 2 时,它都会简单地引用它。
【问题讨论】:
-
您在寻找什么样的答案?这里是对 JLS 的引用 stackoverflow.com/questions/17484834/…
-
所有这些东西都在一个静态的 main 方法中。但是,如果您的静态方法实例化了一个新的 Sequence 类并将这些对象作为参数传递给同一个类中的一些非静态方法怎么办?您的班级将如何处理范围?
-
一个原因可能是你不应该在生产代码中使用任何这些。
-
@MickMnemonic 我想通过一个 java 证书,并且本地类在要学习的东西列表中。诚然,这不是一个很好的理由,你不觉得吗?
-
@Tunaki 后来,如果它是基于意见的,我想知道他们为什么这样做。我将用我如何看待事物以及为什么它对我没有意义来编辑我的帖子。另外我真的不明白为什么它是基于意见的。