JavaSE - 内部类

news2024/11/17 14:31:19

目录

final定义常量

1. 内部类

1.1 实例内部类

1.1.1 如何获取实例内部类的对象

1.1.2 实例内部类中不能有静态的成员变量

1.1.3 实例内部类方法中可以直接访问外部类中的任何成员

1)在实例内部类方法中访问同名的成员时,优先访问自己的(就近原则)

2)如果非要访问外部类同名的成员,该怎么办呢?

1.1.4 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象

1.1.5 实例内部类也受public、private等访问限定符的约束

1.1.6 代码

1.2 静态内部类 

1.2.1 如何获取静态内部类的对象

​1.2.2 静态内部类中可以有静态的成员变量和成员方法

1.2.3 静态内部类方法中不能访问外部类中的非静态成员

1.2.4 外部类中,不能直接访问静态内部类中的成员,如果要访问必须先要创建内部类的对象

1.2.5 实例内部类也受public、private等访问限定符的约束

1.2.6 代码 

1.3 局部内部类

1.3.1 局部内部类只能在所定义的方法体内部使用 

1.3.2 不能被public、static等修饰符修饰

1.3.3 代码 

1.4 匿名内部类

2. 对象的打印


final定义常量

final - 定义常量

常量是在程序编译的时候确定的,一旦初始化,就不能进行修改了,只能初始化一次。

一般定义常量使用 static final ,static 表示只有一份,final表示是常量,不能被修改。 

1. 内部类

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服 务,那么整个内部的完整结构最好使用内部类。内部类也是封装的一种体现。

分类:

  1. 实例内部类(又叫构造内部类、非静态内部类)
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类 

1.1 实例内部类

1.1.1 如何获取实例内部类的对象

先对外部类进行实例化,再对实例内部类进行实例化

 1.1.2 实例内部类中不能有静态的成员变量

非要定义,只能是被 static final 修饰的常量。

(1)因为静态成员变量在外部类(OuterClass)加载时就会被执行,而InnerClass实例化需要外部类对象的引用(outerClass),要先有外部类对象。静态成员会先于InnerClass执行,所以静态的成员变量不能在实例内部类中。

(2)在static后加上final并且赋值了,就不报错可以运行了。因为加上final再赋值,此代码就相当于一个常量,常量在编译时就确定了它的值

1.1.3 实例内部类方法中可以直接访问外部类中的任何成员

1)在实例内部类方法中访问同名的成员时,优先访问自己的(就近原则

2)如果非要访问外部类同名的成员,该怎么办呢?

法一:在实例内部类方法中实例化外部类对象,用 外部类对象的引用.同名成员 来访问

法二:在实例内部类方法中,拿到外部类的this(外部类对象的引用)用 外部类名称.this.同名成员 来访问

 

1.1.4 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象

 

  1.1.5 实例内部类也受public、private等访问限定符的约束

 

1.1.6 代码

//实例内部类
class OuterClass{
    public int data1 = 1;
    int data2 = 2;
    public static int data3 = 3;
    public void test(){
        System.out.println("OutClass:test()");
       // System.out.println(data4); error
        InnerClass innerClass = new InnerClass();
        System.out.println(innerClass.data4);
    }
    class InnerClass{
        public int data1 = 111;
        public int data4 = 4;
        int data5 = 5;
        public static final  int data6 = 6;

        public  void func(){
            System.out.println("InnerClass:func()");
            System.out.println(data1);
            System.out.println(OuterClass.this.data1);
          /*  OuterClass outerClass = new OuterClass();
            System.out.println(outerClass.data1);*/ //也可以
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        //OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass(); 也可以
     OuterClass outerClass = new OuterClass();
     OuterClass.InnerClass innerClass = outerClass.new InnerClass();
     innerClass.func();
    }
}

1.2 静态内部类 

1.2.1 如何获取静态内部类的对象

不需要先创建外部类对象,就能获取静态内部类对象(静态的,是属于类的)

1.2.2 静态内部类中可以有静态的成员变量和成员方法

静态的是属于类的,在外部类加载时都会被执行。

1.2.3 静态内部类方法中不能访问外部类中的非静态成员

因为外部类中的非静态成员需要先实例化外部类对象,通过外部类对象的引用才能访问

 

1.2.4 外部类中,不能直接访问静态内部类中的成员,如果要访问必须先要创建内部类的对象

1.2.5 实例内部类也受public、private等访问限定符的约束

 

1.2.6 代码 

//静态内部类
class OuterClass2{
    public int data1 = 1;
    int data2 = 2;
    public static int data3 = 3;
    public void  test(){
        System.out.println("OuterClass2:test()");
        InnerClass2 innerClass2 = new InnerClass2();
        System.out.println(innerClass2.data4);
    }
    static class InnerClass2{
        public int data4 = 4;
        int data5 = 5;
        public static int data6 = 6;
        public void func(){
            System.out.println("InnerClass2:func()");
            OuterClass2 outerClass2 = new OuterClass2();
            System.out.println(outerClass2.data1);
            System.out.println(outerClass2.data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
        }
    }
}
public class Test2 {
    public static void main(String[] args) {
        OuterClass2.InnerClass2 innerClass2 = new OuterClass2.InnerClass2();
        innerClass2.func();
    }
}

1.3 局部内部类

定义在外部类的方法体中,只能在其定义的位置使用。几乎不被使用

1.3.1 局部内部类只能在所定义的方法体内部使用 

 

1.3.2 不能被public、static等修饰符修饰

 

1.3.3 代码 

//局部内部类
public class Test3 {
    public void test(){
        class Inner{
            public void func(){
                System.out.println("Inner:func");

            }
        }
        Inner inner = new Inner();
        inner.func();

    }
    public static void main(String[] args) {
      
    }
}

1.4 匿名内部类

后续来补充

2. 对象的打印

重写toString

为啥要重写toString?重写toString为什么就能实现打印了呢?

我的以下博客中有详细介绍:

JavaSE - 调用和重写Object类中的toString方法、equals方法以及理解Arrays类中的toString方法

@Override - 注解,帮你检查 你重新写的 对不对

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nacos注册中心+Ribbon负载均衡+完成openfeign的调用

目录 1.注册中心 1.1.nacos注册中心 1.2. 微服务注册和拉取注册中心的内容 2.3.修改订单微服务的代码 3.负载均衡组件 3.1.什么是负载均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的负载均衡策略 4.openfeign完成服务调用 4.1.什么是OpenFeign 4.2…

5.2 Python高阶特性之---切片迭代

一、 切片 一般用于提取指定区间内的内容,常用于:str、list、tuple等类型的的局部变量,如下为具体案例1、 【列表切片】 res_list [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]1) 无步长: …

C++——类的六大默认成员构造函数

文章目录 1.默认成员函数思维导图2.构造函数定义特性 2.析构函数定义特性 3.拷贝构造函数定义特性 4.赋值构造函数定义特性 5.重载取地址运算符定义特性 6.重载const取地址运算符定义特性 1.默认成员函数思维导图 2.构造函数 定义 在面向对象编程中,构造函数是一种…

RHCSA——Linux网络、磁盘及软件包管理

ZY目录 Linux操作系统讲解:一、网络管理1、NetworkManager1.1、nmtui界面:1.2、nmcli使用方法: 2、配置网络2.1、网络接口以及网络连接2.2、配置方法:2.3、ping命令:2.4、wget命令 二、磁盘管理2.1、分区得两种格式2.1…

HCIP第五次作业

配置IP地址 r1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [r1-GigabitEthernet0/0/0]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int lo1 [r1-LoopBack1]ip add 10.0.0.1 24 r2 [r2]int g0/0/0 [r2-GigabitEthernet0/0/0]ip add 12.0.0.2 …

在vs里配置c运行环境

勾选环境包 勾选完安装就好 创建c项目 选择相关配置 设置名称和位置 创建c后缀文件 一新建项 二设置名字 输出hello world 代码段 运行结果

C++ 文档加密与解密运用【Crypto++】库

一、下载Cryptopp 鼠标放到下面网址,点击下载即可 github地址(8.7.0版本):https://github.com/weidai11/cryptopp/releases/tag/CRYPTOPP_8_7_0 二 、下载PEM包 pem包官方地址:PEM Pack - Crypto Wiki 三、调用Cry…

深度学习环境安装|PyCharm,Anaconda,PyTorch,CUDA,cuDNN等

本文参考了许多优秀博主的博客,大部分安装步骤可在其他博客中找到,鉴于我本人第一次安装后,时隔半年,我忘记了当时安装的许多细节和版本信息,所以再一次报错时,重装花费了大量时间。因此,我觉得…

单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真

单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真 下面介绍单个电源模块带电感,给多个负载用,但是用电电流不一致的直流压降仿真,以下图为例 具体操作步骤如下 同样的设置好VRAM

【Mybits-Plus】拦截器的学习和使用,以及如何实现数据权限

【Mybits-Plus】拦截器的学习和使用目录标题 常规处理数据权限的话Mybits需要对Mybits\Mybits-plus拦截器了解1.基础知识学习2.各种场景--实战案例 常规处理数据权限的话Mybits需要对Mybits\Mybits-plus拦截器了解 1.基础知识学习 (请自行学习如下内容,后续才能根…

C++中随机数的使用总结

随机数 rand() 随机数发生器 #include <stdio.h> #include <unistd.h> #include <iostream> #include <string>using namespace std;int main(int argc, char *argv[]) {cout << "this is main()" << endl;cout << rand…

2023-07-14 monetdb-嵌入mysql-sql层交互-设计-分析

摘要: SQL层的兼容工作,时间紧,任务重,协议多,命令多,功能多,牵扯到数据一致性又万分紧张,需要非常谨慎,当前列了一些下一步的工作的设计分析. 主要是涉及sql层接口的兼容, innodb与monetdb数据的一致性, 查询和写入两个不同侧面的处理. monetdb嵌入mysql分析: 导图版…

C语言中定义和声明的区别

声明(declaration)与定义(definition) 为了使不同的文件都可以访问同一个变量&#xff0c;C会区 分变量的声明和定义。 变量的定义会为这个变量分配存储空间&#xff0c;并且 可能 会为其指定一个初始化的值&#xff0c; 一个变量的定义有且 仅有一处。 定义实际上是一种特殊…

七种最新群智能优化算法(NOA、LSO、SWO、ZOA、EVO、KOA、GRO)求解23个基准测试函数(含参考文献及MATLAB代码)

一、七种算法简介 &#xff08;1&#xff09;星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟星雀的两种行为&#xff0c;即&#xff1a;在夏秋季节收集并储存食物&#xff0c;在春冬季节搜…

路径规划算法:基于浣熊优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于浣熊优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于浣熊优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法浣熊…

调频连续波(FMCW)波形设计、真实道路场景仿真及汽车自适应巡航控制信号处理(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 以下是关于调频连续波&#xff08;FMCW&#xff09;波形设计、真实道路场景仿真以及汽车自适应巡航控制信号处理的概述&#x…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境&#xff0c;需要在 WSL 里也装上 C、CMake 系列的插件&#xff0c;如下图的直接下载方式特别慢&#xff1a; 【解决方法】 先去网站下载插件&#xff1a;https://marketplace.visualstudio.com/&#xff0c;后缀名&#xff1a;…

【DFS】LeetCode 17. 电话号码的字母组合

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我bua&#xff01; 目录 题目:示例: 题解:代码实现: 题目: 示例: 题解: 这是一道全排列的问题,先来看看示例. 看第一个示例:输入"23",其对应的是"abc&qu…

【GIT】如何在GitHub上向一个开源项目贡献代码?

如何在GitHub上向一个开源项目贡献代码 参考链接&#xff1a;https://www.bilibili.com/video/BV1WC4y1a76G/?p1&t175 一、fork目标仓库的代码 必须先fork别人的代码到自己仓库之后才能修改代码&#xff0c;不能直接修改别人的代码。 这样就fork到自己的仓库了。 二、…

学习react,复制一个civitai-更新2

更新内容 耗时一个礼拜左右&#xff0c;增加了个新界面&#xff1a;模型图片详情界面。 看看效果图吧&#xff1a; 功能介绍 操作&#xff1a;在模型详情界面点击一个图片&#xff0c;就能到图片详情界面 1.点击哪个图片&#xff0c;就会展示哪个&#xff0c;同时还会更新图…