内部类和类的初始化实例化过程

一、内部类

1. 什么是内部类

在类的内部定义一个类,专门服务于外部类,便于访问外部类的属性和方法。

2. 内部类的分类

  • 成员内部类:定义在类的成员变量的位置
    • 静态内部类:使用起来跟普通的外部类基本一致;
    • 非静态内部类:JDK17开始可以声明静态成员了;
  • 局部内部类:定义在类的方法中
    • 普通局部内部类:局部内部类访问方法中的局部变量时,该局部变量必须是final的。(注)
    • 匿名内部类:没有名字。当一个类只使用一次,下次不需要使用名字调用。

:为何必须是final,是由于局部变量是放在栈中,方法结束时立刻回收。而内部类是由垃圾回收机制回收的,不会立刻销毁。故局部变量必须加final修饰,将变量放到方法区中。

内部类的class文件:文件名 = 外部类名$内部类名.class

3. 语法格式

匿名内部类:

new 类名(){public void dance(){System.out.println("跳舞");}
}

二、代码块

1. 什么是代码块

程序中使用{}包围的代码

2. 代码块的分类

静态代码块

格式:static{}包围的代码块
静态代码块随着类的加载而加载,只会执行一次。通常执行一些类加载时要完成的工作。先于非静态代码块和构造器执行。

非静态代码块

格式:{}包围的代码块
也称为实例代码块,构造代码块,先于构造器执行。通常把所有构造器都会执行的共同代码写在实例代码块中。每次创建对象时都会执行该段代码。

三、类的初始化和实例化

1. 初始化

静态变量的赋值过程

类初始化时,底层会执行一个初始化方法clinit方法。类的初始化在类加载过程中只执行一次,一个类初始化前必须先初始化其父类。

  • ①默认值
  • ②直接赋值:这两种赋值方式的先后跟位置有关
    • 直接显式赋值
    • 静态代码块赋值

2. 实例化

实例变量的赋值过程

构造器创建对象时,底层会执行init方法。其中会执行下面这几个赋值步骤。

  • ①默认值
  • ②this() 或super()
  • ③直接赋值:这两种赋值方式的先后跟位置有关
    • 直接显式赋值
    • 实例代码块赋值
  • ④构造器赋值

四、Junit单元测试框架

用来单元测试的框架,使用前需要先导入jar包。主要功能是单元模块测试和Before和After功能。

1. 使用方法

  • 导入jar包,add as library
  • 在模块管理界面加入该jar包,改为compile模式
  • 编写测试方法,在测试方法上面那行添加@Test

2. 注意事项

  • 测试方法不要命名为Test,会和@Test名字冲突
  • 测试方法不能带参数
  • 测试方法不能测试Scanner和多线程

五、单例设计模式

设计模式是程序员长期工作过程中总结出来的经验套路。下面就是单例设计模式的代码, 这个是饿汉式的实现。饿汉式的含义是指先创建一个类的对象实例,不管是否有调用getInstance方法。

public class Student{//饿汉式//静态常量:在类加载过程中值进行初始化,只有一份private static final Student instance = new Student();//构造器私有化,无法通过构造器创建多个对象private Student(){System.out.println("空参构造器");}public static Student getInstance(){return instance;}
}

还有一种实现方法,懒汉式,当外部代码调用getInstance方法时才会创建对象实例。并且该方法有线程安全问题。

public class Singleton{//静态变量private static Singleton instance = null;//构造器私有化private Singleton(){}//公共的静态方法,返回一个当前类的实例public static Singleton getInstance(){//延时加载if(instance == null){instance = new Singleton();//临时创建会花费时间}return instance;}
}

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

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

相关文章

一年级数学 数一数(一到十)

今天我们来学习数一数 有一些老人 眼睛可能花了 需要我们在动物园数清楚是多少个动物 然后告诉他们 可能有的小朋友 不知道某些数字怎么读 您可以打开地址 https://fanyi.baidu.com/?aldtype16047#zh/en/ 将数字 输入到 输入框内 然后点击 下面的小话筒 系统就会读出来了 小…

音视频知识:MPEG-4、H264、MP4、AAC之间的关系

MPEG-4 一种编码标准。是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义的标准。MPEG(Moving Picture Experts Group)标准包括 MPEG1、MPEG2与 MPEG4。 MPEG-4标准目前分为27个部分,统称为ISO/IEC14496国际标…

高忆管理:多重利好共振 外资加码布局A股

资本商场活泼信号正在继续开释,内外资决心取得有力提振。以北向资金为代表的外资近来表现活泼,近六个买卖日已连续净买入超500亿元。多家外资组织近期表态称,伴跟着方针力度加强,我国经济有望继续复苏,活泼看好我国权益…

2023年8月美团外卖3-18元红包优惠券天天领取活动日历及美团外卖红包领取使用

2023年8月美团外卖3-18元红包天天领取活动日历 根据上图美团外卖红包领取活动时间表以下时间可以天天领取3-18元美团外卖红包优惠券: 1、2023年8月18日 可领取美团外卖18元神券节红包; 2、2023年8月每周六、周日每天可领取12元美团外卖节红包&#xff…

【C++】类和对象-继承

0.前言 1.基本语法 继承的用处就是极大的减少代码的重复性&#xff0c;如果没有用继承&#xff0c;看看以下代码&#xff0c;你知道了。。。。 基本实现代码&#xff1a; #include <iostream> using namespace std; /******************************************/void …

万界星空/推出生产制造执行MES系统/开源MES/免费下载

免费MES系统介绍 什么是MES系统呢&#xff1f;MES系统主要功能就是解决“如何生产”的问题。通过实施MES系统&#xff0c;一站式解决您所困扰的所有生产制作流程问题。 普通的免费MES系统只提供简单的基本功能让客户体验&#xff0c;而万界星空MES系统运用低代码的形式开发&a…

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-初始化列表之后执行

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-初始化列表之后执行 二开位置 OnlineAutoList.js.initAutoList 定义方法 /*** 初始化列表之后执行* js增强* param tableColumns* returns {Promise<void>|*}*/onlineTableContext["afterInitAutoList…

Codeforces Round 855 (Div. 3) E题题解

文章目录 [ Unforgivable Curse (hard version)](https://codeforces.com/contest/1800/problem/E2)问题建模问题分析方法1分析性质1.分析操作对元素位置的影响2.分析可以使用操作的元素可以与相邻元素交换位置的作用代码 方法2通过DFS得到相互可以交换位置的字符集合代码 方法…

Spring Boot的自动配置原理

一.原理解释 Spring Boot的自动配置是Spring框架的一个重要特性&#xff0c;它旨在简化应用程序的开发和部署过程。自动配置通过基于类路径中的依赖关系和配置文件内容来预先配置Spring应用程序的各种组件和功能。这样&#xff0c;我们可以在无需显式配置大量参数的情况下&…

干翻Dubbo系列第六篇:SpringBoot与Dubbo整合

文章说明 本文内容整理自《孙哥说Dubbo系列视频课程》&#xff0c;孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频&#xff0c;或者直接添加老师微信号suns45与他直接联系 一&#xff1a;SpringBoot应用Dubbo开发应用的核心思路分析 深度封…

消息中间件应用场景介绍

提高系统性能首先考虑的是数据库的优化&#xff0c;但是数据库因为历史原因&#xff0c;横向扩展是一件非常复杂的工程&#xff0c;所有我们一般会尽量把流量都挡在数据库之前。 不管是无限的横向扩展服务器&#xff0c;还是纵向阻隔到达数据库的流量&#xff0c;都是这个思路。…

更安全,更省心丨DolphinDB 数据库权限管理系统使用指南

在数据库产品使用过程中&#xff0c;为保证数据不被窃取、不遭破坏&#xff0c;我们需要通过用户权限来限制用户对数据库、数据表、视图等功能的操作范围&#xff0c;以保证数据库安全性。为此&#xff0c;DolphinDB 提供了具备以下主要功能的权限管理系统&#xff1a; 提供用户…

anndata k折交叉

如何将anndata拆分为k份 import scanpy as sc import anndata as adclass KSplitAnndata:staticmethoddef _base_split(data: object, k: int) -> list:adata data.copy()num adata.n_obs // kadata_list []for i in range(k):if num < adata.n_obs:adata_list.appen…

STM32 DMA学习

DMA简称 DMA&#xff0c;Direct Memory Access&#xff0c;即直接存储器访问。DMA传输方式无需CPU直接控制传输&#xff0c;也没有中断处理方式那样保留现场和恢复现场的过程&#xff0c;通过硬件为RAM与I/O设备开辟一条直接传送数据的通路&#xff0c;能使CPU的效率大为提高。…

LabVIEW开发航天器动力学与控制仿真系统

LabVIEW开发航天器动力学与控制仿真系统 计算机仿真是工程设计和验证的非常有用的工具。它节省了大量的时间、金钱和精力。航天器动力学与控制仿真系统由LabVIEW程序开发&#xff0c;它是模拟航天器等动态系统的有用工具。还可轻松与硬件连接并输出真实信号。 项目采用系统工…

偷懒神器-->花样的代码生成工具

1、CRUD代码生成&#xff1a; 根据MyBatisPlus逆向工程改造而来&#xff0c;添加了showDoc文档生成&#xff0c;数据库脚本生成&#xff0c;增删改查文件生成&#xff0c;Po、Vo、Request对象生成等。普通的增删改查一般搞定。并预调了部份判断逻辑。 效果示例&#xff1a; p…

“用户登录”测试用例总结

前言&#xff1a;作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。鉴于面试中经常会问“”如何测试用户登录“”&#xff0c;我们利用等价类划分、边界值分析等设计一些测试用…

git的clone,上传,mirror与upstream同步

文章目录 clone日志信息的同步子树合并同步 clone clone他人项目&#xff0c;git到自己的项目 rm -rf .git .git存放原始项目的日志信息&#xff0c;这里需要添加自己的日志信息&#xff0c;需要删除重写。也可手动删除 git init 初始化文件&#xff0c;依据本地日志信息生产.…

Gradle和Maven的区别

Gradle和Maven 当涉及到构建和管理项目时&#xff0c;Gradle和Maven是两个非常流行的选项。本文将讨论Gradle和Maven之间的区别以及它们的配置信息差异。 1. Gradle和Maven的区别 1.1 构建脚本语言 Maven使用XML作为构建脚本语言&#xff0c;而Gradle使用基于Groovy的DSL&…

c 语言解析 时间字符串

#include <iostream> #include <ctime>int main(int argc, char *argv[]) {struct tm timeinfo;char cur_time[] "current time: 2021-09-06 23:50:13";// 解析时间到timeinfo中strptime(cur_time, "current time: %Y-%m-%d %H:%M:%S", &…