Java中的static块和构造函数都是用来初始化类的成员变量的,但两者有着不同的特点和应用场景。下面详细讲解static块和构造函数的用法及其区别。
Java中的static块和构造函数都是用来初始化类的成员变量的,但两者有着不同的特点和应用场景。下面详细讲解static块和构造函数的用法及其区别。
一、static块
1.1 定义
在Java中,static块是一个静态代码块,用来初始化静态成员变量。在类加载时,如果类中有static块,则首先会执行static块,然后才会执行其他代码块和构造函数。
1.2 语法
格式如下:
static{
// 初始化代码
}
1.3 示例
下面例子中, static块用于初始化静态成员变量count:
public class StaticBlockDemo {
static int count;
static {
count = 0;
System.out.println("执行了静态块");
}
public StaticBlockDemo() {
count++;
System.out.println("执行了构造函数");
}
public static void main(String[] args) {
System.out.println("count=" + StaticBlockDemo.count);
StaticBlockDemo s1 = new StaticBlockDemo();
System.out.println("count=" + StaticBlockDemo.count);
StaticBlockDemo s2 = new StaticBlockDemo();
System.out.println("count=" + StaticBlockDemo.count);
}
}
输出结果为:
执行了静态块
count=0
执行了构造函数
count=1
执行了构造函数
count=2
在类被加载时,先执行静态块中的初始化代码,然后执行main函数中的代码,最后执行构造函数。初始化代码中将count初始化为0,在构造函数中每次都会将count加1。因此,在执行构造函数时,count值分别为1和2。
二、构造函数
2.1 定义
构造函数是一种特殊的方法,用来初始化类的对象。在创建类的对象时,会自动地调用构造函数,并传入相应的参数。
2.2 语法
格式如下:
public class ClassName{
public ClassName(){
// 初始化代码
}
}
2.3 示例
下面例子中,构造函数用于初始化对象的属性:
public class ConstructorDemo {
String name;
int age;
public ConstructorDemo(String name, int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println("姓名:" + name + ",年龄:" + age);
}
public static void main(String[] args) {
ConstructorDemo c = new ConstructorDemo("张三", 20);
c.show();
}
}
输出结果为:
姓名:张三,年龄:20
在创建ConstructorDemo对象时,会调用构造函数进行初始化。构造函数将传入的name和age赋值给对象的属性name和age,然后调用show方法输出属性值。
三、static块和构造函数的区别
static块和构造函数都可以用来初始化类的成员变量,但它们有以下区别:
- 执行顺序不同:类加载时,static块最先执行,而构造函数在对象创建时被调用;
- 初始化的对象不同:static块用于初始化静态成员变量,而构造函数用于初始化普通成员变量;
- 类中可以有多个构造函数,但只能有一个静态块,而且它通常只用于静态变量的初始化。
因此,在使用时需要根据需要进行选择。
本文标题为:java static块和构造函数的实例详解
基础教程推荐
- JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析 2024-03-01
- Gateway网关自定义拦截器的不可重复读取数据问题 2022-09-03
- 基于Spring的Maven项目实现发送邮件功能的示例 2024-02-27
- java.sql.SQLException:连接关闭后不允许任何操作 2023-11-07
- ThreadLocal工作原理及用法案例 2023-08-07
- MyBatis源码剖析之Mapper代理方式详解 2023-03-07
- mybatis中关于type-aliases-package的使用 2023-04-13
- Java拦截器Interceptor实现原理及代码示例 2023-08-07
- 关于Mybatis与JPA的优缺点说明 2022-12-16
- Apache Shiro 使用手册(五) Shiro 配置说明 2024-01-12