JavaSE 内部类

目录

  • 1 实例内部类
  • 2 静态内部类
  • 3 匿名内部类
  • 4 本地内部类

1 实例内部类

内部类: 外部类有一个…或外部类是由什么什么组成的。
实例内部类: 定义在类的内部的一个类。

  1. 如何实例化内部类对象?

OuterClass.InnerClass innerClass2 = out.new InnerClass();
外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();

  1. 只要是内部类,那么生成的字节码文件格式:外部类$内部类.class
  2. 在实例内部类当中,不能定义静态的成员变量!!!
    如果非要定义,那么一定是要在编译时期确定的值 ,例:public static final int data4 = 4;
  3. this实际上是一个静态的成员,例:System.out.println(OuterClass.this.data1);
  4. 实例内部类实际上拥有2个this。 一个是实例内部类自己的,一个是外部类的。
    所以这里有个面试题:实例内部类,是否有额外的内存开销?
    答:有,因为它有外部类额外的这个this。

具体代码示例如下所示:

package inner;/*
* 内部类: 外部类有一个......  外部类是由什么什么组成的
*
*    实例内部类: 定义在类的内部的一个类。
*       1.如何实例化内部类对象?
*         OuterClass.InnerClass innerClass2 = out.new InnerClass();
*         外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
*       2.只要是内部类,那么生成的字节码文件格式:外部类$内部类.class
*       3.在实例内部类当中,不能定义静态的成员变量!!!
*         如果非要定义,那么一定是要在编译时期确定的值 public static final int data4 = 4;
*       4.this实际上是一个静态的成员
*         System.out.println(OuterClass.this.data1);
*       5.实例内部类实际上拥有2个this。 一个是实例内部类自己的,一个是外部类的。
*         所以这里有个面试题:实例内部类,是否有额外的内存开销? 有,因为它有外部类额外的这个this。
* */class OuterClass{public int data1 = 1;public static int data2 = 2;//实例内部类class InnerClass{public int data3 = 3;public int data1 = 11;//public static int data4 = 4;public static final int data4 = 4;public InnerClass(){}public void test(){System.out.println("InnerClass::test()");System.out.println(data3);System.out.println(data4);System.out.println(data1);System.out.println(this.data1);System.out.println(OuterClass.this.data1);}}
}public class TestDemo {public static void main(String[] args) {//InnerClass innerClass = new InnerClass();OuterClass out = new OuterClass();OuterClass.InnerClass innerClass2 = out.new InnerClass();innerClass2.test();}
}

2 静态内部类

静态内部类: 定义在类的内部的一个类,但是由static来修饰的。

  1. 静态内部类对象如何拿到?

OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
外部类名.内部类名 变量 = new 外部类.静态内部类();

  1. 字节码文件格式和上面是一样的:外部类$内部类.class
  2. 在静态内部类当中,是不可以访问外部类的非静态数据成员的!!!
    因为,外部类的非静态数据成员 是依赖于外部类对象的。
    但是,如果面试官非让你访问呢?
    思路:能不能给个外部类对象的引用?

具体代码示例如下所示:

package inner;/*
* 内部类: 外部类有一个......  外部类是由什么什么组成的
*    静态内部类: 定义在类的内部的一个类。 但是由static来修饰的。
*       1.静态内部类对象如何拿到?
*         OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
*         外部类名.内部类名 变量 = new 外部类.静态内部类();
*       2.字节码文件格式和上面是一样的:外部类$内部类.class
*       3.在静态内部类当中,是不可以访问外部类的非静态数据成员的!!!
*         因为,外部类的非静态数据成员 是依赖于外部类对象的
*         但是,如果面试官非让你访问呢?
*            思路:能不能给个外部类对象的引用?
* */class OuterClass{public int data1 = 1;public static int data2 = 2;//静态内部类static class InnerClass{public int data3 = 3;public static int data4 = 4;public OuterClass out;public InnerClass(OuterClass out){this.out = out;}public void test(){System.out.println("InnerClass::test()");System.out.println(data3);System.out.println(data4);System.out.println(data2);//System.out.println(data1);//System.out.println(OuterClass.this.data1);不对的System.out.println(out.data1);}}
}
class MyList{*//*class Node{}*//*static class Node{}
}public class TestDemo {/*静态内部类*/public static void main(String[] args) {//InnerClass innerClass = new InnerClass();OuterClass out = new OuterClass();OuterClass.InnerClass innerClass = new OuterClass.InnerClass(out);innerClass.test();}
}

3 匿名内部类

匿名内部类: 在匿名内部类当中,使用的变量,或者是常量 或者是在整个过程当中没有发生改变的量。
具体代码示例如下所示:

package inner;/*
* 内部类: 外部类有一个......  外部类是由什么什么组成的
*    匿名内部类:
*       在匿名内部类当中,使用的变量,或者是常量 或者是在整个过程当中没有发生改变的量
* *///匿名内部类
class OuterClass{public void sayHello(){System.out.println("hello");}
}
public class TestDemo {//匿名内部类public static void main(String[] args) {int data1 = 10;new OuterClass(){@Overridepublic void sayHello() {//data1 = 99;//super.sayHello();System.out.println("hhhhh,匿名内部类终于学完了!");System.out.println(data1);}}.sayHello();}
}

4 本地内部类

本地内部类: 方法里面定义的类,没有意义。
具体代码示例如下所示:

package inner;/*
* 内部类: 外部类有一个......  外部类是由什么什么组成的
*    本地内部类:方法里面定义的类 没有意义。
* */
public class TestDemo {//本地内部类public void func() {class A {}}
}

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

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

相关文章

(四)pytorch图像识别实战之用resnet18实现花朵分类(代码+详细注解)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、关于这个实战的一些知识点Q1:图像识别实战常用模块解读Q2:数据增强Q3:迁移学习Q4:平均全局池化Q5:设置哪些层需要训练时…

大一C语言查缺补漏1 12.2

学习方向非C语言方向,但是专业是。。 仅供参考,,祝大家期末考试顺利。 对于二维数组定义,要给出明确的定义 eg:double a [21][4] int a [ ][3] {1,2,3,4,5,6} 不可以是:int a [ ][3]; 在c…

Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

前言 在开发UI滚动列表的时候,经常会有每项的背景图不统一的情况,会间隔重复的情况居多。这种情况下,手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下,笔者尝试写个小工具,在搭建UI时配置一下循环背景的…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode):一名选手只要输掉一场球,就被淘汰。一对一对…

fill-in-the-middle(FIM) 实现与简单应用

1 背景 传统训练的 GPT 模型只能根据前文内容预测后文内容,但有些应用比如代码生成器,需要我们给出上文和下文,使模型可以预测中间的内容,传统训练的 GPT 就不能完成这类任务。 传统训练的 GPT 只能根据上文预测下文 使用 FIM…

vue-element安装富文本编辑器vue-quill-editor教程

在vue ui面板中安装vue-quill-editor依赖 命令安装 npm install vue-quill-editor --save # or yarn add vue-quill-editor 使用方法 在main.js导入富文本编辑器 import VueQuillEditor from vue-quill-editor import quill/dist/quill.core.css // import styles import…

技术博客:市面上加密混淆软件的比较和推荐

技术博客:市面上加密混淆软件的比较和推荐 引言 市面上有许多加密混淆软件可供开发者使用,但哪些软件是最好用的?哪些软件受到开发者的喜爱?本文将根据一次在CSDN上的投票结果,为大家介绍几款在程序员中普及度较高的…

CEC2013(python):五种算法(ABC、PSO、CSO、OOA、DBO)求解CEC2013(python代码)

一、五种算法简介 1、人工蜂群算法 (Artificial Bee Colony Algorithm, ABC) 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鱼鹰优化算法OOA 5、蜣螂优化算法DBO 二、5种算法求解CEC2013 (1)CEC2013简介 参考文献&#xff…

机器学习 项目结构 数据预测 实验报告

需求: 我经过处理得到了测试值,然后进一步得到预测和真实值的比较,然后再把之前的所有相关的参数、评估指标、预测值、比较结果都存入excel,另外我还打算做测试报告模板,包括敏感性分析等。您建议我这些功能如何封装这些功能&…

源码部署MySQL

MySQL 1.准备环境 关闭防火墙 [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#systemctl disable firewalld 关闭selinux [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#sed -i %s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config 验证是否通网 …

WINDOWS(WIN11)通过IP添加网络打印机

点击添加设备 点击手动添加 使用IP地址或主机名添加打印机 选择TCP/IP设备,输入打印机地址 如果有正确驱动就安装,没有就取消。 通过手动设置添加本地打印机或网络打印机 使用现有的端口 根据打印机IP,选择标准端口。 成功! 到…

警惕Kann勒索病毒的最新变种.kann,您需要知道的预防和恢复方法。

导言: 勒索病毒已经成为网络安全的一大威胁,其中之一就是.kann勒索病毒。本文将深入介绍.kann勒索病毒,包括其攻击方式、数据加密机制,以及如何有效恢复被加密的数据文件,并提供一系列预防措施以保护系统免受.kann勒索…

element ui el-avatar 源码解析零基础逐行解析

avatar功能介绍 快捷配置头像的样式 avatar 的参数配置 属性说明参数size尺寸type string 类型 (‘large’,‘medium’,‘small’)number类型 validator 校验shape形状circle (原型) square(方形)icon传入的iconsrc传入的图片st…

阿里lindorm与MyBatis Plus集成

lindorm与MyBatis Plus集成 1 添加依赖&#xff1a; 在项目的pom.xml文件中添加lindorm和MyBatis Plus的依赖。 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>lindorm-jdbc</artifactId><version>1.1.1…

机器学习笔记:支持向量机回归SVR

1 主要思想 主要思路类似于机器学习笔记&#xff1a;支持向量机SVM_支撑向量学习-CSDN博客 和SVM的区别主要有 解法和SVM区别不大&#xff0c;也是KKT 2 和线性回归的区别 对SVR&#xff0c;如果f(x)和y之间的差距小于阈值ε【也即落在两条间隔带之间】&#xff0c;则不计算…

SQL面试题挑战03:奖金瓜分问题(拼多多)

目录 问题&#xff1a;SQL解答&#xff1a; 问题&#xff1a; 在活动大促中&#xff0c;有玩游戏瓜分奖金环节。现有奖金池为10000元&#xff0c;代表奖金池中的初始额度。用户的分数信息如下&#xff1a; user_id score 100 60 101 45 102 40 103 3…

模拟组建网络的过程

DNS是域名系统&#xff0c;作用是将域名解析成ip地址 要求 1.使用172.16.0.0网段组建网络 2.使用3台pc&#xff0c;可以配置DHCP服务自动分配ip 3.添加两个网站服务器 第一台是www.taobao.com 第二台www.jd.com 他们可以通过DNS服务器为客户解析域名 172开头的是B类ip地…

标准库中的string类(上)——“C++”

各位CSDN的uu们好呀&#xff0c;好久没有更新小雅兰的C专栏的知识啦&#xff0c;接下来一段时间&#xff0c;小雅兰就又会开始更新C这方面的知识点啦&#xff0c;以及期末复习的一些知识点&#xff0c;下面&#xff0c;让我们进入西嘎嘎string的世界吧&#xff01;&#xff01;…

【论文简述】High-frequency Stereo Matching Network(CVPR 2023)

一、论文简述 1. 第一作者&#xff1a;Haoliang Zhao 2. 发表年份&#xff1a;2023 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;立体匹配、MVS、深度学习、高频信息、LSTM 5. 探索动机&#xff1a;(1)当涉及到估计的视差图的更精细的特征时&#xff0c;大多数当前…

Java反序列化工具ysoserial使用

ysoserial是一款用于生成 利用不安全的Java对象反序列化 的有效负载的概念验证工具。 项目地址 https://github.com/frohoff/ysoserial主要有两种使用方式&#xff0c;一种是运行ysoserial.jar 中的主类函数&#xff0c;另一种是运行ysoserial中的exploit 类&#xff0c;二者…