`
阅读更多
1、Java没有static class 概念,static 在修饰 class 的时候,只能修饰 inner class,即所谓的 static inner class(静态内部类)。

2、inner class:为什么需要内部类?主要有3个好处:
  • 为了更好的组织类层次。如果一个类只在某处使用,那么内部类是很好的选择。比如常用的 java.util.HashMap 内部使用了 Entry<K,V>,这个Entry class 仅仅是为了 HashMap 使用,所以采用内部类的方式。这种例子还有各种helper class。  
  • 更好的封装。非静态内部类可以访问外部类的私有成员,使用内部类可以在实现功能的同时,对外隐藏内部类本身,实现更好的封装。
  • 使用较小的内部类,代码的可读性和可维护性更好。
 
3、非静态内部类可以访问外部类的私有成员,是因为非静态内部类含有外部包装类的一个instance。因为非静态内部类含有外部类的instance,所以不能定义static field 和 static method。(static field 和 static method 的scope是Class,而不是 instance,因此包含外部类的 instance 的内部类不能定义 static member)。

4、static inner class 和  外部类(即 top level class)基本是一致的,不包含 outer class 的 instance reference。所以可以看做一个 top level class。只是为了更好的组织类结构才将这个类所谓内部类。当然instance static inner class 的语法和 top level class 稍有不同。static inner class 可以定义static field和 static method。所以可以再 static inner class 中写main函数,以测试 outer class 的功能。

关于 inner class 和 static inner class 比较权威的文档和说明:

 

分享到:
评论

相关推荐

    java_innerclass_instance.rar_innerclass

    在“java_innerclass_instance.rar_innerclass”这个压缩包中,包含的资源可能是一个关于Java内部类实例应用的示例代码。 内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这里我们主要...

    Java中inner_class内部类

    1. 对于成员内部类和静态嵌套类,可以通过`new OuterClass().new InnerClass()`或`OuterClass.InnerClass inner = new OuterClass().new InnerClass();`来实例化。 2. 局部内部类和匿名内部类只能在定义它们的方法...

    java易混淆概念Anonymous Inner Class

    Java编程语言中存在一些易混淆的概念,今天我们将探讨 Anonymous Inner Class、final、finally、finalize 的区别,Static Nested Class 和 Inner Class 的不同,&和&&的区别,HashMap 和 Hashtable 的区别,...

    java-内部类(InnerClass)详解.pdf

    可以通过"OuterClass.InnerClass"的方式引用静态成员类,如`new Outer.Inner1()`。 6. **使用场景** - 当需要创建一个与外部类紧密相关的辅助类,并且希望这个类在没有外部类实例的情况下也能存在时,可以使用...

    Java内部类(innerclass).docx

    OuterClass.InnerClass innerObj = outerObj.new InnerClass(); ``` #### 三、访问权限 内部类和静态嵌套类都可以声明不同的访问权限,包括`public`、`protected`、`package-private`(默认访问权限)、`private...

    java-嵌套类(inner class)-来自oracle官网

    嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...

    Java中的Static class详解及实例代码

    在上面的示例代码中,我们定义了一个外部类`OuterClass`,其中包含一个静态内部类`NestedStaticClass`和一个非静态内部类`InnerClass`。在`main`方法中,我们创建了静态内部类的实例和非静态内部类的实例,并调用了...

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    OuterClass.InnerClass inner = outer.new InnerClass();` 4. **作用场景**: - 静态内部类常用于封装与外部类相关联的工具类或辅助类,这些类不依赖于外部类的实例状态,而是与外部类的类级别信息有关。 - 非...

    JAVA程序员32问

    Java 面试题 经典 第一,谈谈final, finally, finalize的区别。...第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。

    java中staticclass静态类详解

    System.out.println("main in static inner class"); } } ``` 在上面的代码中,MainInStaticClass 是一个外部类,而 Main 是一个静态内部类。静态内部类可以访问外部类的静态成员变量和成员方法,但是不能够访问非...

    Java面试题,他会给你很好的Java面试准备,第一,谈谈final, finally, finalize的区别,第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    在Java中,还有Static Nested Class和Inner Class的概念。Static Nested Class意味着创建一个static内部类的对象,不需要一个外部类对象,不能从一个static内部类的一个对象访问一个外部类对象。 在Java面试中,还...

    耿祥义java2的源代码

    根据给定的信息,我们可以从《Java 2实用教程(第三版)》中提炼出一系列重要的知识点,这些知识点涉及...通过上述知识点的学习,读者可以掌握Java编程的基础概念和常用语法,为进一步深入学习Java语言打下坚实的基础。

    static 的使用场合

    public static class InnerClass { // ... } } OuterClass.InnerClass inner = new OuterClass.InnerClass(); ``` 5. **静态导入(Static Import)** - Java 5引入了静态导入功能,允许开发者直接引用类的...

    final关键字和static_用法

    System.out.println("Inside Static Inner Class"); } } public static void main(String[] args) { StaticInnerClass inner = new StaticInnerClass(); inner.display(); // 不需要创建外部类的实例 } } ``...

    Class详解内部类等

    static class Inner { public void printMessage() { System.out.println("Hello from Inner"); } } } public static void main(String[] args) { Outer.Inner inner = new Outer.Inner(); inner.print...

    2022常见JAVA面试题一.docx

    Static Nested Class 和 Inner Class 是 Java 中两种不同的内部类。静态内部类可以独立存在,不需要外部类对象,不能访问外部类的非静态成员变量和方法。内部类可以访问外部类的所有成员变量和方法。 四、&amp; 和&...

    JAVA程序员面试32问.

    本文将详细解释JAVA程序员面试中的32个问题,涵盖final、finally、finalize的区别、Anonymous Inner Class、Static Nested Class、HashMap和Hashtable的区别、Collection和Collections的区别、断言的使用、GC的概念...

    JAVA程序员面试32问

    OuterClass.InnerClass inner = outer.new InnerClass(); ``` - **Static Nested Class**:静态嵌套类(有时称为静态内部类)是一种特殊的内部类,它是用static关键字定义的。这意味着它不依赖于外部类的实例。...

    java内部类使用例子

    OuterClass.InnerClass inner = outer.new InnerClass(); inner.display(); // 输出 "Outer value: 10" } } ``` 局部内部类是定义在方法、构造器或块中的类,它的作用域仅限于该方法、构造器或块。局部内部类不...

Global site tag (gtag.js) - Google Analytics