美文网首页
Java内部类机制

Java内部类机制

作者: 阳光下的狐狸 | 来源:发表于2017-02-23 09:46 被阅读0次
内部类的种类

成员内部类
方法内部类
匿名内部类
静态内部类
局部内部类

所谓内部类,是指在一个类的内部还有另外一个类的定义. 在Java中,可以在类的内部定义内部类, 也可以在方法内部定义一个类.
在方法体内定义内部类, 有需要注意的地方就是: 在方法体内定义的内部类,可以访问外部类的任意属性,但是不能直接访问方法中的参数变量.
如果需要让内部类访问方法的参数变量,需要在方法参数前加上"final"关键字.
使用内部类的优缺点是:
(1)优点: 使用内部类可以直接访问外部类的私有属性;
(2)缺点: 含有内部类的程序,代码结构不很好.

内部类?

在一个类中嵌套了另一个类。

成员内部类

成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的

局部(方法)内部类

在一个方法体内创建一个类,并在方法体内进行实例化调用。

匿名内部类

匿名内部类通常用作于接口的回调。
注册事件监听,构造handler的时候就已经使用了,没有名字的内部类。

静态内部类

类定义时加上static关键字
只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
外部类.内部类 对象名 = new 外部类.内部类();

Static Inner Class 和 Inner Class 的不同(静态内部类和非静态内部类的区别)

静态内部类不持有外部类的引用;非静态内部类持有外部类的引用。
静态内部类可以有静态成员(方法、属性),而非静态内部类则不能有静态成员(方法、属性)。
静态内部类只能访问外部类的静态成员和静态方法,而非静态内部类则可以访问外部类的所以成员(方法、属性)。
实例化一个静态内部类不依赖于外部类的实例,直接实例化内部类对象;实例化一个非静态内部类依赖于外部类的实例,通过外部类的实例生成内部类的实例。
调用静态内部类的方法或静态变量,直接通过类名调

为什么内部类拥有外部类的所有元素的访问权?

当某个外围类对象创建一个内部连对象时,内部类对象必定会捕获一个指向那个外围类对象的引用。内部类对象只能在与其外部类对象关联的情况下才能被创建(在内部类非static时),构建内部类需要一个外部类的引用,内部类正是利用这个引用去访问外部类的。

内部类的作用?

1.内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2.在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3.创建内部类对象的时刻并不依赖于外围类对象的创建。
4.内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5.内部类提供了更好的封装,除了该外围类,其他类都不能访问

静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?

静态内部类:使用static修饰的内部类

匿名内部类:使用new生成的内部类

因为内部类的产生依赖于外部类,持有的引用是类名.this。

相关文章

  • Final 和方法中的内部类

    在 Java 的内部类的机制中,非 static 的内部类可以会持有外部类的 this 引用,因此可以访问外部类的...

  • 事件关联

    JAVA里事件关联采用的监听机制事件开发步骤: 代码演示 内部类中访问外部类对象:外部类名.this.内部类能访问...

  • Thinging in Java阅读时遇到的问题

    菜鸟教程Java回调机制解读Java回调机制总结内部类标识符JAVA foreach和普通for循环是否需要判断为...

  • Java内部类机制

    内部类的种类 成员内部类方法内部类匿名内部类静态内部类局部内部类 所谓内部类,是指在一个类的内部还有另外一个类的定...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Android内存泄漏总结

    前言 造成内存泄漏的根本原因是Java的隐式引用机制和非静态内部类(匿名内部类)生命周期与外部类不一致,官方的说法...

  • Java内部类机制详解

    Java允许在一个类里面定义另一个类,类里面的类就是内部类。内部类看似简单,其实里面大有乾坤,下面我们就来好好聊一...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

网友评论

      本文标题:Java内部类机制

      本文链接:https://www.haomeiwen.com/subject/wobvwttx.html