Java中的内部类和静态嵌套类之间的主要区别是什么?设计/实施是否在选择其中一个方面发挥作用?
请参阅下面的代码段:
代码1
public class A {
static int add(int i, int j) {
return(i + j);
}
}
public class B extends A {
public static void main(String args[]) {
short s = 9;
System.out.println(add(s, 6));
}
}
Run Code Online (Sandbox Code Playgroud)
代码2
public class A {
int add(int i, int j) {
return(i + j);
}
}
public class B extends A {
public static void main(String args[]) {
A a = new A();
short s = 9;
System.out.println(a.add(s, 6));
}
}
Run Code Online (Sandbox Code Playgroud)
这些代码片段有什么区别?两者都 …
我尝试做的是:
public class History {
public class State {
public enum StateType {
Run Code Online (Sandbox Code Playgroud)
Eclipse给出了我的编译错误StateType:The member enum StateType must be defined inside a static member type.
当我使State类静态时,错误消失.我可以制作State静态,但我不明白为什么我不能enum在内部类中声明.
鉴于我所知道的其他类型的静态编程功能 - 我认为答案是'不'.然而,看到这样的陈述OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();让我感到奇怪.
当从实例方法返回没有引用其封闭类的匿名类时,它会引用this.为什么?
请考虑以下代码:
package so;
import java.lang.reflect.Field;
public class SOExample {
private static Object getAnonymousClassFromStaticContext() {
return new Object() {
};
}
private Object getAnonymousClassFromInstanceContext() {
return new Object() {
};
}
public static void main(String[] args) throws NoSuchFieldException, SecurityException {
Object anonymousClassFromStaticContext = getAnonymousClassFromStaticContext();
Object anonymousClassFromInstanceContext = new SOExample().getAnonymousClassFromInstanceContext();
Field[] fieldsFromAnonymousClassFromStaticContext = anonymousClassFromStaticContext.getClass().getDeclaredFields();
Field[] fieldsFromAnonymousClassFromInstanceContext = anonymousClassFromInstanceContext.getClass().getDeclaredFields();
System.out.println("Number of fields static context: " + fieldsFromAnonymousClassFromStaticContext.length);
System.out.println("Number of fields instance context: " + fieldsFromAnonymousClassFromInstanceContext.length);
System.out.println("Field from instance context: " …Run Code Online (Sandbox Code Playgroud) 当我尝试编译以下代码时,我得到编译错误:
unexpected type System.out.println( new Test().C.i );
^
required: class,package
found: value
Run Code Online (Sandbox Code Playgroud)
class Test {
class C {
static final int i = 0;
}
public static void main(String... z) {
System.out.println( new Test().C.i );
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变 new Test().C.i到new Test().new C().i它编译就好了.
为什么?如果我在C中是静态的,那么我不应该实例化C.我应该只能通过类C而不是C对象来调用它.
我错过了什么?
我想知道是否有任何构造函数涉及内部类.例如,考虑下面给出的代码片段
class MyOuter
{
private int x= 10;
class MyInner
{
void dostuff(){
System.out.println("The value of x is "+x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个java文件中,我为MyOuter和MyInner类创建实例,如下所示
Class Program
{
public static void main(String [] args)
{
MyOuter mo = new MyOuter();
MyOuter.MyInner mi = mo.new MyInner();
mi.dostuff();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段编译得很好并且输出"x的值是10".
我想知道的是当new()与MyInner类和MyOuter类一起使用时是否调用构造函数.如果是,那么是否有任何构造函数从内部类链接到外部类(如子类调用超类的构造函数,依此类推).
java ×9
class ×1
constructor ×1
enums ×1
nested ×1
nested-class ×1
static ×1
static-class ×1
variables ×1