一文然你对实例部类与静态内部类有更深的了解
Posted minghaij
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文然你对实例部类与静态内部类有更深的了解相关的知识,希望对你有一定的参考价值。
Java中一直对实例内部类和静态内部类特别混淆,对它能的实例化总是容易忘记,随着对java的不断学习,终于有了自己的理解,因此分享自己的心得:
对实例内部类与静态内部类的创建
先看代码
public class OuterClass
class Inner
static class Inner2
public static void main(String[] args)
OuterClass outerClass = new OuterClass();
// 创建实例内部类
Inner inner1 = outerClass.new Inner();
// 创建静态内部类
Inner2 inner2 = new OuterClass.Inner2();
分析:我们创建实例内部类时,必须要用到外部类具体的实例对象,就好像实例内部类依附在外部类的实例上。
在创建静态内部类时,可以直接使用外部类来创建静态内部类的对象,就好像是静态内部类依附在外部类上。
把上面代码编译后后生成三个字节码文件,分别为外部类,实例内部类,和静态内部类的字节码文件,如下:
经javap
反编译后可可知,在实例内部类中有外部类实例的引用,而在静态内部类没有外部类实例的引用。
因此可以证明实例内部类内有外部类对象的引用。
内部类调用外部类的属性
再来看看静态内部类与实例内部类访问外部类的的属性,
public class OuterClass
static int a = 0;
int b = 0;
class Inner
int a1 = a;
int b1 = b;
static class Inner2
int a2 = a;
int b2 = b;//Non-static field 'b' cannot be referenced from a static context
在静态实例内部类中可以访问外部类的实例变量和静态变量,而在静态内部类中可以访问外部类的静态变量,但不能访问实例变量。
PS:通过不断的学习,感觉内部类与外部类的方法有种若隐若现的联系,如果把上面代码中的,如果建立这样一种对应关系,实例内部类——>>>实例方法,静态内部类——>>>静态方法(仅仅为了理解),是不是很容易就能理解内部类调用外部类实例变量与静态变量的过程。
以上是关于一文然你对实例部类与静态内部类有更深的了解的主要内容,如果未能解决你的问题,请参考以下文章