这样写有什么好处?
你理解错了,构造方法中实例化是为了初始化对象的属性。例如:this.courses=new HashSet();这边的实例化的目的是为了后面调用student的courses属性。
而声明时实例化,是将对象实例化,然后再调用。例如:Student st=new Student();这边的是实例化Student的对象st,然后后面就可以调用st.courses属性。
如果构造器中不实例化这个courses,那你声明时就算将对象实例化了也无法调用。
两者的含义不同,无可比性。
执行顺序的问题,不过结果都是一样的
先不考虑继承关系,执行顺序为:
1.静态字段(执行且仅执行一次,线程安全)
2.静态构造方法(执行且仅执行一次,线程安全)
3.实例字段
4.实例构造方法