java温习*(6):static关键字的应用---静态代码块

本文深入解析Java中的三种代码块:静态代码块、构造代码块和普通代码块。阐述了它们的定义、特征及应用场景,通过实例对比了它们的执行优先级和次数,帮助读者掌握代码块的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用三:static + 代码块 vs 代码块

概念:

静态代码块:被static修饰的,定义在类内部,用{}括起的代码段。

构造代码块:没有被static修饰的,定义在类内部,用{}括起的代码段。

普通代码块:定义在方法内部,用{}括起的代码段。

特征:

静态代码块:

  • 只能出现在类内,不允许出现在方法内。

  • 可以出现多次,按顺序在类加载时执行。

  • 无论该类实例化多少对象,只执行一次。

构造代码块:

  • 可以在类内出现多次,按顺序在每个对象实例化时执行。

  • 执行优先级:晚于静态代码块,高于构造方法。

  • 每次执行对象实例化时,均会执行一次。

普通代码块:

  • 可以在方法内出现多次,按顺序在方法调用时执行。

应用:

静态代码块:基于性能优化的考量,多适用于需要在项目启动时执行一次的场景,譬如项目资源整体加载等。

构造代码块:多适用于类中每个对象产生时都需要执行的功能封装。与构造方法的区别在于,构造方法是在new执行时有选择性的调用带参或者无参构造,而构造代码块则是,在每个对象实例化时都一定会执行。

普通代码块:适用于在方法内进行代码功能拆分。

示例:

定义国产车类CarDemo,包含静态成员firm,非静态方法run;定义测试类CarTest,针对CarDemo进行测试
备注:此处由于展示篇幅有限,暂不考虑属性的访问权限

- 当CarDemo类在静态代码块和构造代码块中分别对静态成员赋值,并添加构造方法

 

测试类CarTest中实例化CarDemo,并调用run方法

运行结果:

总结:

1、执行优先级:静态代码块>构造代码块>构造方法

2、执行次数:静态代码块只执行1次;构造代码块、构造方法随对象实例化个数而定

- CarDemo类中添加成员属性color,并在静态代码块和构造代码块中分别对color进行赋值时

错误提示:不能在静态块中操作非静态成员

总结:
1、不能在静态代码块中直接对非静态成员赋值。

2、可以在构造代码块中直接操作静态和非静态成员。

- 当将属性定义移入静态代码块时

 

错误提示分别为:不允许在静态代码块中声明静态成员;无法在构造代码块中访问到相关成员。

总结:

1、不能在静态代码块声明静态成员,可以声明非静态成员。

2、静态代码块中声明的成员,在外部无法进行访问。

  • 当在run方法中分别添加2个代码块时

图片描述

图片描述

运行结果为:

图片描述

  • 当在两个代码块上部添加同名局部变量声明时:

图片描述

错误提示:不允许定义重名变量

图片描述

总结:

1、普通代码块在方法内顺序执行,各自作用范围独立。

2、方法内定义的局部变量,作用范围为:自定义位置起,至方法结束。在此期间,不允许方法中普通代码块内存在局部变量的声明。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值