JAVA 构造器

构造器/构造方法

概念:构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。它有几个特点

  • 方法名和类名相同
  • 没有返回值
  • 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化

基本语法

[修饰符] 方法名(形参列表){
    方法体;
}
  1. 构造器的修饰符可以默认, 也可以是 public protected private
  2. 构造器没有返回值
  3. 方法名和类名字必须一样
  4. 参数列表和成员方法一样的
  5. 构造器的调用, 由系统完成
package Constructor_Practice;

public class Constructor01 {
	public static void main(String[] args) {
		//当我们new 一个对象时,直接通过构造器指定名字和年龄
		Person p1 = new Person("小龙",21);
		System.out.println("姓名:"+p1.name + "\n" + "年龄:"+p1.age);
		//姓名:小龙 ,年龄:21
	}
}


//在创建人类的对象时,就直接指定这个对象的年龄和姓名
class Person{
	String name;
	int age;
	
	//构造器	
	//1.构造器没有返回值,也不能写void
	//2.构造器的名称和类名Person一样
	//3.(String pName,int pAge) 是构造器形参列表,规则和成员方法一样
	public Person(String pName,int pAge) {
		//用传进来的值,完成对象属性的初始化。
		System.out.println("构造器被调用~~");
		name = pName;
		age = pAge;
	}
	
}

注意事项和使用细节

  1. 一个类可以定义多个不同的构造器,即构造器的重载

    • 例如:可以只给姓名,不给年龄
  2. 构造器名和类名要相同

  3. 构造器没有返回值

  4. 构造器是完成对象的初始化,并不是创建对象

  5. 在创建对象时,系统自动的调用该类的构造方法

  6. 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器),比如Person(){}

  7. 一旦定义了一个自己的构造器,默认的构造器就覆盖了,就不能使用默认的无参构造器。(非常重要记下来)

    • 除非显示的定义一下:Dog(){}

例如:

package Constructor_Practice;

public class ConstructorDetail {
	public static void main(String[] args) {
		Ps p1=new Ps("king",21);//第一个构造器
		Ps p2=new Ps("tom");//第二个构造器
		//自动调用构造方法
		
		//Dog dog1 = new Dog(); 这里使用的无参构造器
		//如果使用了自己创建的构造器,那么必须进行传值才能创建对象
		Dog dog1 = new Dog();
		Dog dog2 = new Dog("小张");
		
	}
}

class Dog{
//	如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器)
	/*
	 * Dog(){
	 * 
	 * }
	 */
	String name;
	public Dog(String dName) {
		dName = name;
	}
	//显示的定义一下:无参构造器
	//相当于方法的重载
	Dog(){
		
	}
}

class Ps{
	String name;
	int age; //默认值
	
	//第一个构造器	
	public Ps (String pName,int pAge) {
		pName = name;
		pAge = age;
	}
	
	//第二个构造器,只指定名字,构成构造器的重载
	public Ps (String pName) {
		pName = name;
	}
}

练习

题目:

  1. 第一个无参构造器:利用构造器设置所有人的 age 属性初始值都为 18

  2. 第二个带 pName 和 pAge 两个参数的构造器:使得每次创建 Person 对象的同时初始化对象的 age 属性值和 name 属性值。 分别使用不同的构造器,创建对象

package Constructor_Practice;

public class ConstructorExercise {
	public static void main(String[] args) {
		Tool p1 = new Tool();
		System.out.println("无参构造器 姓名:"+p1.name);//null
		System.out.println("无参构造器 年龄:"+p1.age);//18
		Tool p2 = new Tool("大龙",21);
		System.out.println();
		System.out.println("构造器 姓名:" + p2.name);//大龙
		System.out.println("构造器 年龄:" + p2.age);//21
	}
}

class Tool {
	String name;
	int age;
	
	
	//构造器一
	Tool(){
		age = 18;
	}
	
	//构造器二	
	public Tool(String tName,int tAge) {
		name = tName;
		age = tAge;
	}
}

对象的创建流程

流程分析

  1. 加载Person类信息(Person.class),只会加载一次
  2. 在堆中分配空间(地址)
  3. 完成初始化,把成员变量赋为初始化
    • 默认初始化 age = 0,name = null
    • 显示初始化 age = 90,name = null
    • 构造器初始化 age = 20 ,name = “小倩”
  4. 在对象的堆中地址,返回给p(p是对象名/对象引用)
posted @ 2022-01-21 12:21  DL50  阅读(42)  评论(0编辑  收藏  举报