Java中静态代码块、构造代码块的区别
直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
静态代码块、构造代码块、构造函数同时存在时的执行顺序:静态代码块 > 构造代码块 > 构造函数;
下面我们来举几个例子说明一切
demo1:构造方法
- public class Test {
- static {
- System.out.println("静态块");
- }
- {
- System.out.println("构造块,在类中定义");
- }
- public Test() {
- System.out.println("构造方法执行");
- }
- public static void main(String[] args) {
- new Test();
- new Test();
- }
- }
- /*
- 静态块
- 构造块,在类中定义
- 构造方法执行
- 构造块,在类中定义
- 构造方法执行
- */
demo2:普通代码块
- /*普通代码块:在方法或语句中出现的{}就称为普通代码块。
- 普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”*/
- public class Test {
- public static void main(String[] args) {
- {
- int x = 3;
- System.out.println("1,普通代码块内的变量x=" + x);
- }
- int x = 1;
- System.out.println("主方法内的变量x=" + x);
- {
- int y = 7;
- System.out.println("2,普通代码块内的变量y=" + y);
- }
- }
- }
- /*
- 1,普通代码块内的变量x=3
- 主方法内的变量x=1
- 2,普通代码块内的变量y=7
- */
demo3:构造代码块
- /*构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。
- 构造代码块在创建对象时被调用,每次创建对象都会被调用,
- 并且构造代码块的执行次序优先于类构造函数。*/
- public class Test {
- {
- System.out.println("第一代码块");
- }
- public Test() {
- System.out.println("构造方法");
- }
- {
- System.out.println("第二构造块");
- }
- public static void main(String[] args) {
- new Test();
- new Test();
- new Test();
- }
- }
- /*
- 第一代码块
- 第二构造块
- 构造方法
- 第一代码块
- 第二构造块
- 构造方法
- 第一代码块
- 第二构造块
- 构造方法
- */
demo4:静态代码块
- /*静态代码块:在java中使用static关键字声明的代码块。
- 静态块用于初始化类,为类的属性初始化。
- 每个静态代码块只会执行一次。
- 由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
- 如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
- 注意:1 静态代码块不能存在于任何方法体内。
- 2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。*/
- class Code {
- {
- System.out.println("Code的构造块");
- }
- static {
- System.out.println("Code的静态代码块");
- }
- public Code() {
- System.out.println("Code的构造方法");
- }
- }
- public class Test {
- {
- System.out.println("Test的构造块");
- }
- static {
- System.out.println("Test的静态代码块");
- }
- public Test() {
- System.out.println("Test的构造方法");
- }
- public static void main(String[] args) {
- System.out.println("Test的主方法");
- new Code();
- new Code();
- new Test();
- new Test();
- }
- }
- /*
- Test的静态代码块
- Test的主方法
- Code的静态代码块
- Code的构造块
- Code的构造方法
- Code的构造块
- Code的构造方法
- Test的构造块
- Test的构造方法
- Test的构造块
- Test的构造方法
- */
参考:http://www.cnblogs.com/sophine/p/3531282.html
本文链接:https://liuyanzhao.com/5303.html
Java中静态代码块、构造代码块的区别相关推荐
- java中静态变量,静态代码块,静态方法,实例变量,匿名代码块的加载顺序
1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public vo ...
- [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)
参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...
- java静态代码块、静态方法、静态变量、构造代码块、普通代码块、成员变量执行顺序
package smartt.styy.auth.model.voRsp;public class Test {static {String test5="555";//局部变量t ...
- 静态代码块 构造代码块 构造方法的执行顺序
今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 执行顺序: 静态代码块>构造代码块>构造方法体 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构 ...
- java 静态块初始化_简单了解java中静态初始化块的执行顺序
这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在java中,其应该是先于所有的方法执行. ...
- 浅谈 JAVA中静态初始化块和非静态初始化块的区别
众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: static{} 执 ...
- java中怎么实现指数幂,java中幂指数值的运算代码解析
说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...
- java怎么计算幂函数,java中幂指数值的运算代码解析
说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...
- java中静态变量和静态方法分别有什么特点?
java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...
- Java中静态变量与静态方法的继承
看下面的代码: public class Demo {public static void main(String[] args) {// 子类SonB继承父类Father,子类可以获取父类的所有属性 ...
最新文章
- 红米ac2100有ipv6吗_#年末#白里透红,跑得相当快,红米AC2100体验
- 神经网络与机器学习 笔记—小规模和大规模学习问题
- CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介、使用方法、案例应用之详细攻略
- 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
- 每天一道LeetCode-----回文链表
- 一个故事 让你看懂“区块链”
- slice与substring与substr
- [软件工程-设计模式] GRASP软件设计的模式和原则
- HDU-1874畅通工程续( 最短路)
- 2.React学习笔记----修改模板并使用Ant Design
- 智能优化算法:蜻蜓优化算法-附代码
- 用jdbc操作mysql 实现注册功能_JDBC链接Mysql数据库---实现登陆注册功能
- 获取url路径上的参数,(避免中文乱码)
- 优秀程序员 分析提高能力 程序进阶
- linux 怎么格式化u盘写保护,u盘写保护如何解除?去掉保护模式的具体方法
- android 汉字字母排序,android recycleView自定义字母检索A-Z排序滑动通讯录汉字英文相互转换...
- curl DNS解析失败crash问题
- 【老九君】【Java】集合框架
- APP运营中地推应该怎么做
- 470万条12306用户信息遭泄露
热门文章
- 编辑请求内容 Charles
- Linux学习笔记9_终端提示符编辑方法(修改颜色,路径,时间)
- LintCode_13 字符串查找
- centos 7 64位虚机上android4环境运行
- 初识THINKPHP--关于路径的问题(xampp下的htdocs为根目录)
- 基于 cm-11 源码编译模拟器
- maven 配置tomcat 插件
- 取得客户端的机器名,域名,登陆用户名...转
- php强制浏览器不缓存,php强制浏览器不缓存和设置浏览器缓存
- plsql查询无结果集_何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督...