[学习笔记] 面向对象_构造方法

本文介绍了构造方法的概念,包括其在对象初始化中的作用,以及如何通过无参和有参构造方法进行对象创建。文章还详细讲解了构造方法的重载,展示了如何在构造方法中调用其他构造方法,并强调了构造方法在类设计中的重要性,如默认构造方法的保留和私有构造方法的应用场景。
摘要由CSDN通过智能技术生成

一、构造方法的定义

什么是构造方法
1、构造方法就是类构造对象时调用的方法,用于对象的初始化工作;
2、构造方法是实例化一个类的对象时,也就是new 的时候,最先调用的方法

构造方法的定义:
构造方法是在类中定义的,构造方法的定义格式方法名称与类名称相同,无返回值类型的声明
对象的实例化语法:
Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了。

二、构造方法

1.构造方法重载-无参与有参

①无参构造方法:

public Dog(){}

/**
  构造方法:在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明
  对象的实例化语法:
	Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了
*/
public class test002{
	public static void main(String[] args){
		Dog dog = new Dog();
		
	}
}
class Dog{
	//默认的构造方法   无参
	public Dog(){
		System.out.println("构造方法被使用了");
	}

		//属性是成员变量
		private String name;
		private int age;

		//setter   对外提供一个为name属性设值的方法
		public void setName(String name){
			this.name = name; 	//就近原则,第二个name是setName()里面的name, this. :当前对象。 所以第一个name是对象h的name.
		}
		
		//getter   对外提供一个获取name属性的方法
		public String getName(){
			return name;		//返回name的参数
		}
		public void setAge(int age){
			this.age = age;
		}
		public int getAge(){
			return age;
		}
}

在这里插入图片描述

②有参构造方法:

带一个参数的构造方法:
public Dog(String name){
this.name = name;
}

带多个参数的构造方法:
public Dog(String name,int age){
this.name = name;
this.age = age;
}

/**
  构造方法:在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明
  对象的实例化语法:
	Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了
*/
public class test002{
	public static void main(String[] args){
		Dog dog = new Dog();
		Dog dog1 = new Dog("我是Shy_boy",18);
	}
}
class Dog{
	//默认的构造方法   无参
	public Dog(){
		System.out.println("构造方法被使用了");
	}
	//构造方法的重载 
	//有参
	public Dog(String name,int age){
		this.name = name;
		this.age =age;
		System.out.println("有参的构造方法被执行了");
		
	}
	
	
		//属性是成员变量
		private String name;
		private int age;

		//setter   对外提供一个为name属性设值的方法
		public void setName(String name){
			this.name = name; 	//就近原则,第二个name是setName()里面的name, this. :当前对象。 所以第一个name是对象h的name.
		}
		
		//getter   对外提供一个获取name属性的方法
		public String getName(){
			return name;		//返回name的参数
		}
		public void setAge(int age){
			this.age = age;
		}
		public int getAge(){
			return age;
		}
}

在这里插入图片描述

2、调用有参构造方法

/**
  构造方法:在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明
  对象的实例化语法:
	Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了
*/
public class test002{
	public static void main(String[] args){
		Dog dog = new Dog();
		Dog dog1 = new Dog("我是Shy_boy",18);
	}
}
class Dog{
	//默认的构造方法,在有其他的构造方法时,建议保留并写出默认的构造方法    无参
	public Dog(){
		System.out.println("默认的构造方法被使用了");
	}
	//构造方法的重载 
	//有参
	public Dog(String name){
		System.out.println("只有一个参数的方法执行了");
	}
	public Dog(String name,int age){
		this(name);//调用只有一个参数的方法,注意,只能放在第一行
		this.name = name;		
		this.age =age;
		System.out.println("有两个参数的构造方法执行了");
		
	}
	
	
		//属性是成员变量
		private String name;
		private int age;

		//setter   对外提供一个为name属性设值的方法
		public void setName(String name){
			this.name = name; 	//就近原则,第二个name是setName()里面的name, this. :当前对象。 所以第一个name是对象h的name.
		}
		
		//getter   对外提供一个获取name属性的方法
		public String getName(){
			return name;		//返回name的参数
		}
		public void setAge(int age){
			this.age = age;
		}
		public int getAge(){
			return age;
		}
}

在这里插入图片描述
因为语法的限制,调用的语句要放在第一行,否则报错,无法调用
构造方法之间的调用,必须要有出口,不然会导致一直在调用,陷入循环

/**
  构造方法:在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明
  对象的实例化语法:
	Dog dog = new Dog(); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了
*/
public class test002{
	public static void main(String[] args){
		Dog dog = new Dog();
		Dog dog1 = new Dog("我是Shy_boy",18);
	}
}
class Dog{
	//默认的构造方法,在有其他的构造方法时,建议保留并写出默认的构造方法    无参
	public Dog(){
		System.out.println("默认的构造方法被使用了");
	}
	//构造方法的重载 
	//有参
	public Dog(String name){
		System.out.println("只有一个参数的方法执行了");
	}
	public Dog(String name,int age){
		//调用只有一个参数的方法,注意,只能放在第一行
		this.name = name;		
		this.age =age;
		System.out.println("有两个参数的构造方法执行了");
		this(name);
	}
	
	
		//属性是成员变量
		private String name;
		private int age;

		//setter   对外提供一个为name属性设值的方法
		public void setName(String name){
			this.name = name; 	//就近原则,第二个name是setName()里面的name, this. :当前对象。 所以第一个name是对象h的name.
		}
		
		//getter   对外提供一个获取name属性的方法
		public String getName(){
			return name;		//返回name的参数
		}
		public void setAge(int age){
			this.age = age;
		}
		public int getAge(){
			return age;
		}
}

在这里插入图片描述

三、构造方法小结

(1)构造方法名称与类名相同,没有返回值声明(包括 void)
(2)构造方法用于初始化数据(属性)
(3)每一个类中都会有一个默认的无参的构造方法
(4)如果类中有显示的构造方法,那么默认构造方法将无效
(5)如果有显示的构造方法,还想保留默认构造 方法,需要显示的写出来。
(6)构造方法可以有多个,但参数不一样,称为构造方法的重载
(7)在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句
(8)构造方法之间的调用,必须要有出口。
(9)给对象初始化数据可以使用构造方法setter方法通常情况下,两者都会保留
(10)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)
(11)private Dog(){},构造方法私有化,当我们的需求是为了 保证该类只有一个对象时。
什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。
权衡只用一个对象与产生多个对象的内存使用,来确定该类是否要定义为只需要一个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值