【JAVA_SE】构造方法与构造代码块
构造方法
作用:给对应的对象进行初始化
格式:
修饰符 函数名(形参列表){
初始化语句;
}
注意: 1.构造方法是没有返回值类型的;
2.构造方法的函数名必须和类名一致;
3.构造方法并不是我们手动调用的,而是在创建对应对象时由jvm主动调用的(每创建一个对象就会调用一次构造方法);
4.如果一个类没有显式的添加一个构造方法,那么Java编译器会为该类添加一个无参的构造方法;
5.如果一个类已经显式的添加了一个构造方法,那么Java编译器就不会为该类添加一个无参的构造方法;
6.构造方法可以以方法重载的形式存在多个的。
例如:
class Baby{
int age;
public Baby(){
System.out.println("无参的构造函数调用了");
}
public Baby(int age){
System.out.println("带参的构造函数调用了");
}
}
没写构造方法也是存在构造方法的,,但不是jvm添加的,是Java编译器添加的。
构造代码块
构造代码块:给所有对象进行统一的初始化
格式:
{
初始化语句;
}
作用:如果存在许多重载的构造方法,且每个里面需要相同逻辑,可将相同的代码提取到构造代码块中
代码块的类型:构造代码块;局部代码块;静态代码块;同步代码块(多线程)
构造代码块:代码块位于成员位置
局部代码块:代码块位于方法之内
作用:缩短局部变量的生命周期
静态代码快:
static{
初始化语句;
}
类加载时执行,执行时先执行父类再执行子类
注意: 1.构造方法的代码是位于成员变量显式初始化语句,构造代码块语句之后执行的;
2.成员变量的显式初始化与构造代码块语句执行的先后顺序是按照当前代码的顺序执行的;
3.成员变量的初始化语句和构造代码块的代码是在构造方法中完成的。
练习:
public class Demo1 {
public static void main(String[] args) {
Student s1=new Student();
s1.setName("数学");
s1.getName();
Student s2=new Student("语文");
s2.getName();
}
}
class Student{
String className;
static{
System.out.println("静态构造代码块被调用了");
}
public Student(){
System.out.println("无参的构造方法被调用了");
}
public Student(String className){
this.className=className;
System.out.println("带参的构造方法被调动了");
}
public void setName(String className){
this.className=className;
}
public void getName(){
System.out.println(this.className);
}
}
结果:
静态构造代码块被调用了
无参的构造方法被调用了
数学
带参的构造方法被调动了
语文
笔试题:
class B{
//成员变量的位置
public static B t1 = new B() ;
public static B t2 = new B() ;
{
System.out.println("构造代码块");
}
static{
System.out.println("静态代码块!");
}
}
public class Demo {
public static void main(String[] args) {
B b = new B() ;//构 构 静 构
//静态代码块 ,构造代码块,构造方法的优先级问题:
//静态代码块>构造代码块>构造方法...
}
}