静态块(static{})

(1) static关键字还有一个比较关键的作用,用来形成静态代码块(static{} 即static块 )以优化程序性能。

(2) static块可以置于类中的任何地方,类中可以有多个static块。

(3) 在类初次被加载的时候执行且仅会被执行一次(这是优化性能的原因!!!),会按照static块的顺序来执行每个static块,一般用来初始化静态变量和调用静态方法。

下面通过两段代码,说明 static{} 为什么能优化程序性能。

实例

/**
* 每次调用isBornBoomer的时候
* 都会生成startDate和birthDate两个对象,造成了空间浪费
*/
class Person{
private Date birthDate; public Person(Date birthDate) {
this.birthDate = birthDate;
} boolean isBornBoomer() {
Date startDate = Date.valueOf("1997");
Date endDate = Date.valueOf("2019");
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}
/**
* 这里使用了static块
* 只需要进行一次的初始化操作
* 节省内存空间,优化性能
*/
class Person{
private Date birthDate;
private static Date startDate,endDate; static{
startDate = Date.valueOf("1997");
endDate = Date.valueOf("2019");
} public Person(Date birthDate) {
this.birthDate = birthDate;
} boolean isBornBoomer() {
return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
}
}

注意:强调一下static块是会按照顺序执行,与main入口函数无关。

参考

[1] https://blog.csdn.net/qq_41647999/article/details/87966487

Java中的静态块(static{})的更多相关文章

  1. 在JAVA中利用public static final的组合方式对常量进行标识

    在JAVA中利用public static final的组合方式对常量进行标识(固定格式). 对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效. 常量(这 ...

  2. java中final和static

    final的意思是最终的,最后的额,不可变的,在java中也具有相似的含义. final修饰基础数据表示把该数据修饰成常量,意味着不可修改,不可变. final修饰对象的引用的时候,表示该引用不可变, ...

  3. C++和Java中的静态Static用法

    C++和Java中都有的一个静态关键字Static,可以放在类中的变量或者函数之前,就成了静态变量或者静态函数. 静态变量又分为静态全局变量和静态局部变量,可参见网上大神总结的C++全局变量,局部变量 ...

  4. [转]Java中fina以及static的意义

    一.final        根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效 ...

  5. java中final与static的使用场景

    final Java关键词final有“无法改变”的含义,主要用于修饰非抽象类.方法或者变量.使用时注意: final类不能被继承,没有子类,final类中的方法默认是final的. final方法不 ...

  6. Java中this、static关键字的内存图解

    Java中的关键字有很多,abstract  default  goto*  null  switch  boolean  do  if  package  nchronzed  break  dou ...

  7. 135、Java中的静态块,构造方法和构造块

    01.代码如下: package TIANPAN; class Book { static String msg; // static属性,暂不封装 public Book() { // 构造方法 S ...

  8. 深入分析Java中的关键字static

    在平时开发当中,我们经常会遇见static关键字.这篇文章就把java中static关键字的使用方法的原理进行一个深入的分析.先给出这篇文章的大致脉络: 首先,描述了static关键字去修饰java类 ...

  9. Java中final与 static final 修饰的常量的区别

    喵喵开车,新手上路,多多关照.有任何错误请在评论区指出. ...........................................我是万恶的分界线( • ̀ω•́ )✧......... ...

  10. Java中final和static关键字总结

    1.final: final关键字可用于类.方法.变量前. final修饰的类不可被继承,例如java.lang.Math就是一个 final类,不可被继承. final修饰变量,在显示初始化后不可改 ...

随机推荐

  1. 【Python】批量提取Fibersim xml文件中的节点网格数据

    程序功能: 输入需求: fibersim导出的ply 的xml文件,可以很多个也没问题.但名字要有规律,不然没法循环读写.比如我自己用的就是x1.xml.x2.xml.Y1.xml......的文件名 ...

  2. BUGKU_PWN_OVERFLOW2_WP

    WP_OVERFLOW2 拿到程序,首先放到我们的kali里面看看是多少位的程序,然后在看看有没有什么安全属性 64位程序,并且开启了RELRO,NX 也就是说,这道题我们需要使用ROP绕过 使用id ...

  3. PX4 仿真环境开发整理

    博客地址:https://www.cnblogs.com/zylyehuo/ (一)PX4 仿真开发 搭建仿真环境 概念介绍及环境建议 MAVROS安装(适用于ROS1.ROS2) Ubuntu安装Q ...

  4. ISO9126

    ISO9126 软件质量模型是评价软件质量的国际标准,由6个特性和27个子特性组成.     中文名 软件质量模型 外文名 ISO9126 属    于 软件产品评价-质量特性 层    次 质量特性 ...

  5. Linux中查看进程状态信息

    一.常用命令总结  ps -l   列出与本次登录有关的进程信息:    ps -aux   查询内存中进程信息:    ps -aux | grep ***   查询***进程的详细信息:    t ...

  6. BUUCTF---Morse

    1.题目 -..../.----/-..../-..../-..../...--/--.../....-/-..../-..../--.../-.../...--/.----/--.../...--/ ...

  7. StringBuilder的介绍、构造方法及成员方法

    1.StringBuilder的介绍 1.StringBuilder是字符串缓冲区,可以认为是一种容器,能装任何类型的数据,但被装入的数据都会变为字符串 如图 无论是什么类型的数据,被装入字符串缓冲区 ...

  8. while循环、dowhile循环、三种循环的区别

    1.while循环 案例:使用while循环,打印出水仙花数 while执行流程: 1.先执行初始化语句 2.执行判断条件 结果为true,则执行第3步 结果为false,循环结束 3.执行循环体语句 ...

  9. AI可解释性 I | 对抗样本(Adversarial Sample)论文导读(持续更新)

    AI可解释性 I | 对抗样本(Adversarial Sample)论文导读(持续更新) 导言 本文作为AI可解释性系列的第一部分,旨在以汉语整理并阅读对抗攻击(Adversarial Attack ...

  10. 【SpringMVC】映射请求参数 & 请求头

    映射请求参数 & 请求参数 请求处理方法签名 Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应人参中. Spring MVC 对控制器处理方法签名的限制 ...