代码块基本概念
什么是代码块?
在java中,每个用{}引起来的代码的集合就被称作代码块。
代码块的分类
代码块可分为局部代码块,构造代码块,静态代码块,同步代码块。
局部代码块
在方法中定义的,随着方法的调用而加载,方法结束而释放,及早释放,提高内存利用率。
public class Test {
public static void main(String[] args) {
//定义在main方法中的代码块
{
int num=1;
System.out.println("静态代码块执行了");
System.out.println(num);
}
}
}
执行结果如下
静态代码块执行了
1
构造代码块:在java类中,定义在成员方法外面。每次实例化该对象都会执行,并且在构造方法之前就会执行。
public class Student {
private String name;
private String sNum;
int age;
{
System.out.println("构造代码块执行了");
}
public Student() {
System.out.println("构造方法执行了");
}
}
class StudentTest{
public static void main(String[] args) {
Student student = new Student();
Student student1 = new Student();
}
}
执行结果:
构造代码块执行了
构造方法执行了
构造代码块执行了
构造方法执行了
静态代码块:用关键字static修饰的,定义在类中方法外,随类的加载而加载,只执行一次。所以他的执行优先于该类中所有的方法,代码块。
public class Demo1 {
static{
System.out.println("静态代码块执行了1");
}
public static void main(String[] args) {
System.out.println("请看这里!");
}
static{
System.out.println("静态代码块执行了2");
}
}
执行结果
静态代码块执行了1
静态代码块执行了2
请看这里!
一个简单的代码块demo
public class Dog {
static {
System.out.println("Dog类中的静态代码块执行了。。。");
}
{
System.out.println("构造代码执行了。。。");
}
public Dog() {
System.out.println("构造方法执行了。。。。");
}
}
class DogTest{
static{
System.out.println("测试类中的静态代码块执行了。。。");
}
public static void main(String[] args) {
System.out.println("main方法执行了");
Dog dog = new Dog();
Dog dog1 = new Dog();
}
}
这段程序的运行结果如下:
测试类中的静态代码块执行了。。。
main方法执行了
Dog类中的静态代码块执行了。。。
构造代码执行了。。。
构造方法执行了。。。。
构造代码执行了。。。
构造方法执行了。。。。
首先:测试类加载,测试类里面的静态代码块会优先执行,打印第一句,接下来main方法加载进栈内存,打印第二句话。然后创建第一个Dog类对象,Dog类加载,会执行Dog类中的静态代码块,打印第三句(无论后面执行什么,静态代码块只执行一次),创建第一个对象dog,构造代码块优先于构造方法执行,打印第四句,第五句,接下来创建第二个对象dog1,打印第六句和第七句。