这一节我们看一个比較特殊的概念,那就是静态代码块。

前面我们也提到过代码块,就是一段独立的代码空间。那么什么是静态代码块呢?说白了,就是用statickeyword修饰的代码块。

我们来看一个样例:

class StaticBlock
{
static
{
System.out.println("静态代码块被运行");
}
void myPrint()
{
System.out.println("myPrint方法运行");
}
} class StaticBlockTest
{
public static void main(String[] args)
{
new StaticBlock().myPrint();
}
}

我们来看一看运行结果:

从结果我们看到了我们调用的myPrint函数被调用运行了。而且在此函数被调用之前。静态代码块就已经被运行。

这就是我们要说的特别之处,静态代码块是特殊的代码块。它被statickeyword修饰,而且拥有静态的全部特征,最基本的是它有一个比較自然独特的特点:我们之前说。静态随着类的载入而载入,而静态代码块随着着类的载入而运行,仅仅要类被载入,那么该静态代码块就会被运行。而且仅仅运行一次。

我们看以下的測试:

class StaticBlockTest
{
public static void main(String[] args)
{
new StaticBlock().myPrint();
new StaticBlock().myPrint();
}
}

结果:

我们看到,静态代码块仅仅运行了一次,而我们的myPrint方法被调用了两次运行了两次。所以当类载入时,静态方法就已经载入而且运行一次。

通过上面的样例让我们明白了静态代码块的实际作用:用于给类进行初始化。

这就相当于我们之前学习的构造函数,构造函数是用于给对象进行初始化,而静态代码块是用来给类进行初始化。

这里我们或许会有疑问,既然构造函数能够进行初始化,那么我们为什么还要用静态代码块来初始化呢。事实上不是全部的类都能创建对象。由于有些类有可能不须要被创建对象的。比方我们在一个类中定义的全部是静态成员,那么创建对象就没有意义。

我们再看一个静态代码块的使用方法。我们看以下的代码:

class StaticBlock
{
static int num;
static
{
num = 10;
num = num * 3;
}
void myPrint()
{
System.out.println("num = "+num);
}
} class StaticBlockTest
{
public static void main(String[] args)
{
new StaticBlock().myPrint();
}
}

我们来看运行结果:

从结果我们直接能够看到,我们在静态代码块中对静态变量进行了多次运算和赋值,所以当我们须要对静态变量进行多次运算时我们能够运用静态代码块。

只是这个在开发中用的并不多。在一些底层的框架开发中会专门用到。

这一节我们就简单的学到这里。

[javase学习笔记]-8.7 静态代码块的更多相关文章

  1. [javase学习笔记]-8.8 构造代码块

    这一节我们再看一个特殊的代码块.那就是构造代码块. 这里我们简单的通过样例来说明一下: class Person { private String name; { System.out.println ...

  2. Android(java)学习笔记68:同步代码块 和 同步方法 的应用

    1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...

  3. Android(java)学习笔记8:同步代码块 和 同步方法 的应用

    1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...

  4. [javase学习笔记]-8.6 静态的内存载入

    之前几节我们一直在说statickeyword所修饰的静态,那么在程序执行时,内存中static是怎样体现的呢?这一节我们就来看一看. 我们还是先看一个样例.希望我们通过对这个样例的分析让我们刚開始学 ...

  5. 【学习笔记】python的代码块(吐槽)

    曾经我以为python是像pascal那样begin开始end结束, 直到今天…… 我才知道python是用缩进作为代码段标识的…… >>> def test(n): ... if ...

  6. Java学习笔记11---静态成员变量、静态代码块、成员变量及构造方法的初始化或调用顺序

    当创建一个对象时,各种成员变量及构造方法的初始化或调用顺序是怎样的呢? (1).如果类尚未加载,则先初始化静态成员变量和静态代码块,再初始化成员变量,最后调用相应的构造方法: (2).如果类已经加载过 ...

  7. 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析

    //执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 //普通代码块:在 ...

  8. 【JAVA】笔记(3)---封装;如何选择声明静态变量还是实例变量;如何选择声明静态方法还是实例方法;静态代码块与实例代码块的执行顺序与用途;

    封装: 1.目的:保证对象中的实例变量无法随意修改/访问,只能通过我们自己设定的入口,出口(set / get)来间接操作:屏蔽类中复杂的结构,使我们程序员在主方法中关联对象写代码时,思路/代码格式更 ...

  9. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...

随机推荐

  1. IE7中a标签包含img,点击img,链接失效的bug

    在做列表时,我们经常会这样写: <ul class="works-list"> <li> <a href=""> <d ...

  2. NOJ——1669xor的难题(详细的树状数组扩展—异或求和)

    [1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...

  3. 配置 MySQL 服务器容器

    本文介绍在单一宿主机上如何配置自动备份.建议使用两个容器,其中一个容器作为 MySQL 的服务器,用来处理数据:另一个容器用于自动备份.这样保证隔离,避免备份的容器影响到 MySQL Server 的 ...

  4. 北京集训TEST12——PA( Mortal Kombat)

    题目: Description 有一天,有N个外星人企图入侵地球.地球派出全球战斗力最强的M个人代表人类对抗外星人.根据外星的战斗规则,每个外星人应该分别与一名地球人对战(不同的外星人要与不同的地球人 ...

  5. 利用node搭建本地服务器调试代码

    在命令符中输入 npm install -g live-server安装live-server 安装完成后在项目文件夹下打开cmd,输入live-server启动

  6. PL/SQL Developer工具包和InstantClient连接Oracle 11g数据库

    一.前言 PLSQL Developer是Oracle数据库开发工具,很牛也很好用,PLSQL Developer功能很强大,可以做为集成调试器,有SQL窗口,命令窗口,对象浏览器和性能优化等功能. ...

  7. Win10下安装Docker及tensorflow(cpu版)

    1.准备工作: 1)64为操作系统,win7或者更高 2)支持“ Hardware Virtualization Technology”,并且,“virtualization ”可用(可进入任务管理器 ...

  8. (2)Unity3d菜单

    1.文件菜单 2.编辑菜单 Frame Selected 焦点选择和双击Hierarchy中的元素一样的功能 Lock View to Selected  选中对象再点击此按钮,在场景视图中移动此对象 ...

  9. Java多线程中Lock的使用

    Jdk1.5以后,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,可能大家都会想到synchronized关键字, 这是java内置的关键字, ...

  10. DNA的分子结构

    DNA是由两条链组成的, 这两条链按反相平行的方式盘旋成双螺旋结构 DNA分子中的脱氧核糖和磷酸交替连接, 排列在外侧, 构成基本骨架; 碱基排列在内侧. 两条链上的碱基通过氢键连接成碱基对, 并且其 ...