万字浅析Java中的构造方法(构造器)、this关键字、代码块。


一、构造方法

1.1 构造方法是什么

  • 构造方法(构造器) 是类中非常特殊的一类方法,使用关键字new来实例化对象的时候实际上就是调用该类的构造方法(构造器)
  • 虽然它叫构造方法(构造器),但是要和我们的普通方法区分开,二者不是一个东西。
  • 在使用关键字new产生一个对象时,大致分为以下两步:
  1. 为对象在堆中分配空间。
  2. 调用对象的构造方法(构造器)

1.2构造方法的语法规则

  1. 方法名称与类名称完全相同。
  2. 构造方法没有返回值声明,也不用void。
  3. 一个类中至少存在一个构造方法,如果没有显示定义,编译器会自动生成一个默认的无参构造。
  4. 当类中定义了构造方法,默认的构造方法就不再产生。
  • 无参构造:
    代码如下:
public class Test{
   
	public static void main(String[] args){
   
	Person per = new Person();
	}
}
class Person {
   
	private String name;
	private int age;
	
	public Person() {
   
	System.out.println("Person的无参构造");
	}
}

运行结果如下:
在这里插入图片描述
我们可以发现,我们只是产生了一个对象,什么都没有干,但是还是打印输出了一句话。

  • 有参构造:
    代码如下:
    在这里插入图片描述
    我们会发现,此时编译报错,因为我们此时定义了一个有参构造,此时默认的无参构造就不再生成,所以我们需要在产生Person类的对象时传参。构造方法中的参数列表是形参。
    代码如下:
public class Test{
   
	public static void main(String[] args){
   
	Person per = new Person("张三");
	}
}
class Person {
   
	private String name;
	private int age;
	
	public Person(String n) {
   
	name = n;
	System.out.println("Person的无参构造");
	System.out.println(name);
	}
}

运行结果如下:
在这里插入图片描述

1.3内存分析

  1. 当我们Person per = new Person产生一个Person的对象时,先在堆上开辟一个块空间 大小由该类中的成员变量的属性决定。
  2. 调用对象的构造方法为所有成员变量赋值。
  3. 成员变量的默认值就是在构造方法中赋值的,也可以在定义时就为成员变量进行赋值,它也是在构造方法中进行的。
  4. 构造方法由jvm去调用,当构造方法调用结束,该对象就初始化完成,我们无法在程序中手动再次调用构造方法。
  5. 成员变量只有在产生对象时,才会在堆中分配空间。

1.4 构造方法的重载

构造方法可以重载,构造方法就是为了类中的成员变量赋值的,此时的重载只可能参数个数的不同(为不同的成员变量赋值)。
成员变量的类型在类定义时就指定好了,只是初始化的变量个数不同。

public class Test{
   
    public static void main(String[] args){
   
        Person per = new Person("张三");
        Person per1 = new Person("张三",16);
    }
}
class Person {
   
    private String name;
    private int age;

    public Person(String n) {
   
        name = n;
        System.out.println("Person的一个参数的有参构造" );
        System.out.println(name);
    }
    public Person(String n,int a) {
   
        name = n;
        age = a;
        System.out.println("Person的两个参数的有参构造" );
        System.out.println(name);
        System.out.println(age);
    }
}

运行结果如下:
在这里插入图片描述
当然我们也可以在类定义时就为成员变量进行赋值,而后再通过构造方法区修改成员变量的值
代码如下:

public class Test {
   
    public static void main(String[] args) {
   
        Person per = new Person();
        Person per1 = new Person("张三");
        Person per2 = new Person("王五", 20);
    }
}

class Person {
   
    private String name = "李四";
    private int age = 18;

    
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值