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

前面我们也提到过代码块,就是一段独立的代码空间。那么什么是静态代码块呢?说白了,就是用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. Bootstrap-table custome-ajax用法

    <div id="toolbar"> <div class="form-inline" role="form"> & ...

  2. 内存分配(new/delete,malloc/free,allocator,内存池)

    以下来源http://www.cnblogs.com/JCSU/articles/1051826.html 程序员们经常编写内存管理程序,往往提心吊胆.如果不想触雷,唯一的解决办法就是发现所有潜伏的地 ...

  3. java捕获不到存储过程里面手抛的错误

    采用spring的JDBCTemplate来操作增删查改,Basedao执行存储过程的方法如下: 此方法要么返回一个true,要么抛出异常: 现象: 当项目发布于tomcat中时,同样的代码,同样的过 ...

  4. 如何从sql server导出到csv文件

    如何从sql server导出到csv文件,具体代码如下: private static void WriteHeader(SqlDataReader reader, TextWriter outpu ...

  5. 古代猪文 BZOJ 1951

    古代猪文 [问题描述] “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  6. 转 Python爬虫入门七之正则表达式

    静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...

  7. ExcelHelper类

    /// <summary> /// ExcelHelper类 /// </summary> using System; using System.IO; using Syste ...

  8. Requery,Refresh,Adoquery.Close,Open 区别

    经过测试发现: Requery 相当于 Adq.Close,Open:并且比Close,Open方法有个优点就是不丢失排序,Sort Adq.Close,Open 后,原来的 Adq.Sort 会丢失 ...

  9. 微信小程序之视图容器(swiper)组件创建轮播图

    一.视图容器(Swiper) 1.swiper:滑块视图容器 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swi ...

  10. BZOJ2243 [SDOI2011]染色(树链剖分+线段树合并)

    题目链接 BZOJ2243 树链剖分 $+$ 线段树 线段树每个节点维护$lc$, $rc$, $s$ $lc$代表该区间的最左端的颜色,$rc$代表该区间的最右端的颜色 $s$代表该区间的所有连续颜 ...