Java——代码块(普通块、构造块、静态块)
时间:2022-07-25
本文章向大家介绍Java——代码块(普通块、构造块、静态块),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
代码块在实际开发中很少见,只需要了解即可,实际开发中也不需要使用它。
代码编写中,使用{}声明的程序块就属于代码块,而根据其出现的位置,及声明关键字的不同,分为四种:普通代码块、构造块、静态块、同步代码块(多线程中涉及)
1、普通代码块
在方法中使用{}定义起来的一段代码,利用普通代码块可以实现局部代码的拆分(实际基本用不上)。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
{
int x =10; //局部
System.out.println("x="+x); //输出10
}
int x =100; //全局
System.out.println("x="+x); //输出100
}
}
2、构造代码块
将普通代码块中提取到类中使用,就形成了构造代码块。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
{ //构造块
System.out.println("构造块");
}
public Person() {
System.out.println("构造方法");
}
}
由以上程序运行可知,构造块优先于构造方法执行,每次实例化对象时构造快都会被重复调用(实际基本用不上)。
3、静态代码块
如果代码块中使用了static关键字定义,则该代码块为静态代码块:
- 在非主类中定义的;
- 在主类中定义的;
【举例】:非主类中定义的静态块
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
public Person() {
System.out.println("构造方法");
}
{ //构造块
System.out.println("构造块");
}
static { //静态块
System.out.println("静态块");
}
}
由以上运行可知,静态块最先执行,并且只执行一次。在非主类中定义 的静态块,可以用其为static属性初始化,如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Person per1 = new Person();
Person per2 = new Person();
}
}
class Person{
private static String msg = "hello";
private static String info =null;
public Person() {
System.out.println("构造方法");
}
{ //构造块
System.out.println("构造块");
}
static { //静态块
System.out.println("静态块");
info = msg+"张三";
info = info +10;
System.out.println(info);
}
}
【举例】:主类中定义的静态块
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("hello");
}
static {
System.out.println("竟然是我先执行??");
}
}
以上可以发现,静态块优于主方法先执行。
4、总结
代码块对于现阶段开发意义不大,了解即可。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 不到100行代码搞定Python做OCR识别身份证,文字等各种字体
- codeforces 1389B(贪心)
- 又一个自动生成项目目录组件tree-cli,快速生成Readme项目结构
- 用Vue CLI创建uni-app,摆脱HBuilder,npm命令行运行及发布
- codeforces 1133D(map+精度控制)
- 1024程序员节 | 我在腾讯自研数据库,我为技术代言
- jasmine spyOn的单步调试
- codeforces 1363C(优先队列)
- 系统与应用异常定位诊断
- SQL优化终于干掉了“distinct”
- SAP Spartacus delivery mode页面Cannot find control with的错误消息
- codeforces 1349A(数学)
- 阔别两年,webpack 5 正式发布了!
- SAP Spartacus delivery mode continue button enable与否的逻辑
- codeforces 1342C(前缀和)