java中的构造函数,静态代码块,构造代码块,普通代码块

1.构造函数

1)构造函数的命名必须和类名完全相同,一个类可以有多个参数不同的构造函数(在java中普通函数可以和构造函数同名,但是必须带有返回值);

2)构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;

3)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;

4)当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;

public class Code {
    public Code() {
        System.out.print("无参构造函数\n");
    }
    public Code(String name) {
        System.out.print(name + "有参构造函数\n");
    }
}

构造函数在每次对象实例化时都会执行相应的构造函数;

@Test
void codeTest() {
    Code code = new Code();
    Code code2 = new Code("java");
}

打印:

构造函数
java有参构造函数

2. 静态代码块

在类中用 static 和 {} 定义的代码块:

public class Code {
    public Code(String name) {
        System.out.print(name + "有参构造函数\n");
    }

    static {
        System.out.print("静态代码块\n");
    }
}

静态代码块会在类加载时执行并只执行一次,所以它不能存在于任何方法块中;

@Test
void codeTest() {
    Code code = new Code("java");
    Code code2 = new Code("springboot");
}

打印:

静态代码块
java有参构造函数
springboot有参构造函数

3. 构造代码块

在类中用 {} 定义的代码块,和上面的静态代码块少了 static

public class Code {
    static {
        System.out.print("静态代码块\n");
    }

    {
        System.out.print("构造代码块\n");
    }

    public Code() {
        System.out.print("无参构造函数\n");
    }

    public Code(String name) {
        System.out.print(name + "有参构造函数\n");
    }
}

构造代码块在每一次对象被实例化时执行,比构造函数先执行;

@Test
void codetest() {
    Code code = new Code("java");
    Code code2 = new Code("springboot");
}

打印:

静态代码块
构造代码块
java有参构造函数
构造代码块
springboot有参构造函数

4.普通代码块

在方法中用 {} 定义的代码块,当方法被调用时执行,执行顺序和代码顺序一致

public class Code {
    public void fun(String str) {
        {
            System.out.print("普通代码块\n");
        }
    }
}

5.执行顺序

静态代码块>构造代码块>构造函数>普通代码块

6.父类和子类执行顺序

 父类静态代码块>子类静态代码块>父类构造代码块>父类构造函数>子类构造代码块>子类构造函数

猜你喜欢

转载自www.cnblogs.com/javencs/p/12510544.html