深入了解Java内部类的用法

目录
  • 1.内部类分类和概念
  • 2.局部内部类
  • 3.匿名内部类(重要)
    • 基于接口的匿名内部类
    • 基于类的匿名内部类
    • 一些细节
    • 匿名内部类的最佳实践
  • 4.成员内部类
  • 5.静态内部类

1.内部类分类和概念

java类的五大成员:属性,方法,构造器(构造方法),代码块,内部类

内部类的分类:

定义在外部类局部的位置(比如方法内):

  • 局部内部类(有类名)
  • 匿名内部类(无类名)

定义在外部类成员位置上:

  • 成员内部类(没有static修饰)
  • 静态内部类(有static修饰)

概念:在一个类的内部再定义一个完整的类,也会生成一个class文件

代码示例:

/**
 * 内部类
 */
public class InnerClass {
    private int n = 521;

    public InnerClass(int n) {
        this.n = n;
    }

    class Inner { // 内部类

    }
}

谨记:内部类很重要,java底层源码内部类使用场景很多!

2.局部内部类

class Outer001 { // 外部类
    private int n = 521;
    private void kaka() {
        System.out.println("我是外部类的方法!");
    }
    public void show() {
        // 局部内部类定义在外部类的局部位置,通常在方法中
        class Inner001 {
            // 局部内部类
            public void f() {
                // 可以直接访问外部类的所有成员,包含私有的
                System.out.println(n);
            }
        }
    }
}

不能添加访问修饰符,但是可以添加final

局部内部类的作用域只在定义它的方法或者代码块中

外部类使用内部类的方法,直接new即可:

public void show() {
    // 局部内部类定义在外部类的局部位置,通常在方法中
    final class Inner001 {
        // 局部内部类
        public void f() {
            // 可以直接访问外部类的所有成员,包含私有的
            System.out.println(n);
            kaka();
        }
    }
    // 外部类使用内部类的方法
    Inner001 inner001 = new Inner001();
    inner001.f();
}

外部其他类不能访问局部内部类!

外部类和局部内部类的成员重名时,默认遵循就近原则,如果想要访问外部类的成员,使用外部类名.this.成员进行访问

3.匿名内部类(重要)

匿名内部类其实有名字,它的名字是底层的JDK给分配的~系统分配该类名的时候会在外部类的基础上加上$1,存在多个内部类的,$后面的值进行递增

基于接口的匿名内部类

/**
 * 匿名内部类
 */
public class AnonymousInnerClass {
    public static void main(String[] args) {
        Outer002 outer002 = new Outer002();
        outer002.method();
    }
}

class Outer002 {
    private int n = 521;

    public void method() {
        // 基于接口的匿名内部类
        // tiger的编译类型是IA,运行类型就是匿名内部类!
        // 系统分配该类名的时候会在外部类的基础上加上$1,此处是Outer002$1
        // JDK底层在创建了匿名内部类之后,立即创建了一个实例,并且把地址返回给tiger
        IA tiger = new IA() {
            @Override
            public void cry() {
                System.out.println("我是一只小老虎                        
(0)

相关推荐

  • Java十分钟精通内部类的使用

    内部类: 其实内部类顾名思义,就是类中类,一个类里面还有一个类. 内部类分为四种: 普通内部类 静态内部类 方法内部类 匿名内部类 我们一一去了解一下~~ A.普通内部类: 我们先通过代码去了解一下: package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部

  • Java基本语法之内部类示例详解

    目录 1.内部类概念及分类 2.实例内部类 2.1实例内部类的创建 2.2使用.this和.new 2.3内部类实现迭代打印 2.4内部类的继承 3.静态内部类 4.匿名内部类 1.内部类概念及分类 将一个类定义在另一个类的内部或者接口内部或者方法体内部,这个类就被称为内部类,我们不妨将内部类所在的类称为外围类,除了定义在类,接口,方法中的内部类,还有一种特殊的内部类,那就是使用关键字new创建一个匿名类的对象,而这个匿名类其实就是一个内部类,具体说是一个匿名内部类,经常用于传入构造器实参构造对

  • 浅谈Java内部类——静态内部类

    今天来说说Java中的最后一种内部类--静态内部类 所谓的静态内部类,自然就是用static修饰的内部类,那用static修饰过后的内部类,跟一般的内部类相比有什么特别的地方呢? 首先,它是静态的,这就意味着它的创建不依赖于外部类,创建内部类的实例不需要像普通内部类一样先创建外部类实例才能创建. 其次,有优势必然有劣势,它不能像普通内部类一样无限制的访问外部类的方法和成员变量,只能访问静态成员变量和静态方法. 话不多说,先来看个栗子: public class StaticInnerClass

  • java内部类的最详细详解

    目录 1.成员内部类 2.静态内部类 3.方法内部类 4.匿名内部类 总结 1.成员内部类 内部类与外部类的关系 a.成员内部类的创建需要依赖于外部类对象-(成员方法必须通过对象调用),在没有外部类实例之前无法创建成员内部类对象 b.内部类与外部类相对独立,不是is a 的关系(发动机-汽车) c.私有属性的互相访问,内部类可以直接访问外部类,而外部类访问内部类需要内部类的对象来访问 d.创建内部类的语法 1.在外部类内部创建内部类对象(Inner inner = new Inner()) 2.

  • Java超全面梳理内部类的使用

    目录 一.内部类 1.内部类的概念 2.内部类的定义 3.内部类与外部类的访问规则 4.内部类的注意事项 二.匿名内部类 一.内部类 1.内部类的概念 内部类是定义在类中的类. 内部类把逻辑上相关的类放在一起.而有的内部类不会在其他地方用到,它没有类名,在定义的时候就生成一个该类的实例,称为匿名内部类.匿名内部类是一种特殊的内部类. 当然啦!可以把内部类看作外部类的一个成员,它拥有自己的成员变量和成员方法.通过实例化对象可以访问其成员变量或调用成员方法. 2.内部类的定义 把类的定义放在一个用于

  • Java中内部类使用方法实战案例分析

    本文实例讲述了Java中内部类使用方法.分享给大家供大家参考,具体如下: 一 点睛 分三种情况讨论内部类的使用: 1 在外部类内部使用内部类 2 在外部类以外使用非静态内部类 3 在外部类以外使用静态内部类 二 在外部类内部使用内部类 可以直接通过内部类的类名来定义变量,通过new调用内部构造器来创建实例. 不要在外部类的静态成员(包括静态方法和静态初始化块)中使用非静态内部类,因为静态成员不能访问非静态成员. 三 在外部类以外使用非静态内部类 1 点睛 private 修饰的内部类只能在外部类

  • 深入了解Java内部类的用法

    目录 1.内部类分类和概念 2.局部内部类 3.匿名内部类(重要) 基于接口的匿名内部类 基于类的匿名内部类 一些细节 匿名内部类的最佳实践 4.成员内部类 5.静态内部类 1.内部类分类和概念 java类的五大成员:属性,方法,构造器(构造方法),代码块,内部类 内部类的分类: 定义在外部类局部的位置(比如方法内): 局部内部类(有类名) 匿名内部类(无类名) 定义在外部类成员位置上: 成员内部类(没有static修饰) 静态内部类(有static修饰) 概念:在一个类的内部再定义一个完整的类

  • Java内部类原理与用法实例总结

    本文实例讲述了Java内部类原理与用法.分享给大家供大家参考,具体如下: 一.非静态内部类 public class OutClass { private String name = "outclass"; public void show() { System.out.println(this.name); } public void innerShow() { InnerClass inner = new InnerClass(); inner.show(); inner.outS

  • java内部类原理与用法详解

    本文实例讲述了java内部类原理与用法.分享给大家供大家参考,具体如下: 概念 内部类:可以包含在另外一个类中的类 外部类:包含内部类的类 每个内部类都会被编译为一个独立的类,生成一个独立的字节码文件. 内部类可以方便地访问外部类的私有变量,内部类也可以声明为private从而实现对外完全隐藏. 分类 java中的四种内部类(根据定义的位置和方式划分) -静态内部类 -成员内部类 -方法内部类 -匿名内部类 分类介绍 -静态内部类 特征:在类的内部中存在另一个类,且该类被static修饰 使用范

  • Java内部类原理、概述与用法实例详解

    本文实例讲述了Java内部类原理.概述与用法.分享给大家供大家参考,具体如下: 内部类的概述 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有. B:外部类要访问内部类的成员,必须创建对象. */ class Outer { private int num = 10; class Inner { public void show() { //内部类可以直接访问外部类的

  • Java内部类和匿名内部类的用法说明

    一.内部类: (1)内部类的同名方法 内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中OuterClass与MethodName换成实际外部类名及其方法:this为关键字,表示对外部类的引用):若内部类无同名方法可以直接调用外部类的方法. 但外围类无法直接调用内部类的private方法,外部类同样无法直接调用其它类的private方法.注意:内部类直接使用外部类的方法与该方法的权限与是否static无关,

  • java内部类的定义与分类示例详解

    内部类 基本介绍 一个类的内部又完整的嵌套了另一个类结构.被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class).是我们类的第五大成员,内部类最大的特点就是可以直接访问私有属性,并且可以体现类与类之间的包含关系 基本语法: class Outer{ class Inner{ } } 内部类的分类: 1.定义在外部类局部位置上(比如方法内): 1).局部内那类(有类名) 2).匿名内部类(没有类名,重点); 定义在外部类的成员位置上: 1)成员内部类(没

  • Java内部类和异常类的概念以及使用

    1 内部类 Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类. 内部类的类体中不可以声明类变量和类方法.外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员. 内部类的使用规则: (1)声明内部类如同在类中声明方法或变量一样,一个类把内部类看作是自己的成员. (2)外嵌类的类体中可以用内部类声明的对象,作为外嵌类的成员. (3)外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. (4)内部类的类体中不可以声明类变量和方法. (5

  • 全面探究 Java 内部类

    目录 一. 实例内部类 1. 定义 2. 如何获取实例内部类这个对象的引用 3. 注意事项 二. 静态内部类 1. 定义 2. 如何获取静态内部类这个对象的引用 3. 注意事项 三. 匿名内部类 1. 定义 2. 常见用法 3. 注意事项 内部类(inner class)是定义在另一个类中的类.为什么要使用内部类呢?主要有两个原因:1.内部类可以对同一个包中的其他类隐藏.2.内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据. 下面,我就来带领大家去学习Java中比较常见的几种内部

  • Java Collection集合用法详解

    目录 1.集合的主要体系及分支 1.1Collection集合及实现类 2.List集合(List是带有索引的,所以多注意索引越界等问题) 2.1 List的实现类 3.Set集合 3.1HashSet(Set的实现类) 3.2TreeSet集合(Set的实现类) 4.集合的高频面试题 4.1Arraylist 与 LinkedList 异同 4.2ArrayList 与 Vector 区别 集合框架底层数据结构总结 1.Collection 1.集合的主要体系及分支 1.1Collection

  • 学生视角带你了解Java内部类

    目录 一.内部类介绍 二.成员内部类: 1.非静态内部类 2.静态内部类 二.局部内部类: 2.有名的局部内部类 1.匿名局部内部类(重要) 一.内部类介绍 1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class).内部类是类的五大成员之一(属性. 方法.构造器.代码块.内部类). 分类: 二.成员内部类: 1.非静态内部类 说明:定义在成员位置中(方法或代码块外面),无static修饰. 1.可以直接访问外部类的所有的

随机推荐