java构造方法的理解

简介

构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。

起源与背景

   随着计算机革命的发展,"不安全"的编程方式一逐渐成为变成代价高昂的主因之一。
  初始化正是涉及安全的一个问题。许多C程序的错误都源于程序员忘记初始化变量。特别是在使用程序库时。
  C++引入了构造器的概念,这是一个在创建对象时被自动调用的特殊方法。java中也采用了构造器。

构造方法存在的意义

简单来说,在创建对象时并初始化
在java中通过提供构造器,我们可以确保每个对象都会得到初始化。可以使程序更加安全可靠且高效。
为什么要使用构造器?
首先要明白不通过构造方法,能不能初始化类内的成员变量(域)?答案是可以,通过静态变量,或初始化块等手段就可以完成变量的初始化。然而通过这样的手段,每次new的时候都执行了一样的操作:一成不变的值赋值给了变量。而通过构造函数则不一样,因为方法可以有参数,而且可以被重载,通过传入参数的不同,可以一定程度实现类的动态赋值。而不同的重载构造函数让类的实例化更加多样。
但java中构造器的作用不限于此。

如何写一个构造方法

构造方法名与类名相同,在类实例化时自动调用。
简单的带有构造器的类:

class Demo{
	Demo(){
		//默认语句 super();
		System.out.print("Demo ");
	}
}
public class Simple{
	public static void main(String[] args){
		for(int i=0;i<5;i++){
			new Demo(); //实例化
		}
	}
}

输出结果:

Demo Demo Demo Demo Demo

注意!在子类继承父类中

  1. java类至少有一个构造方法。若父类没有定义任何类型的构造方法,编译器会自动生成无参数的构造方法;如果你定义了一种构造方法,则编译器不会自动生成无参构造函数。
  2. 构造方法不能互相调用(死循环),否则报错。.
  3. 构造方法只能调用,不能继承。
    简单的解释:构造器和类同名,父类和子类肯定不同名,那父类的构造器放在子类里那不成一般方法了吗?所以父类的构造器是无法继承的。
  4. 构造器是一种特殊的类型,没有返回值。注意:不是空返回值(void)。
  5. 如果子类没有定义构造方法,则调用父类的无参数的构造方法,如果父类只定义了有参数的构造方法(没有无参构造方法)则报错。
  6. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,“默认”执行父类无参数的构造方法(子类构造器第一行会隐式使用super()),然后执行自己的构造方法。
  7. 调用构造方法时this和super只能出现一个。
  8. 子类构造方法默认调用父类无参构造方法。可以通过super(参数)调用所需要的父类的构造方法,//通常该语句做为子类构造方法中的第一条语句。
  9. 如果某个构造方法调用类中的其他的构造方法,则可以用this(参数),//该语句放在构造方法的第一条。
  10. 若父类定义了有参数的构造方法,没定义无参数的构造方法,则子类需要显式引用父类含参的构造方法。
  11. 构造方法可以重载,无重写(因为没有继承),构造方法只能执行一次。
  12. 如果构造器中添加了this引用该类的其他构造器,或者添加了super()调用父类构造器,如果this和super中有参数,则只能是静态的方法和静态变量或常量
  13. 构造方法只能被构造方法调用。
  14. 调用其他构造方法只可以单调用,不可以多调用。可以多重调用。即不可以构造方法1同时调用构造方法2和构造方法3;可以传递调用,方法1调用方法2,方法2调用方法3。

你可能感兴趣的:(java)