我有三个问题。
1-如果非final字段的值可以改变,如何在匿名类中使用?
class Foo{
private int i;
void bar(){
i = 10
Runnable runnable = new Runnable (){
public void run (){
System.out.println(i); //works fine
}//end method run
}//end Runnable
}//end method bar
}//end class Foo
2-为什么静态嵌套类不能在方法内部声明,因为内部类可以撤消(本地类)的名称?
Class Foo {
void bar(){
class LocalClass{ //static nested classes are NOT allowed here
//define members
}//end class LocalClass
}//end method bar
}//end class Foo
class Foo {
class Bar{
static int x; //NOTallowed
static final int y; //allowed
static void doSomething(){} //NOT allowed
}//end class Bar
}//end class Foo
1-如果非final字段的值可以改变,如何在匿名类中使用?
class Foo{
private int i;
void bar(){
i = 10;
Runnable runnable = new Runnable (){
public void run (){
System.out.println(i); //works fine
}//end method run
}//end Runnable
}//end method bar
}//end class Foo
让我们破解代码相当于-
class Foo{
private int i;
ublic static void bar() {
i = 10;
Runnable r = new ARunnable();
r.run();
}
private static class ARunnable implements Runnable {
@Override public void run() {
System.out.println(i);
}
}
}
声明的anonymouse可运行类本质上是bar()
方法中的一个嵌套类,它是函数bar()
的本地类。因此,anonymouse类可以访问父类的字段。但是,如果变量i
是函数bar()
的本地变量,我们不希望允许任何其他函数访问它。对于方法bar()
中的内部类函数,我们可以允许读取,但不能更改,否则会显得很奇怪,违反了局部原则。
class Foo{
// private int i;
void bar(){
final int i = 10; // adding `final` as i is local to function bar
Runnable runnable = new Runnable (){
public void run (){
System.out.println(i);
}//end method run
}//end Runnable
}//end method bar
}/
如果我们在一个块内声明一个本地类,它将在封闭块的上下文中操作。任何块(方法)都不知道另一个块(方法)的本地实例,因为在块内声明的任何东西都是该块的本地实例。因此,它所在的块(方法)应该是唯一能够实例化它的块。将其声明为static
没有任何意义。类访问修饰符private
、public
和protected
也是如此。
3-为什么内部类不能定义静态成员,除了静态final字段?
内部类是非静态的。嵌套的静态类称为嵌套类,而不是内部类。它将在包含实例的上下文中进行操作。不知何故,允许静态变量和方法与这种动机相矛盾。然而,更多关于这个问题答案的详细说明:请参见这里和这里。
问题内容: 我想在中实现常量,因为在代码中找到常量是很有意义的。 到目前为止,我一直在使用静态方法实现以下变通方法: 我知道有可能摆弄原型,但许多人建议不要这样做。 有没有更好的方法在ES6类中实现常量? 问题答案: 您可以执行以下操作: 从 模块中 导出a 。根据您的用例,您可以: 并在必要时从模块导入该文件。或者,基于您的静态方法思想,您可以声明一个get访问器: 这样,您将不需要括号: 然后
我为之编写的测试用例: 我还有最后一节课。 我已经在测试类中添加了以下代码: 但对我来说什么都不起作用。请建议在类中模仿方法的正确方法。
我试图实现的是重写此方法: 公共布尔onKeyPreIme(int-keyCode,KeyEvent事件) 该方法位于SearchView中。搜索自动完成类http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.0_r1/android/support/v7/widget/Se
问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。
JVM为内部类成员和方法分配空间的方式有什么不同吗。请提供所有可用类型的嵌套类(静态、本地、非静态、匿名)在此上下文中的区别。我从其他各种渠道寻找,但没有弄清楚。
我有以下代码: 到目前为止,代码还可以,但我无法在主方法中实例化'in',比如,因为它显示
问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么呢 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。
问题内容: 我有以下代码: 到目前为止,代码还不错,但是我无法像显示的那样在main方法中实例化 我该怎么做?我不想使我的课堂静止。 问题答案: 你还必须参考其他外部类。 如果内在是静态的,那将是