Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回内部类的静态方法_Java_Static Methods_Inner Classes - Fatal编程技术网

Java 返回内部类的静态方法

Java 返回内部类的静态方法,java,static-methods,inner-classes,Java,Static Methods,Inner Classes,我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码 public class MyClass { private class MyClass2 { public String s1 = ""; public String s2 = ""; } private MyClass2 myClass2; private static MyClass2 getMyClass2()

我真的不明白为什么下面的getMyClass2方法不能是静态的,为什么它不是有效的Java代码

public class MyClass
{
    private class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

必须说内部类是静态的,因为非静态类绑定到实例,所以不能从静态方法返回

public class MyClass
{
    private static class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}
(非静态)内部类实例始终与它们所包含的类的实例相关联。静态方法将在不引用MyClass的特定实例的情况下被调用,因此,如果它创建了MyClass2的实例,则不会有MyClass的实例与之关联。

因为99%的时候你不希望它们是静态的;D

静态“嵌套”类只不过是在另一个类内部定义的“顶级”类。如果上面示例中的静态类MyClass2是公共的,您可以简单地说new MyClass.MyClass2();对于一个普通的“内部类”,你必须对一个对象,而不是类MyClass说:MyClass some=new MyClass(),然后是new some.MyClass2()(我忘记了确切的语法)


“关于”

它们并不总是与实例相关联,只有当它们不是静态的时才与实例相关联。谢谢,在我的文本中阐明了这一点。@Gaim:内部类从来都不是静态的。它们被称为嵌套类。@BalusC Okey,我很抱歉术语不好。谢谢大家,尽管我知道OP所问的问题的答案,但我还是从这个问题中学到了:)内部类在默认情况下不是静态的有什么原因吗?@AOO我认为它们实际上没有多大用处