代码块概述
在Java中,使用 { } 括起来的代码被称为代码块
代码块分类
局部代码块
- 位置: 方法中定义
- 作用: 限定变量的生命周期,及早释放,提高内存利用率
示例代码
public class Test {
/*
局部代码块
位置:方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率
*/
public static void main(String[] args) {
{
int a = 10;
System.out.println(a);
}
// System.out.println(a);
}
}
构造代码块
- 位置: 类中方法外定义
- 特点: 每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
- 作用: 将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
- 示例代码
```java public class Test { /* 构造代码块:
*/ public static void main(String[] args) { Student stu1 = new Student(); Student stu2 = new Student(10); } }位置:类中方法外定义
特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
class Student {
{
System.out.println("好好学习");
}
public Student(){
System.out.println("空参数构造方法");
}
public Student(int a){
System.out.println("带参数构造方法...........");
}
}
- 静态代码块
- 位置: 类中方法外定义
- 特点: 需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
- 作用: 在类加载的时候做一些数据初始化的操作
- 示例代码
```java
public class Test {
/*
静态代码块:
位置:类中方法外定义
特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
作用:在类加载的时候做一些数据初始化的操作
*/
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person(10);
}
}
class Person {
static {
System.out.println("我是静态代码块, 我执行了");
}
public Person(){
System.out.println("我是Person类的空参数构造方法");
}
public Person(int a){
System.out.println("我是Person类的带...........参数构造方法");
}
}
黑马信息管理系统使用代码块改进
- 需求
使用静态代码块,初始化一些学生数据 - 实现步骤
- 在StudentDao类中定义一个静态代码块,用来初始化一些学生数据
- 将初始化好的学生数据存储到学生数组中
示例代码
StudentDao类public class StudentDao { // 创建学生对象数组 private static Student[] stus = new Student[5]; static { Student stu1 = new Student("heima001","张三","23","1999-11-11"); Student stu2 = new Student("heima002","李四","24","2000-11-11"); stus[0] = stu1; stus[1] = stu2; } // 添加学生方法 public boolean addStudent(Student stu) { // 2. 添加学生到数组 //2.1 定义变量index为-1,假设数组已经全部存满,没有null的元素 int index = -1; //2.2 遍历数组取出每一个元素,判断是否是null for (int i = 0; i < stus.length; i++) { Student student = stus[i]; if(student == null){ index = i; //2.3 如果为null,让index变量记录当前索引位置,并使用break结束循环遍历 break; } } // 3. 返回是否添加成功的boolean类型状态 if(index == -1){ // 装满了 return false; }else{ // 没有装满, 正常添加, 返回true stus[index] = stu; return true; } } // 查看学生方法 public Student[] findAllStudent() { return stus; } public void deleteStudentById(String delId) { // 1. 查找id在容器中所在的索引位置 int index = getIndex(delId); // 2. 将该索引位置,使用null元素进行覆盖 stus[index] = null; } public int getIndex(String id){ int index = -1; for (int i = 0; i < stus.length; i++) { Student stu = stus[i]; if(stu != null && stu.getId().equals(id)){ index = i; break; } } return index; } public void updateStudent(String updateId, Student newStu) { // 1. 查找updateId, 在容器中的索引位置 int index = getIndex(updateId); // 2. 将该索引位置, 使用新的学生对象替换 stus[index] = newStu; } }