java中构造方法以及初始化时的执行先后顺序

1.构造方法

构造方法作用就是对类进行初始化。 如果你没有定义任何构造方法的形式,系统会为你自动调用一个不带任何参数的构造函数,那么你产生类的对象时只能用不带参数的方法,构造方法就是与类同名的那个方法,它的作用是可以用来初始化。下面来举一个例子来看一下:

class A{
          
   
    public String name;
  public A(String name) {
          
   
        this.name = name;
        System.out.println("有参数构造方法!");
    }
  public A(){
          
   
        System.out.println("无参构造方法!");
    }
 public void eat(){
          
   
        System.out.println(name+"干饭!");
    }
}
public class Test {
          
   
    public static void main(String[] args) {
          
   
        A a1=new A();       //调用无参的构造方法
        A a2=new A("小黑"); //调用有参的构造方法
        a1.eat();
        a2.eat();
    }
}

运行结果为:

内存布局为: 但是,一般无参构造方法是不需要我们写的,每一个类都有无参构造方法,当创建实例化对象时,如果没有写构造方法,系统会默认调用无参构造方法;当写了构造方法时,就调用我们写了的构造方法。

2.初始化顺序

关于初始化有几种方法,上面的构造方法,也是初始化的一种;还有就地初始化、代码块初始化;通过下面一个例子来解释说明:

class A{
          
   
    String name="丘比特"; //就地初始化
    {
          
   
        System.out.println(this.name);
        System.out.println("我是普通代码块!");
    }
    public A(){
          
   
        System.out.println("构造方法初始化!");
        this.name="小丘比特";
        System.out.println(this.name);
    }
    static {
          
   
        System.out.println("我是静态代码块!");
    }
}
public class Test {
          
   
    public static void main(String[] args) {
          
   
        new A();
    }
}

运行结果: 注意: 使用static关键字定义的代码块,一般用于初始化静态成员属性;静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的;然后就地初始化与普通代码块初始化看书写的先后顺序,写在前面的先执行;然后才是构造方法初始化。

总结

当我们遇到一些Java语法上的歧义时,应该多实践一下,或者查看java语法规范,这样有利于我们深入学习Java,不会被一些细节上的东西影响!

地址!

经验分享 程序员 微信小程序 职场和发展