本文主要讲述Java面向对象中的代码块的知识点
写在方法体内的代码块
当一个变量在方法体内定义后,只能在方法体内使用
public class test1 {
public static void main(String[] args) {
int a = 10;
}
System.out.println(a);
}
如上面的代码,在main方法里执行完给a赋值为10后,a就会消失,所以输出语句里面的a就无法被输出,会报错
写在成员位置的代码块
可以把多个构造方法中重复的代码提取出来
在创造本类对象的时候会先执行构造代码块,在执行构造方法
public class Person {
String name;
int age;
public Person(){
System.out.println("这里有个人");
}
public Person(String name, int age){
this.name = name;
this.age = age;
System.out.println("这里有个人");
}
}
优化后
public class Person {
String name;
int age;
{
System.out.println("这里有个人");
}
public Person(){
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
用IDEA测试一下输出顺序

这种书写方法不够灵活,当某一个构造不需要执行这个语句时,就无法使用这种方式了,所以不会使用,建议把相同的语句封装成一个方法,在构造内调用方法
static{}
随着类的加载而加载,且自动触发,只执行一次
在类的加载时,可以初始化数据
public class Person {
String name;
int age;
static {
System.out.println("静态代码块");
}
public Person(){
System.out.println("空参构造输出");
}
public Person(String name, int age){
System.out.println("有参构造输出");
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
}
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("张三",20);
}
}

代码块在开发中非常常用,也很重要,如果有任何的问题欢迎在评论区交流