快捷搜索:

Java静态内部类的实例化问题

一、静态内部类介绍

静态内部类是指使用 static 修饰的内部类。示例代码如下:

public class Outer { static class Inner { // 静态内部类 }}

static修饰的类不是说它自己是静态类,而是说它是外部类的静态成员。

Java静态内部类的实例化问题

上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点:在创建静态内部类的实例时,不需要创建外部类的实例。

public class Outer { static class Inner { }}class OtherClass { Outer.Inner oi = new Outer.Inner();}


static 修饰的内部类可以被外部类通过 外部类.静态内部类 直接访问,而没用static 修饰的类在new 对象的时候要通过外部类的实例.内部类访问。

示例代码如下所示:

public class A{ public class B{}}

实例化B:

A a = new A();B b = a.new B();

如果B是静态的(全局的),即如下:

public class A{ public static class B{}}

实例化B:

B b = A.new B();或者B b = new A.B();


二、如何在main方法中实例化内部类对象

先理解如下结论:

1. 非静态内部类,必须有一个外部类的引用才能创建。

2. 在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。

3. 在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。

4. 静态内部类,不需要外部类引用就可以直接创建。

5. 同时静态内部类,也不能直接访问外部类的非静态方法。

6. 由此可以推测,非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。

Java静态内部类的实例化问题

完整示例代码如下所示:

public class Outer { private String name = "world"; public static void main(String[] args) { // 非静态内部类,必须有一个外部类的引用才能创建。 Inner inner = new Outer().new Inner(); inner.displayName(); new Outer().outerMethod(); // 可以直接创建静态内部类 new StaticInner().displayName(); } public void outerMethod() { Inner inner = new Inner(); inner.displayName(); Outer.Inner inner2 = new Outer.Inner(); inner2.displayName(); } public class Inner { String hello = "hello "; void displayName() { // 内部类可以访问外部类的任何变量 System.out.println(hello + name); } } public static class StaticInner { String hello = "HELLO "; void displayName() { // 静态内部类不能访问外部类的非静态变量 System.out.println(hello); } }}
Java静态内部类的实例化问题

(此处已添加圈子卡片,请到今日头条客户端查看)

您可能还会对下面的文章感兴趣: