当前位置: 首页 > news >正文

Java学习Day19:基础篇9

final

权限修饰符

空着不写是default!

代码块

1.静态代码块

1.静态代码块优于空参构造方法

2.静态调用只被加载一次;

静态代码块在Java中是一个重要的特性,它主要用于类的初始化操作,并且随着类的加载而执行,且只执行一次。静态代码块的实践应用广泛,以下是几个主要的应用场景:

1. 初始化静态变量

静态代码块经常用于初始化静态变量,这些变量在类的所有实例之间共享。通过静态代码块,可以在类加载时设置这些变量的初始值确保在使用这些变量之前它们已经被正确初始化

2. 加载外部资源

在应用程序中,有时需要在类加载时加载外部资源,如配置文件、数据库驱动等。静态代码块提供了一个很好的时机来完成这些任务,因为它在类被JVM加载时执行,且只执行一次。

3. 初始化静态数据结构

对于需要在类级别上共享的数据结构(如集合、映射等),静态代码块可以用于在类加载时初始化这些数据结构。这有助于减少在对象创建时重复初始化相同数据结构的开销。

4. 执行一次性的任务

如果有一些任务只需要在类加载时执行一次,比如初始化日志系统、注册服务提供者等,那么静态代码块是一个理想的选择。这些任务通常与类的实例无关,但需要在类被使用时已经准备好。

5. 控制静态代码块的执行顺序

在存在继承关系的类中,静态代码块的执行顺序是按照父类到子类的顺序进行的。这一特性可以用于控制初始化操作的顺序,确保在子类使用父类资源之前,父类资源已经被正确初始化。

示例代码

public class StaticInitialization {
// 静态变量
private static String country;
// 静态代码块
static {
country = "中国";
System.out.println("静态代码块执行,初始化国家为:" + country);
// 可以在这里加载外部资源或执行其他初始化任务
}
public static void main(String[] args) {
// 静态代码块在类加载时自动执行,无需显式调用
System.out.println("主方法执行,国家为:" + country);
}
}

在上面的示例中,静态代码块在类StaticInitialization被加载时执行,并且只执行一次。它用于初始化静态变量country,并在控制台打印一条消息。然后,在main方法中,可以直接访问这个已经初始化的静态变量。

注意事项

  • 静态代码块只能访问类的静态成员变量和静态方法,不能访问类的实例成员变量和实例方法。
  • 静态代码块的执行顺序取决于它们在类中的定义顺序,与它们在代码中的位置无关。
  • 如果存在继承关系,父类的静态代码块会在子类的静态代码块之前执行。但是,需要注意的是,这并不会影响静态变量的访问顺序,因为静态变量是按照它们在类中的定义顺序进行初始化的。

2.构造代码块

实例化几次就调用几次

3.静态代码块、构造代码块、构造函数执行顺序

内部类

1.内部类的分类

 

1.成员内部类

public class text {public static void main(String[] args) {A.c c =new A().new c();c.setA(3);System.out.println(c.getA());}
}

2.局部内部类

3.匿名内部类

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数学基础 -- 隐函数解题思路之微分运算满足线性性
  • Linux初学基本命令
  • Java面试——Tomcat
  • 兴业严选|朝阳优质好房合集 低至6.3折起~
  • ubuntu cmake使用自己版本的qt
  • 如何使用git拉取gitee上面的项目/代码?(超简单)
  • linux常使用的命令
  • AI助力工艺|利用机器学习实现泡沫浮选工艺优化
  • 《C++基础入门与实战进阶》专栏介绍
  • react中如何定义Class类组件以及hook函数组件
  • Linux系统将Mint 便签源码打包成deb包并进行安装
  • HCL实验1:两台PC通过交换机ping通
  • 支持AI的好用的编辑器aieditor
  • 网络爬虫必备工具:代理IP科普指南
  • 科普文:深入理解ElasticSearch体系结构
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • .pyc 想到的一些问题
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android优雅地处理按钮重复点击
  • Angular数据绑定机制
  • mockjs让前端开发独立于后端
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Node + FFmpeg 实现Canvas动画导出视频
  • node 版本过低
  • Spring核心 Bean的高级装配
  • swift基础之_对象 实例方法 对象方法。
  • Vue官网教程学习过程中值得记录的一些事情
  • 爱情 北京女病人
  • 从PHP迁移至Golang - 基础篇
  • 分布式熔断降级平台aegis
  • 计算机常识 - 收藏集 - 掘金
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 微信小程序设置上一页数据
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 项目实战-Api的解决方案
  • Android开发者必备:推荐一款助力开发的开源APP
  • #Spring-boot高级
  • (55)MOS管专题--->(10)MOS管的封装
  • (70min)字节暑假实习二面(已挂)
  • (C语言)字符分类函数
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (二十三)Flask之高频面试点
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十八)Flink CEP 详解
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Thymeleaf用法——Thymeleaf简介
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET WPF 抖动动画
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态