java学习笔记14:构造方法详解、构造方法重载

本文详细介绍了Java中的构造方法,包括其作用、特点和使用规则。构造方法是对象初始化的关键,通常通过new关键字调用。如果没有定义构造器,Java会自动添加一个无参构造函数。对象创建分为分配空间、初始化、执行构造方法和返回对象地址四个步骤。此外,文章还探讨了构造方法的重载,指出构造方法可以像普通方法一样进行重载,以满足不同参数需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。
  
  声明格式:

        [修饰符] 类名(参数列表){
            //n条语句
        }

一、构造方法

1、构造器也叫构造方法(constructor),用于对象的初始化。
  注:构造器也是方法,方法的特性也适用于构造方法。
  
  要点:
    1、通过new关键字调用;
    2、构造器虽然有返回值,但是 不能定义返回值类型(返回值类型肯定是本类),
      不能在构造器里使用return返回某个值;
    3、如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数;
      如果已定义则编译器不会自动添加;
    4、构造器的方法名必须和类面一致。

2、例子如下:

/**
 * @ClassName: point
 * @Description: TODO(点类,用来描述二维的一个点)
 */
class Point{ 
	double x, y;    //类型相同,一行可以命名多个成员变量,命名坐标x和y
	
	//这是一个构造方法,构造方法名称必须和类名保持一致
	public Point(double _x, double _y) {    //若写double x, double y。 则需要使用this关键字进行区别
		x = _x;
		y = _y;
		return;    //此处return只代表结束方法的运行,不代表有返回值,可以不写
	}
	
	/**
	 * @Title: getDistance  
	 * @Description: TODO(测量距离的方法)  
	 */
	public double getDistance(Point p) {    //把另一个点传进来
		return Math.sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));    //Math的开方函数sqrt()
	}
}

/**
 * @ClassName: TestConstructor
 * @Description: TODO(测试构造器(构造方法))
 */
public class TestConstructor {

	/**  
	 * @Title: main  
	 */
	public static void main(String[] args) {
	
    //新建对象调用构造方法,把3.0、4.0传给了构造方法,通过构造器把3.0、4.0传给了Point类的属性
    Point p =new Point(3.0, 4.0);   
		
    //原点origin,调用构造方法创建了新的对象
    Point origin = new Point(0.0, 0.0);    
    
    //打印p.getDistance(origin),算两点的距离
    System.out.println(p.getDistance(origin));    
	}
}

运行结果:
代码运行后的结果5.03、雷区:
  
  对象的创建完全是由构造方法实现的吗?
  
  构造方法是java创建对象的重要途径。通过new关键字调用构造器时,构造器也确实返回了该类对象但这个对象并不完全由构造器负责创建的。
  
  创建一个对象分如下四步:
    1、分配对象空间,并将对象成员变量初始化为0或空;
    2、执行属性值的显示初始化;
    3、执行构造方法;
    4、返回对象的地址给相关的变量。

二、构造方法的重载

1、构造方法也是方法,只不过有特殊的作用而已,与普通方法一样,构造方法也可以重载。

注:构造方法经常需要重载。
  方法的重载:方法名称相同,参数列表不同。
  
2、例子如下:

/**
 * @ClassName: User
 * @Description: TODO(构造方法的重载)
 */
public class User {

	int id;    //id
	String name;    //账户名
	String pwd;    //密码
	
	public User(){
		
	}
	
	public User(int id, String name) {
	
		//super();    //构造方法的第一句总是super(),可以去掉,编译器会自动给
		
		//右侧这个id用的是public User方法里的局部id,就近原则,谁离得近用谁,而不是成员变量int id
		this.id = id;    
		
		//this表示创建好的对象,this.name表示的是属于public class User的成员变量String name,右侧的name是局部变量,就近原则
		this.name = name;    
	}
	
	public User(int id, String name, String pwd) {
		super();
		this.id = id;
		this.name = name;
		this.pwd = pwd;
	}
	
	/**  
	 * @Title: main  
	 * @Description: TODO(主函数 构造方法的重载)  
	 */
	public static void main(String[] args) {
		User u1 = new User();
		User u2 = new User(11, "Charlie");
		User u3 = new User(11, "Charlie", "123");
	}
}

3、雷区:
  如果方法构造中形参名与属性名相同时,需要使用this关键字区分属性与形参,如上例所示:
  this.id表示属性id,id表示形参id。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值