Java中普通代码块和static代码块的区别
来源:互联网 发布:java string转time 编辑:程序博客网 时间:2024/04/29 22:27
在类中用{}包起来,但是没有用static标识的就是普通代码块,比如:
public class Test{ { System.out.println("I am ordinary code block!"); }}
用static标识的代码块就是静态代码块,比如:
public class Test{ static { System.out.println("I am static code block!"); }}
再讲解它俩的区别时,我们先看个例子:
public class Test{ { System.out.println("I am ordinary code block!"); } static { System.out.println("I am static code block!"); } public static void main(String[] args) { }}
这个例子会打印出什么东西呢?
答案是:
I am static block!
我们修改一下main方法:
public static void main(String[] args) { Test s = new Test(); }
再看执行结果:
I am static code block!I am ordinary code block!
普通代码块执行了,并且在static(静态)代码块执行之后执行,虽然static代码块在普通代码块之后,可以看出,static是在类加载时执行,并且只执行一次,而普通代码块是在类初始化时执行,当然也只是执行一次。
那么是不是static代码块都会执行呢?
并不是,这个就看类加载机制是否加载到这个类,比如我们虽然定义了一个类,我们的代码执行期间从来没有用过这个类的信息,即使我们用了类的静态变量,也不会触发static(静态代码块)的执行。
举个例子:
Base类:
public class Base { static { System.out.println("super class init!"); } public static final int VALUE =100;}
main方法所在的类:
public class Main { public static void main(String[] args) { System.out.println(Base.VALUE); }}
打印结果:
100
有人会问,我们的main方法不是有Base.value这段代码么,这样Base类就被加载了么?
实际上不是这样的,JVM为了执行效率高,会把静态变量直接插入代码执行代码中,而不会真正通过静态变量所在的类进行查找,这样,减少查找的过程,大大提高了代码的执行效率,感兴趣的可以看下JVM的内存模型。
总结一下:
1. 静态(static)代码块是在类加载阶段执行。
2. 普通代码块只有在类第一次被初始化时才执行。
3. 所以静态(static)代码块肯定是在普通代码块执行之前执行。
4. 某些条件静态(static)代码不一定会执行,只有当静态(static)代码块所在的类被加载时,才执行。
阅读全文
0 0
- Java中普通代码块和static代码块的区别
- Java中static代码块、普通代码块和构造代码块的执行顺序
- Java中static{}块、{}块和普通代码块的研究
- java中普通代码块,静态代码块,构造代码块的区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别和优先级
- Java中普通代码块、构造代码块、静态代码块的区别
- java中普通代码块、构造代码块、静态代码块的区别
- Java中普通代码块、构造代码块、静态代码块的区别?
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- windows中PLSQL/Developer、Oracle InstantClient的安装与配置
- AI会让人类失业吗? 马云马化腾们不这么认为
- git搭建服务器
- SpringMVC 的<mvc:resources>使用映射路径展示文件服务器上的图片
- pangu and stones(区间dp)
- Java中普通代码块和static代码块的区别
- 【知了堂学习笔记】_JavaScript基础知识之内置对象(三)
- A
- [bzoj3438][网络流]小M的作物
- Ansible介绍
- SpringBoot定时任务(@Scheduled)说明
- 主成分分析(PCA)
- Cordova打包Vue项目
- POJ3126-Prime Path