`
liuwei1981
  • 浏览: 770584 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:160864
社区版块
存档分类
最新评论

70.static自由块

 
阅读更多

接下来讲讲static自由块。

 

前面提到了自由块(游离块),那么作为Java源代码特殊的组成部分,是可以用static来修饰的。修饰后的结果我们来分析下。

 

自由块可以看成是一种特殊的方法,这个方法没有方法名、没有输入参数、没有返回值,不能进行方法调用。从这个角度来看,在自由块前面也可以加上static关键字来修饰。这样,这个自由块就成了静态自由块。静态自由块通常用于初始化静态变量。

public class Count {
 private int serialNumber;

 public static int counter;

 static {
  System.out.println("static自由块被执行");
  counter = 1;
 }

 public static int getTotalCount() {
  return counter;
 }

 public Count() {
  counter++;
  serialNumber = counter;
 }

 public static void main(String[] args) {
  System.out.println("main() invoked");
  System.out.println("counter = " + Count.counter);
 }
}


在这个类中,定义了一个静态的int类型变量counter,然后在static自由块中初始化这个变量。编译并运行这个程序,可以得到如下的输出:
static自由块被执行
main() invoked
counter = 1


因为static自由块是类相关而不是实例相关的,所以,即使没有实例化对象,它也会被执行(在main()方法中没有实例化这个类)----它将向控制台输出“static自由块被执行”并将静态变量“counter”初始化成1。

 

 

分享到:
评论

相关推荐

    在Java中自由块的执行顺序

    自由块分为两种类型:静态自由块(static blocks)和非静态自由块(non-static blocks)。理解它们的执行顺序对于编写高效且无误的Java代码至关重要。 首先,让我们详细探讨非静态自由块。非静态自由块不包含static...

    ios-block的局部变量和全局变量和static的静态变量联系.zip

    全局变量与Block之间的联系相对较弱,因为全局变量在整个程序中都是可见的,Block可以自由地访问它们,但需要注意的是,如果Block被复制到堆上,全局变量的值在Block执行时可能会发生变化,这可能导致不可预期的结果...

    C++堆栈自由存储区全局静态存储区和常量存储区 C++堆栈自由存储区全局静态存储区和常量存储区

    2. **灵活使用**:可以按需分配不同大小的内存块,但同时也需要程序员注意内存泄漏的问题。 3. **效率问题**:相对于堆栈来说,堆的内存分配与释放效率较低,因为涉及到更多的管理操作。 ### 三、全局静态存储区...

    MFC中自由使用自定义消息.doc

    以下是如何在MFC中自由使用自定义消息的详细步骤: 1. **定义消息**: 自定义消息通常定义为`WM_USER`值之上,以避免与系统或已存在的控件消息冲突。例如,可以定义如下: ```cpp #define WM_MY_MESSAGE (WM_...

    你必须知道的495个C语言问题(PDF)

    4.4 我有个函数,它应该接受并初始化一个指针void f(int *ip) f static int dummy = 5; ip = &dummy;g 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。. . . . . . . . . . . . . . . 18 4.5 我...

    Java基础教程(自由之路出品)

    - **注释**: 单行注释使用`//`, 块注释使用`/* */`。 - **代码缩进**: 内层代码或语句比外层代码多缩进两个空格。 - **操作符空白**: 二元操作符两边应各有一个空格。 **示例代码**: ```java public class Test { ...

    c++开发面经.docx

    4. 内存区域:new存储在自由存储区,malloc存储在堆中。 四、指针和引用的区别 1. 指针有自己的一块内存,而引用只是一个别名。 2. 指针可以被初始化为NULL,而引用在定义时必须被初始化且必须是一个已有对象的...

    Java内部类.pdf

    3. **灵活性**:内部类提供了更大的设计自由度,有助于构建更加灵活和模块化的系统。 4. **多继承**:虽然Java不支持类的多重继承,但可以通过内部类结合接口的方式实现多重继承的效果。 5. **减少耦合**:内部类与...

    jeesite中Jingle UI 帮助文档

    ### Jeesite中Jingle UI帮助文档解析 #### 概述 ...Jeesite框架集成Jingle UI,用于开发手机端功能。本文将详细介绍Jingle UI的核心...开发者可以根据具体需求自由组合这些组件和属性,创造出满足业务需求的应用界面。

    NC报表开发_数据加工示例

    此外,还定义了一个静态代码块来初始化报表字段。这些字段包括财务组织名称 (`ORGNAME`) 和机构名称 (`ACCTNAME`) 等。 通过上述代码示例,我们可以清楚地看到如何在NC报表开发中实现数据加工功能。这种方式不仅...

    position的学习文件.zip

    如果`position`设为`absolute`,元素将被移出正常文档流,其位置基于最近的非`static`定位的祖先元素(称为包含块)。如果没有这样的祖先,那么包含块将是初始包含块,通常是浏览器窗口。同样,`top`、`bottom`、`...

    Java中的main()方法详解.doc

    虽然参数名称可以自由选择,但通常约定使用`args`。 #### 三、`main()`方法的作用 `main()`方法的主要作用在于它是Java程序的入口点,即程序运行时最先被调用的方法。当用户通过命令行或其他方式启动Java程序时,...

    net学习笔记及其他代码应用

    public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i ) return 0; else if(i > 0 && i ) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#中的...

    libjpeg-turbo 1.4.2

    例如,它可以一次性处理整个图像,而不需要手动分割成块,这对于批量处理大量图像尤其方便。 4. **色彩空间转换**: 图像处理中,libjpeg-turbo支持多种色彩空间转换,包括常见的YCbCr到RGB,以及Adobe CMYK到RGB...

    Cpp面经200问.pdf

    #### 70. trivial destructor 平凡析构函数是指不执行任何操作的析构函数,如基类的析构函数。 #### 71. 面向对象三大特性 面向对象三大特性为封装、继承、多态。封装隐藏了对象的内部实现细节,继承允许新类继承...

    2021-2022计算机二级等级考试试题及答案No.3374.docx

    9. 数据库操作:数据库被删除后,其包含的表变成自由表,可以独立存在。 10. 软件设计原则:抽象、模块化、信息隐蔽是软件设计的基本原则,自底向上是程序设计策略,不是设计原则。 11. 数组初始化:在C/C++中,...

    最新葵花宝典.Java软件工程师笔试面试必备

    其他非公共类则可以在同一个文件中自由定义。 #### 2\. Java中的goto Java语言设计时去除了`goto`语句,以提高代码的可读性和结构化。因此,Java中没有`goto`语句。 #### 3\. `&`和`&&`的区别 `&`是按位与运算符,...

    PHP程序编码规范标准20020123.doc

    任何人都可以自由使用,但鼓励发现错误和提出改进意见。 ### 命名规则 1. **合适的命名**:确保所有标识符(类、方法、变量等)都有清晰、描述性的名称。 2. **缩写词不要全大写**:避免使用全大写字母来表示缩写词...

    AJAXRPC开发指南.pdf/

    - **开源授权**:采用LGPL开源许可,允许开发者自由地使用、修改和分发代码。 - **同步与异步调用**:支持同步调用和异步调用两种模式,可以根据实际应用场景灵活选择。 #### 三、使用方法 ##### 3.1 服务端方法...

Global site tag (gtag.js) - Google Analytics