美文网首页
2019-06-16 Java核心代码看书笔记(六)2 内部类

2019-06-16 Java核心代码看书笔记(六)2 内部类

作者: 张开翔 | 来源:发表于2019-06-16 21:18 被阅读0次

一,内部类

定义在另一个类中的类
1.为什么使用内部类
①内部类可以访问该类所在作用域中的数据
②内部类可以对同一包中其他类隐藏起来
③不想编写大量代码时,内部类比较快捷

//使用内部类访问对象状态
     public class Outer {
     private int abc = 10;
     public void outerMethod() {
     System.out.println("In Outer class");   
        Inner inner = new Inner();
        inner.innerMethod();
      }
     public static void main(String[] args) {
         Outer outer = new Outer();
         outer.outerMethod();
     }
     
     private class Inner {
         public void innerMethod() {
             System.out.println("The var own in Outer is " + abc);
         }
     }
 }

运行结果:10
原因:非静态内部类对象会隐式地持有一个外部类对象的引用,我们假设这个引用名为outer,那么实际上内部类的innerMethod方法是这样子的

public void innerMethod() {
    System.out.println("The var own in Outer is " + outer.own);
 }

编译器会修改Inner类的构造器,添加一个外部类Outer的引用作为参数,大概是这个样子

 public Inner(Outer outer) {
     this.outer = outer;
}

注意: 我们希望一个静态域只有一个实例 ,不过对于每个外部对象,会分别有一个单独的内部类实例。如果这个域不是fianl,它可能是不唯一的。因为可以通过外部内进行更改,故需要设置为final 的

原因:用final修饰实际上就是为了保护数据的一致性
因为将数据拷贝完成后,如果不用final修饰,则原先的局部变量可以发生变化。这里到了问题的核心了,如果局部变量发生变化后,匿名内部类是不知道的(因为他只是拷贝了局不变量的值,并不是直接使用的局部变量)

例子:原先局部变量指向的是对象A,在创建匿名内部类后,匿名内部类中的成员变量也指向A对象。但过了一段时间局部变量的值指向另外一个B对象,但此时匿名内部类中还是指向原先的A对象。那么程序再接着运行下去,可能就会导致程序运行的结果与预期不同

2.局部内部类
定义的位置:在一个类的成员方法中。或者说,定义在一个成员方法的中的类就是局部内部类
①不能使用任何的访问修饰符。
②会生成两个.class文件,一个是Outer.class ,另一个是Outer$LocalInner.class。
③局部内部类只能访问方法中声明的final类型的变量

相关文章

  • 2019-06-16 Java核心代码看书笔记(六)2 内部类

    一,内部类 定义在另一个类中的类1.为什么使用内部类①内部类可以访问该类所在作用域中的数据②内部类可以对同一包中其...

  • 浅谈Java内部类

    由于Java核心技术上的例子很不错,本篇内部类博客部分代码以Java核心技术上的例子进行讲解。 内部类总览 内部类...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • 2019-06-23 Java核心代码看书笔记(六) 代理

    一,什么是代理 利用代理可以在运行时创建一个实现了一组给定接口的新类,这种只有编译时无法确定需要实现那个接口时才有...

  • Static的使用场景

    在java中static可以用来修饰:内部类、变量、代码块、方法 1.修饰内部类 2.修饰变量 3.修饰方法 4....

  • 事件关联

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

  • 什么是Java内部类

    定义 在Java类的{}代码块内部中定义的类称为内部类 内部类分为两种,静态内部类和非静态内部类 要点 静态内部类...

  • Java 中的成员内部类

    Java 中的成员内部类 内部类中最常见的就是成员内部类,也称为普通内部类。我们来看如下代码: 运行结果为: 从上...

  • Java 中的方法内部类

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

  • PHP转JAVA的记录

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

网友评论

      本文标题:2019-06-16 Java核心代码看书笔记(六)2 内部类

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