Java学习 | 面向对象 | 构造方法

构造方法的知识点

  • 构造方法又被称为构造函数/构造器(Constructor)

    • 作用

      • 创建对象
      • 初始化对象属性
    • 语法结构

      • 普通方法的语法结构:

        [修饰符列表] 返回值类型 方法名(形参列表){
        	方法体;
        }
        
      • 构造方法的语法结构:

        [修饰符列表] 构造方法名(形参列表){
        	构造方法体;
        }
        
        • 构造方法名必须与类名相同

        • 构造方法的返回值类型不需要指定,并且也不能写void

          只要写上void等任何返回值类型,那么这个方法就成为普通方法了

          每一个构造方法实际上执行结束后都有返回值,其返回值就是构造方法所在类的实例化对象的内存地址。但我们不需要写“return”这样的语句,因为Java程序会自动帮我们完成这个操作

          构造方法的返回值类型实际上就是构造方法所在类的数据类型。由于构造方法的返回值类型实际上就是类本身,所以返回值类型不需要编写

        • 如果没有定义任何构造方法,系统默认给该类提供一个无参数构造方法,这个构造方法称为缺省构造器

        • 当一个类显式的把构造方法定义出来了,系统就不再默认为这个类提供缺省构造器。建议开发中手动地为当前类提供无参数构造方法

        • 构造方法支持重载机制,在一个类中编写多个构造方法,这多个构造方法显然已经构成方法重载机制

    • 调用

      • 普通方法的调用:
        • 没有static修饰符的普通方法:引用.方法名(实参列表)
        • 有static修饰符的普通方法:类名.方法名(实参列表)
      • 构造方法的调用:new 构造方法名(实参列表)

构造方法的语法结构与调用的测试

package com.diamondk.javase.test02;

public class User {
	// 无参数的构造方法
	public User(){
		System.out.println("User's Default Constructor Invoke");
	}
	// 有参数的构造方法
	// 带有int类型的构造方法
	public User(int i){
		System.out.println("带有int类型的构造器");
	}

	// 有参数的构造方法
	// 带有String类型的构造方法
	public User(String name){
		System.out.println("带有String类型的构造器");
	}

	// 有参数的构造方法
	// 带有int类型和String类型的构造方法
	public User(int i, String name){
		System.out.println("带有int类型和String类型的构造器");
	}
}

package com.diamondk.javase.test02;

public class ConstructorTest01 {
	public static void main(String[] args){
		// 创建User对象
		// 调用User类的构造方法创建User对象
		// 以下程序创建了4个对象,只要构造函数调用就会创建对象,并且一定是在堆内存中开辟内存空间。
		User u1 = new User();
		User u2 = new User(10);
		User u3 = new User("zhangsan");
		User u4 = new User(10, "zhangsan");

		// 调用带有static的方法
		// 类名.方法名(实参列表),在同一个类下可以省略类名
		ConstructorTest01.doSome();
		doSome();

		// 调用不带有static的方法
		// 引用.方法名(实参列表),需要创建对象,通过对象来调用方法
		// 创建ConstructorTest01对象,调用ConstructorTest01()无参数构造方法
		ConstructorTest01 t = new ConstructorTest01();	// 系统默认提供一个无参数构造器(即缺省构造器)
		t.doOther();
	}
	public static void doSome(){
		System.out.println("do some!");
	}
	public void doOther(){
		System.out.println("do other!");
	}
}

构造方法的作用的测试

  • 成员变量之实例变量,属于对象级别的变量,这种变量必须先有对象才能有实例变量。

    实例变量没有手动赋值的时候,系统默认赋值,那么这个系统默认赋值是在什么时候完成的呢?是在类加载的时候吗?

    不是,因为类加载的时候只加载了代码片段,还没来得及创建对象。所以此时实例变量并没有初始化

    实际上,实例变量的内存空间是在构造方法执行过程当中完成开辟的

    系统在默认赋值的时候,也是在构造方法执行过程当中完成的赋值

package com.diamondk.javase.test03;

public class Account {
	// 编号
	private String actno;
	// 金额
	private double balance;

	// 无参数构造器
	public Account(){
		// 初始化实例变量的内存空间
		// actno = null;
		// balance = 0.0;
	}

	// 有参数构造器
	public  Account(String s){
		actno = s;
	}

	public Account(double d){
		balance = d;
	}

	public Account(String s, double d){
		actno = s;
		balance = d;
	}

	// getter and setter
	public String getActno() {
		return actno;
	}

	public void setActno(String actno) {
		this.actno = actno;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}
}
package com.diamondk.javase.test03;

public class ConstructorTest02 {
   public static void main(String[] args){
      // 创建对象
      /*如何查看调用的是哪个方法?
      按住Ctrl键,鼠标移动到需要查看的元素上(包括方法和属性)
      点击后就会跳转到该元素所在代码*/
      Account act1 = new Account();
      System.out.println("账号:" + act1.getActno());      // null
      System.out.println("余额:" + act1.getBalance()); // null

      Account act2 = new Account("110");
      System.out.println("账号:" + act2.getActno());      // 110
      System.out.println("余额:" + act2.getBalance()); // null

      Account act3 = new Account(10000.0);
      System.out.println("账号:" + act3.getActno());      // null
      System.out.println("余额:" + act3.getBalance()); // 10000.0

      Account act4 = new Account("111",10000.0);
      System.out.println("账号:" + act4.getActno());      // 111
      System.out.println("余额:" + act4.getBalance()); // 10000.0
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值