1.构造函数
1)构造函数的命名必须和类名完全相同,一个类可以有多个参数不同的构造函数(在java中普通函数可以和构造函数同名,但是必须带有返回值);
2)构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
3)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4)当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;
public classCode {publicCode() {
System.out.print("无参构造函数n");
}publicCode(String name) {
System.out.print(name+ "有参构造函数n");
}
}
构造函数在每次对象实例化时都会执行相应的构造函数;
@TestvoidcodeTest() {
Code code= newCode();
Code code2= new Code("java");
}
打印:
构造函数
java有参构造函数
2. 静态代码块
在类中用 static 和 {} 定义的代码块:
public classCode {publicCode(String name) {
System.out.print(name+ "有参构造函数n");
}static{
System.out.print("静态代码块n");
}
}
静态代码块会在类加载时执行并只执行一次,所以它不能存在于任何方法块中;
@TestvoidcodeTest() {
Code code= new Code("java");
Code code2= new Code("springboot");
}
打印:
静态代码块
java有参构造函数
springboot有参构造函数
3. 构造代码块
在类中用 {} 定义的代码块,和上面的静态代码块少了 static
public classCode {static{
System.out.print("静态代码块n");
}
{
System.out.print("构造代码块n");
}publicCode() {
System.out.print("无参构造函数n");
}publicCode(String name) {
System.out.print(name+ "有参构造函数n");
}
}
构造代码块在每一次对象被实例化时执行,比构造函数先执行;
@Testvoidcodetest() {
Code code= new Code("java");
Code code2= new Code("springboot");
}
打印:
静态代码块
构造代码块
java有参构造函数
构造代码块
springboot有参构造函数
4.普通代码块
在方法中用 {} 定义的代码块,当方法被调用时执行,执行顺序和代码顺序一致
public classCode {public voidfun(String str) {
{
System.out.print("普通代码块n");
}}
}
5.执行顺序
静态代码块>构造代码块>构造函数>普通代码块
6.父类和子类执行顺序
父类静态代码块>子类静态代码块>父类构造代码块>父类构造函数>子类构造代码块>子类构造函数