java中的构造方法/构造器(constructor)

一、引出构造器(constructor)

构造方法又叫构造器(constructor),是类的一种特殊的方法,主要用于完成对新对象的初始化

对新对象的初始化不是去创建对象,也就是说当使用构造器时,对象已经存在了,但是对象的属性的初始化是由构造器来完成的)

需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做? 这时就可以使用构造器。

二、 基本语法

[修饰符]  方法名(形参列表){

           方法体;

}

三、构造器特点

1)构造器的修饰符可以默认
2)构造器没有返回值
3)方法名 和类名字必须一样3
4)参数列表 和 成员方法样的规则

5)在创建对象时,系统会自动调用该类的构造器完成对  对象 的初始化

四、代码案例快速入门了解构造器

现在要求在创建人类的对象时,就直接指定整个对象的年龄和姓名
 

public class hsp240{
	public static void main(String args[]){
		//当我们new一个对象时,直接通过构造器指定名字和年龄
		//使用构造器时,对象已经存在了,但是对象的属性的初始化是由构造器来完成的
		Person p1 = new Person("lmd", 80);
		System.out.println("p1的属性如下");
		System.out.println("p1对象的属性name" + p1.name);
		System.out.println("p1对象的属性age" + p1.age);

	}
}

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

五、构造器的注意事项和细节

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

   比如:我们可以给上面代码中的Person类再定义一个构造器,用来创建对象的时候,只指定人       名,不需要指定年龄


public class hsp240{
	public static void main(String args[]){
		//当我们new一个对象时,直接通过构造器指定名字和年龄
		//使用构造器时,对象已经存在了,但是对象的属性的初始化是由构造器来完成的
		Person p1 = new Person("lmd",80);
		System.out.println("p1的属性如下");
		System.out.println("p1对象的属性name" + p1.name);
		System.out.println("p1对象的属性age" + p1.age);
		Person king = new Person("lmd");
		System.out.println("king的属性如下");
		System.out.println("king对象的属性name" + king.name);


	}
}

//在创建人类的对象时,就直接指定整个对象的年龄和姓名
//
class Person{
	String name;
	int age;
	//第一个构造器
	public Person(String pName, int pAge){
		System.out.println("构造器被调用,完成对象属性的初始化");
		//初始化属性
		name = pName;
		age = pAge;
	}

	//第二个构造器
	//形参列表与第一个构造器的不同,形成了构造器重载
	public Person(String pName){
		System.out.println("构造器被调用,完成对象属性的初始化");
		//初始化属性
		name = pName;
	}
}

2、在创建对象时,系统会自动调用该类的构造器完成对  对象 的初始化,但是自己不能去调用

//系统自动调用
Person p1 = new Person("lmd",80);
//但是自己不能调用构造器 
//p1.Person();//错误

3、若程序员没有定义构造器,系统会默认给  类  生成一个默认无参构造器(也叫默认构造器)

public class hsp240{
	public static void main(String args[]){
      Dog d = new Dog();
    }
}

class Dog{
	//若程序员没有定义构造器,系统会默认给  类  生成一个默认无参构造器(也叫默认构造器)
	/*
	默认构造器
	Dog(){
	  
	}
	 */
}

4、一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,

     除非自己显式的定义一下  Dog(){} 

 

public class hsp240{
	public static void main(String args[]){
        Dog d = new Dog();//这里使用的是默认无参构造器,但此时因为已经定义了一个构造器
        //默认构造器被覆盖,这里就会报错
        //若仍想使用默认构造器,需要显式地去定义一下
	}
}

class Gog{
	//若程序员没有定义构造器,系统会默认给  类  生成一个默认无参构造器(也叫默认构造器)
	/*
	默认构造器
	Dog(){
	  
	}
	 */
	
	//一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,
    //除非自己显式的定义一下  Dog(){} 
    public Dog(String dName){
        //默认构造器已被覆盖
    } 

    Dog(){//自己显式的定义一下  Dog(){} 

    }
     
}

六、练习

1、定义一个无参构造器,利用构造器设置所有人地age属性初始值均为18

2、建一个带pName和pAge两个参数的构造器,使得每次创建Person对象的同时
    初始化对象的age属性和name属性

public class hsp243{
	public static void main(String args[]){
		Person p1 = new Person();
		System.out.println("p1的属性如下" + p1.age + " " +  p1.name);//18 null
		Person p2 = new Person("lmd",22);
		System.out.println("p2的属性如下" + p2.age + " " +  p2.name);//22 lmd
	}
}
class Person{
	String name;
	int age;
	//1、定义一个无参构造器,利用构造器设置所有人地age属性初始值均为18
	public Person(){
		age = 18;
	}

	//2、创建一个带pName和pAge两个参数的构造器,使得每次创建Person对象的同时
	//   初始化对象的age属性和name属性,
	public Person(String pName,int pAge){
		name = pName;
		age  = pAge;
	}
}

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值