Java入门篇 之 内部类

本篇碎碎念:本篇没有碎碎念,想分享一段话:

你不笨,你只是需要时间,耐心就是智慧,不见得快就好,如果方向都不对,如果心术不正,如果德不配位,快就是对自己天分的一种浪费,不要急躁,慢慢来就很快。

-----董宇辉

今日份励志文案:  To best is yet to come 未来可期

少年乘风,必会展翅翱翔!!!

目录

 内部类

下面的图片表示的是静态内部类 

下面的图片是实例内部类 

 完整的举例代码

匿名内部类 

String类 


 内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类

内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,内部类和组合是完全不同的概念

博主认为,内部类可能看起来会比较奇怪(仅限个人想法)

创建内部类

创建内部类的方式就是把类的定义置于外围类的里面:

class OuterClass {
    public int date1 = 1;
    private int date2 = 2;
    public static int date3 = 3;

    //被static修饰的类就是静态内部类
    //static class InnerClass
    //没有被static修饰的叫做实例内部类或分非静态内部类
    class InnerClass {
        
        public int date4 = 4;
        private int date5 = 5;

        //常量是在编译的时候确定的
        //final常量
        //实例内部类中可以定义一个静态成员变量
        //但是这个变量必须是常量

        public static final int date6 = 6;
    }
}

下面的图片表示的是静态内部类 

 在输出System.out.println(date1)中报错,正确的写法下面也已经给出

在外部类中可以直接定义,但是在外部类之外就不可以,需要把外部类名加上

public void func() {
        //如果定义了一个方法,在方法里可以直接实例化静态内部类的对象
        InnerClass innerClass = new InnerClass();
        innerClass.test();
    }

下面的图片是实例内部类 


        //常量是在编译的时候确定的
        //final常量
        //实例内部类中可以定义一个静态成员变量
        //但是这个变量必须是常量
        
        public static final int date6 = 6;
    

 用final修饰,这是规定!!!

 完整的举例代码


//静态内部类代码
//外部类
class OuterClass {
    public int date1 = 1;
    private int date2 = 2;
    public static int date3 = 3;

    //被static修饰的类就是静态内部类
    //没有被static修饰的叫做实例内部类或分非静态内部类
    static class InnerClass {
         //优先在自己的地盘找,找到就访问自己的
        public int date1 = 11111;
        public int date4 = 4;
        private int date5 = 5;
        //常量是在编译的时候确定的
        //final常量
        //实例内部类中可以定义一个静态成员变量
        //但是这个变量必须是常量
        public static final int date6 = 6;

        public void test() {
            //date是属于外部类对象的成员,得对外部类的引用访问date1

            OuterClass date = new OuterClass();
            System.out.println(date1);
            System.out.println(this.date1);
            System.out.println(this.date1);
            System.out.println(date.date1);
            System.out.println(date.date2);
            System.out.println(date4);
            System.out.println(date5);
            System.out.println(date6);
        }
    }

    public void func() {
        //如果定义了一个方法,在方法里可以直接实例化静态内部类的对象
        InnerClass innerClass = new InnerClass();
        innerClass.test();
    }

}
public class  demo9 {
    public static void main(String[] args) {
        OuterClass out = new OuterClass();
        out.func();

        //以下两种写法一样
        //第一张写法看着比较怪,就是通过外部类引用去调用的InnerClass
        //OuterClass.InnerClass a=out.new InnerClass();
        //OuterClass.InnerClass b=new OuterClass().new InnerClass();
        // a.test();
        //b.test();

        //如果在外部类之外就不可以直接实现了
       /* OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
        innerClass.test();
        System.out.println("----我是分界线-----");
        OuterClass innerClass1=new OuterClass();
        innerClass1.func();
*/
    }
}

打印结果! 

匿名内部类 

interface InterFaceA{
    //定义接口
    public void func();
}
class TestA implements InterFaceA{

    @Override
    public void func() {
        System.out.println("重写的func");
    }
}
public class demo11 {
    public void func(){
        System.out.println("func");
    }
    public static void main(String[] args){
        TestA testA=new TestA();
        System.out.println("==========");
        //接口引用,引用这个东西,{}里面的就是匿名内部类
        InterFaceA a =new InterFaceA(){
            @Override
            public void func() {
                System.out.println("阿巴阿巴");
            }
        };
        a.func();
        testA.func();
    }
    public static void main1(String[] args){
        demo11 demo=new demo11();
        new demo11();//匿名对象,这个对象没有名字

        demo.func();//只实例化了一个demo对象
        demo.func();

        new demo11().func();//实例化了两个demo11对象
        new demo11().func();
        //如果说,以后的场景是只使用一次对象,那么就使用内部对象


    }
}


如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

希望对你们有所帮助

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/173629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go——二、变量和数据类型

Go 一、Go语言中的变量和常量1、Go语言中变量的声明2、如何定义变量方式1:方式2:带类型方式3:类型推导方式定义变量方式4:声明多个变量总结 3、如何定义常量4、Const常量结合iota的使用 二、Golang的数据类型1、概述2、整型2.1 类…

Windows配置全局代理

一. Windows下为PowerShell/CMD/Git设置代理 —————————————————————————————————————————————————————— 二. [WinError 10061] 由于目标计算机积极拒绝,无法连接。 keyerror:192。 HTTP Error 403: Forbidd…

python实战—数据分析与图表1(QQ群聊天数据分析) lv2

目录 一、核心代码解释 二、代码 三、运行截图 一、核心代码解释 1、readlines() 方法 描述 readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。 语法 r…

Monitor 原理

每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。 Monitor组成内容 EntryList(入口列表) 当一个线…

STM32F4串口USART发送为00的解决方案

检查接线是否正确检查TX是否为复用推挽输出 3.检查是否将TX和RX引脚重映射为USART功能 在STM32中,每个GPIO引脚可以配置为不同的复用功能,例如UART、SPI、I2C等。具体来说,GPIO_PinAFConfig函数用于配置GPIO引脚的复用功能。它的参数包括GPIO…

ANSYS中如何手动为装配体添加接触约束教程

接触的类型: 在接触类型(Type)选项中,软件共提供了绑定接触(Bonded)、不分离接触(No Separation)、无摩擦接触(Frictionless)、粗糙接触(Rough&a…

新一代最强开源UI自动化测试神器Playwright(Java版)(对话框处理)

🎭Playwright让网页对话框🌐💬处理变得更加快捷!网页对话框是在网页上出现的常见弹窗,包括Alert、Confirm和Prompt等。这些对话框通常需要用户输入信息或进行某些选择,但是在自动化测试中处理它们可能会很棘…

全球首款容器计算产品重磅发布,激活上云用云新范式

云布道师 10 月 31 日,杭州云栖大会上,阿里云云原生应用平台负责人丁宇宣布,阿里云容器计算服务 ACS 正式发布!ACS 将大幅降低企业和开发者用云门槛,真正将 Serverless 理念大规模落地。 容器计算服务 ACS&#xff0c…

fractional Brownian Motion driven stochastic integrals

See https://mathoverflow.net/questions/304366/fractional-brownian-motion-driven-stochastic-integrals

程序员如何“升级打怪”?我用了这几个“歪瓜”!

不会吧?不会吧?计算机本命专业出身、以及半路出家的,混了几年了,还在新手村?对得起这几年摸的鱼? 思考一下:如何从小白一跃为大师,从此走上人生巅峰、迎娶白富美?变强只…

高速数据时代的引领者:ETU-LINK 100G DAC全系列技术简介

伴随科技的不断进步,我们正迅速迈向一个高速数据时代。在这个时代,数据的传输速度已经成为发展的重要因素之一。ETU-LINK推出的100G DAC全系列产品,助力高速数据传输领域的新一轮发展。 一、100G DAC全系列产品解析 100G QSFP28 DAC无源高速…

【Python】给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式…

# 聚类系列(一)——什么是聚类?

目前在做聚类方面的科研工作, 看了很多相关的论文, 也做了一些工作, 于是想出个聚类系列记录一下, 主要包括聚类的概念和相关定义、现有常用聚类算法、聚类相似性度量指标、聚类评价指标、 聚类的应用场景以及共享一些聚类的开源代码 下面正式进入该系列的第一个部分&#xff…

设置 wsl 桥接模式

一、环境要求 Win10/Win11 专业版&#xff0c;并已安装 Hyper-V 二、具体步骤 打开 Hyper-V 管理器 创建虚拟交换机 WSL Bridge 修改wsl配置文件 .wslconfig .wslconfig 文件所在路径如下&#xff1a; C:\Users\<UserName>\.wslconfig若 .wslconfig 文件不存在&am…

苍穹外卖遇到的问题—员工分页查询

项目场景&#xff1a; 系统中的员工很多的时候&#xff0c;如果在一个页面中全部展示出来会显得比较乱&#xff0c;不便于查看&#xff0c;所以一般的系统中都会以分页的方式来展示列表数据。而在我们的分页查询页面中, 除了分页条件以外&#xff0c;还有一个查询条件 “员工姓…

美团面试:微服务如何拆分?原则是什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如美团、字节、如阿里、滴滴、极兔、有赞、希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 微服务如何拆分&#xff1f; 微服务拆分的规范和原则…

行情分析——加密货币市场大盘走势(11.21)

大饼昨日笔者已经离场&#xff0c;目前下跌形态破坏&#xff0c;等待机会再入场&#xff0c;下跌是必然的&#xff0c;只是现在从MACD日线来看是要上涨的&#xff0c;上涨趋势没有打破&#xff0c;等待机会入场。 MACD日线多单策略&#xff1a;入场37500 止盈38000-38600 止损…

MySQL InnoDB 引擎底层解析(二)

6.2.InnoDB 的表空间 表空间是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个页的池…

AC修炼计划(AtCoder Beginner Contest 329)

传送门&#xff1a;&#xff33;&#xff4b;&#xff59; Inc, Programming Contest 2023&#xff08;AtCoder Beginner Contest 329&#xff09; - AtCoder A&#xff0c;B&#xff0c;C&#xff0c;D 这四道题比较简单&#xff0c;就不多叙述。 E - Stamp 这题是一道比较…

Java 代码 格式化插件

Java代码 格式化插件 文章目录 Java代码 格式化插件一. 前言1.1 官网1.2 概念1.3 格式化更变规则 二. 使用2.1 插件添加2.2 使用 一. 前言 1.1 官网 spring-javaformat-maven-plugin 1.2 概念 一组可应用于任何 Java 项目以提供一致的“Spring”风格的插件。该套件目前包括…