在程序之中使用“{}”定义的结构就称为代码块,而后根据代码块出现的位置以及定义的关键字的不同,代码块可以分为:普通代码块、构造块、静态块、同步代码块,其中同步代码块是在多线程中才会涉及到,这里不作详细解释。
普通代码块
普通代码块的主要特点是定义在一个方法之中的代码。
按照Java程序的开发标准规定相同名称的变量是不能够在同一个方法中出现的,但是由于此时有不同的分界描述。(局部对象与全局变量的区别)
构造代码块
构造块是定义在一个类之中的。
构造块不同于构造方法。
构造块实例:
class Person {
public Person(){
System.out.println("【构造方法】Person构造方法执行");
}
{
System.out.println("【构造块】Person构造块执行");
}
}
public class JavaDemo {
public static void main(String[] args) {
new Person();
new Person();
new Person();
}
}
【构造块】Person构造块执行
【构造方法】Person构造方法执行
【构造块】Person构造块执行
【构造方法】Person构造方法执行
【构造块】Person构造块执行
【构造方法】Person构造方法执行
构造块会优先于构造方法执行,并且每一次实例化新对象的时候都会调用构造块中的代码。
静态块
静态代码块主要指的是使用static关键字定义的代码块,静态块的定义需要考虑到两种情况,主类中定于静态块、非主类中定义静态块。
class Person {
public Person() {
System.out.println("【构造方法】Person构造方法执行");
}
static {
System.out.println("【静态块】静态块执行");
}
{
System.out.println("【构造块】Person构造块执行");
}
}
public class JavaDemo {
public static void main(String[] args) {
new Person();
new Person();
new Person();
}
}
【静态块】静态块执行
【构造块】Person构造块执行
【构造方法】Person构造方法执行
【构造块】Person构造块执行
【构造方法】Person构造方法执行
【构造块】Person构造块执行
【构造方法】Person构造方法执行
此时可以发现静态代码块会优先于构造块执行,并且不管有多少个实例化对象出现,静态代码块只会执行一次。
静态代码块的主要目的是为类中静态属性初始化。
定义在非主类中:
class Message{
public static String getCountry(){
// 该消息的内容可能来自于网络或其他服务器
return "中华人民共和国";
}
}
class Person{
private static String country;
static {
country=Message.getCountry(); //编写一部分的代码
System.out.println(country);
}
}
public class JavaDemo {
public static void main(String[] args) {
new Person();
new Person();
new Person();
}
}
定义在主类中
public class JavaDemo {
static {
System.out.println("程序初始化");
}
public static void main(String[] args) {
System.out.println("main方法代码块");
}
}
静态代码块优先于主方法先执行。