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

目录
  • 一、内部类介绍
  • 二、成员内部类:
    • 1、非静态内部类
    • 2、静态内部类
  • 二、局部内部类:
    • 2、有名的局部内部类
    • 1、匿名局部内部类(重要)

一、内部类介绍

1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class)。内部类是类的五大成员之一(属性、 方法、构造器、代码块、内部类)。

分类:

二、成员内部类:

1、非静态内部类

说明:定义在成员位置中(方法或代码块外面),无static修饰。

1.可以直接访问外部类的所有的成员

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类

package local_class;

public class localclass {//外部类
    //属性位置
    private int n1=10;
    class localN1{//局部类
        public void output(){
            //==1==.可以直接访问外部类的所有的成员,包括私有
            System.out.println("获取私有成员"+n1);
        }
    }
    //写一个方法来创建局部类的一个实列
    public void output(){
        localN1 LocalN1 = new localN1();
        LocalN1.output();
    }

}

实现:

2、静态内部类

**说明:**定义在成员位置中(方法或代码块外面),有或无static修饰。

1.可以直接访问外部类的静态的成员,不能访问非静态成员。

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类

代码:

package local_class;

public class _static_localclass {//外部类
    private int n1=10;
    static int n2=20;
    static public class localN2{//静态局部类
        public void output(){
            //==1==.可以直接访问外部类的所有的成员,包括私有
            System.out.println("获取_static_localclass私有成员"+n2);
            //System.out.println(n1);
        }
    }
    //写一个方法来创建局部类的一个实列
    public void output(){
        localN2 LocalN2 = new localN2();
        LocalN2.output();
    }
}

成员内部类:用法比较简单。

二、局部内部类:

说明:局部类是定义在外部类的方法内或者代码块内。

1.可以直接访问外部类的所有的成员。

2.不能添加访问修饰符,局部内部类的地位就是一个局部变量(所以可以用fianl修饰)。

3.作用域:作用在所定义的方法中或者代码块中。

4.访问方式:局部内部类访问外部外部类成员可以直接访问。外部类访问局部内部类,在外部类作用域内先创建对象再访问。

5.外部其他类不能访问内部类。

6.外部类成员与内部类成员重名时,默认就近原则,如果想用外部类的话可以使用:外部类名.this.成员 。

例如:

2、有名的局部内部类

错误代码

正确代码

package _inner_class;

public class Named_local_inner_class {//外部类
    private int a1=1;
    int a2=2;
    private void fun(){
        System.out.println("输出了私有方法");
    }
    //第一种情况,在方法中
    //第二种情况,在代码块中(我就不打代码了和在方法中一样的)
    //此处以方法中为例。
    public void output(){//方法

        class inner_class{//局部内部类
            //1.可以访问外部类的所有成员
            public void _output(){
                System.out.println("a1="+a1);//访问的私有成员
                System.out.println("a2="+a2);
                fun();
            }

        }
		//只需要实例化就行了,然后调用这个 output()方法。
		//注意作用域
        inner_class Inner_class=new inner_class();
        Inner_class._output();
    }//结束方法

}//外部类

调用

1、匿名局部内部类(重要)

1.本质还是一个内部类 就是一个类,该类没有名字(其实有名字,只是我们看不见,系统分配)。

2.同时还是一个对象。 基本语法

new 类名或接口名(参数列表){
类体
};

调用匿名内部类:

输出

和有名的局部内部类的区分

1.A22对象只使用一次,以后不再使用时用匿名局部内部类。

2.A22的编译类型和运行类型是什么?(运行类型其实就是匿名局部内部类,就是XXXXX.外部类名$1)

如图:

最佳实践:当作参数直接传递,简介高效。

到此这篇关于学生视角带你了解Java内部类的文章就介绍到这了,更多相关Java 内部类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中的内部类你了解吗

    目录 成员内部类 1.定义 2.成员内部类的使用规则 3.成员内部类对象的创建: 4.内部类与静态域 静态内部类: 1.定义: 2.静态内部类的使用规则: 3.静态内部类对象的创建 成员内部类 VS 静态内部类 方法内部类: 1.定义: 2.方法内部类的使用规则: 3.注意形参的使用 匿名内部类(函数式编程) 总结 成员内部类 1.定义 成员内部类是直接定义在类中,不加任何修饰符的(特指不加static修饰的)的内部类,可以类比着成员变量来理解,如下面这个代码段中的Inn类就是一个成员内部类 p

  • 详解Java内部类与对象的打印概念和流程

    目录 一.内部类的概念 二.内部类的分类 三.成员内部类 1.普通内部类 2.静态内部类 四.局部内部类 五.对象的打印 一.内部类的概念 在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类.内部类也是封装的一种体现. public class OutClass {//外部类 class InnerClass{//内部类 } } 注意事项: 1.内部类一定是定义在class 类名{}之中的类,定义在class 类名{}之外的,哪怕是在一份文件中,也并不

  • java外部类与内部类的关系详解

     private,public,protected,default的访问权限区别 在学习外部类与内部类之前我们首先要弄明白private,public,protected,default在访问权限上有什么不同,这对我们之后的理解会有一定的帮助. 1.private:访问权限最低的访问控制符,被它修饰的变量只能访问本类的对象. 2.public:访问权限最高,不仅是本类,子类,本包,其他的包,都可以去访问它修饰的对象. 3.default:访问权限限制在本类以及本包内. 4.protected:访

  • 详解Java匿名内部类

    匿名内部类: 先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是什么感觉. 为了进行对比,先举一个正常的类方法调用的例子(大家应该都看的懂吧): 输出结果为: 接下来便开始说正题吧,匿名内部类,通过名字,想必大家就知道什么是匿名内部类了吧, 1.定义:就是没有名字的内部类(内部类之前介绍过了哦). 2.使用内部类有什么好处呢,一句话就概括了:简化书写,至于是怎么简化的,哪里简化了等下再说. 3.先说一下什么时候使用匿名

  • Java 内部类的定义与范例

    目录 一.前言 二.内部类 语法格式: static修饰内部类 内部类未被static修饰时: 内部类被static修饰后 演示操作: 一.前言 前面我们学习了一个小的项目,现在我们来学习新的知识点,关于内部类的描述,其实 顾名思义就是在类的内部有一个类,简称套娃类(个人观点) 二.内部类 一个类定义在另一个在一个类的内部叫内部类. 内部类可以直接访问外部类的私有和非私有成员,而外部类不能直接访问内部类 (包括所有外部类成员) 外部类成员要访问内部类是,必须创建内部类对象. 外部类通过创建对象也

  • java的内部类和外部类用法讲解

    目录 一.为何使用内部类 二.内部类与外部类的联系 2.1 内部类是一个相对独立的实体,与外部类不是is-a关系 2.2 内部类可以直接访问外部类的元素,但是外部类不可以直接访问内部类的元素 2.3 外部类可以通过内部类引用间接访问内部类元素 三.创建内部类 3.1 在外部类外面(或外部类main方法)创建内部了对象 3.2 在外部类里面创建内部类 四.内部类的种类: 4.1 成员内部类 4.2 方法内部类 4.3 匿名内部类 4.4 静态内部类 一.为何使用内部类 内部类提供了更好的封装,只有

  • Java中内部类的概念与分类详解

    目录 内部类概念 内部类的分类: 成员内部类 普通内部类 静态内部类 局部内部类 总结 只能使用修饰限定符:public 和 默认 来修饰类 内部类概念 在 Java 中,将一个类定义在另一个类的内部,称为内部类 就是在一个类内部进行其他类结构的嵌套操作 内部类也是封装的一种体现 举例: //外部类 public class OutClass { //内部类 class InnerClass{ } } 注意:内部类和外部类共享一个 java源文件,但是经过编译之后,会形成各自单独的字节码文件 内

  • java外部类与内部类简介

     一.内部类 内部类就是将一个类A定义在类B里边,里边的那个类A称为内部类,外边的类B称为外部类 成员内部类定义格式: class 外部类{ class 内部类{ } } class A{ class B{ } } 在描述一个事物是,事物的里边还有另外一个事物就可以用到内部类 访问特点: 1.内部类可以直接访问外部类的成员,包括私有成员. 2.外部类要访问内部类的成员,必须要建立内部类的对象. 创建内部类格式: 外部类.内部类 对象名=new 外部类型().new 内部类型(); 二.匿名内部类

  • Java的内部类总结

    目录 前言 一,成员内部类 1,成员内部类的特点 2,成员内部类的实现 3,内部类和外部类的关系 二,静态内部类 1,静态内部类的特点 2,比较成员内部类和静态内部类 3,静态内部类的实现 三,方法内部类 1,方法内部类的特点 2,方法内部类的实现 四, 匿名内部类 1,匿名内部类的特点 2,匿名内部类的实现 总结 前言 最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记

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

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

  • 学生视角手把手带你写Java 线程池改良版

    目录 Java手写线程池(第二代) 第二代线程池的优化 线程池构造器 线程池拒绝策略 execute方法 手写线程池源码 MyExecutorService MyRejectedExecutionException MyRejectedExecutionHandle 核心类MyThreadPoolExecutor 线程池测试类 Java手写线程池(第二代) 第二代线程池的优化 1:新增了4种拒绝策略.分别为:MyAbortPolicy.MyDiscardPolicy.MyDiscardOldes

  • 学生视角手把手带你写Java 线程池

    目录 Java手写线程池(第一代) 手写线程池-定义参数 手写线程池-构造器 手写线程池-默认构造器 手写线程池-execute方法 手写线程池-处理任务 手写线程池-优雅关闭线程池 手写线程池-暴力关闭线程池 手写线程池-源代码 问题 Java手写线程池(第一代) 经常使用线程池,故今天突发奇想,手写一个线程池,会有很多不足,请多多宽容.因为这也是第一代的版本,后续会更完善. 手写线程池-定义参数 private final AtomicInteger taskcount=new Atomic

  • 学生视角看Java 面向对象的继承本质

    1.什么是继承? (1)用来提高代码的复用性 (2)将相同的功能模块封装到方法中需要使用时调用方法达到代码复用的目的 (3)通过继承将多个类中的相同的类容摘取出来,变成一个新类,让其他类和当前的新类产生关系,达到代码复用性的目的 注意:Java是单继承与c++有区别 ,c++可以多继承. 2.继承的格式 关键字extends 3.继承的特性 *子类拥有父类非 private 的属性.方法. *子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. *子类可以用自己的方式实现父类的方法. *Ja

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

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

  • 基于java内部类作用的深入分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦.学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地

  • Java内部类_动力节点Java学院整理

    内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同.内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成后出现outer.class和outer$inner.class两类.所以内部类的成员变量/方法名可以和

  • Java内部类与匿名内部类

    目录 一.内部类 什么是内部类 成员内部类 访问特点 二.匿名内部类 前提 格式 使用方式 一.内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类. 成员内部类 成员内部类 :定义在类中方法外的类. 定义格式: class 外部类 {class 内部类{}} 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构.比如,电脑类Computer 中包含中央处理器类Cpu ,这时, Cpu 就可以使用内部类来描述,定义在成员位置. 代码举例

  • java 内部类的实例详解

    java 内部类的实例详解 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. public class OuterClass { private String name ; private int age; public String getName() { return name; } p

  • java内部类的那些事儿_让你一看就弄明白

    在"基于java内部类作用的深入分析"中你可以了解java内部类的一些东西,不过内部类中还有一些地方值得我们细心研究... 下面是我总结出来的java内部类的一些东西,分享给大伙儿....one:静态内部类可以有静态成员,而非静态内部类则不能有静态成员怎样理解这个呢?看看下面的代码: 复制代码 代码如下: /**  *   */ package com.b510.test; public class Test {     private int number = 1; // 非静态内部

随机推荐