Java中的构造函数深入浅出详解,以及小案例分析(内涵干货)

  • Post author:
  • Post category:java

首先,什么是构造函数呢?
构造函数:是类的一个特殊成员,在类实例化的时候会自动调用
那么,构造函数有什么作用呢?
构造函数的作用就是为对象分配空间,并初始化对象的属性。
话不多说,直接上代码:
首先,定义个Person类:

public class Person {
	private String name;
	private int age;
	
	//构造函数
	Person(String n) {
		name = n;
	}
	public void eat() {
		System.out.println("我叫"+name+"年龄"+age+"喜欢吃西瓜!");
	}
}

随后创建对象,调用:

public class Construction1 {
	public static void main(String[] args) {
		Person person = new Person("xiaoli");
		person.eat();
	}
}

通过代码,分析,我们提供了一个有参的构造方法:

	Person(String n) {
		name = n;
	}

并且,创建对象,调用:

	Person person = new Person("xiaoli");

那么,为什么要这么用呢?
其实,我们要使用对象,就要先进行对象的构造,而我们构造对象就要使用构造器,构造器是一种特殊的方法,构造器的定义必须跟类名相同,这也就是我们所说的构造函数了。
其实,当该语句执行时:

	Person person = new Person("xiaoli");

执行顺序如下:

  1. new,开辟空间,初始化默认值
  2. 然后调用Person()这个构造函数进行传参
  3. 在函数内,n的值赋给name
  4. 函数执行完毕,弹栈
  5. 创建类类型变量,将对象的首地址赋给变量

这就是一个对象创建完成所经历的步骤。


说完了构造函数的使用原理,那么如何定义一个构造方法呢?
构造方法定义的三个条件:

  • 方法名和类名一致
  • 在方法名前面没有返回值类型
  • 在方法中不能使用return语句

构造函数可以分为无参构造函数和有参构造函数两种:
无参构造函数

public class Person2 {
	public Person2() {
		System.out.println("无参构造方法被调用");
	}
}
public class ConstructionDemo2 {
	public static void main(String[] args) {
		Person2 person2 = new Person2();
	}
}

该方法是无参构造方法,即构造方法不接受参数,运行结果为“无参构造方法被调用”
有参构造函数:

public class Person {
	private String name;
	private int age;
	
	//构造函数
	Person(String n) {
		name = n;
	}
	public void eat() {
		System.out.println("我叫"+name+"年龄"+age+"喜欢吃西瓜!");
	}
}
public class Construction1 {
	public static void main(String[] args) {
		Person person = new Person("xiaoli");
		person.eat();
	}
}

使用有参构造方法,创建对象的同时需要接受参数,如果没有参数,就会报错。


构造方法的方法重载与方法重写注意事项:
切记一句话:构造方法是可以重载的,但是不能重写
**原因:**方法的重写,发生在继承关系中,而构造函数不能被继承,所以也就不存在重写一说了,但是构造方法是可以重载的。
与一般的函数一样,构造函数是可以重载的,通过重载,在创建对象时,就可以通过不同的构造方法为不同的属性赋值了。


综上所述,我们来对于构造方法进行一个总结:
当定义一个类的时候,如果这个类中没有定义构造函数,则系统会为该类提供一个默认的无参数的构造函数。如果自己在类中定义了一个带参数的构造函数,则系统的默认无参数构造函数就不会提供,那么创建对象的时候,就不能使用无参数的构造函数了。
特别注意在继承中,子类的构造函数默认是要先调用父类的无参构造方法
如果在子类中调用父类的构造方法,就需要使用super()实现调用父类构造函数的调用,并且super()需要出现在子类构造函数的第地句话。
在创建子类对象的时候,首先要调用父类的无参构造方法,然后才能执行子类自己的构造函数,如果在子类构造函数使用了super(),显示的调用了父类指定的构造函数,则父类的无参构造方法不会执行,如果子类构造函数中没有显示的调用父类的构造函数,则默认执行父类无参数的构造函数。


版权声明:本文为weixin_42322406原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。