Java新手小白入门篇 Java面向对象(二)

一、构造方法
1. 知识点概括
构造方法:又称构造函数、构造器、构建器
与类同名,没有返回值类型的方法叫构造方法
作用:帮助完成对象的创建并对属性(成员变量)进行初始化
使用:当(new)创建对象(实例化)时,会自动调用对应的构造方法
构造方法也是方法的一种,有些特殊,但是一样可以重载
构造方法的定义特殊
构造方法的调用特殊
Java编译器默认会提供一个无参构造,但是如果自定义了构造方法,默认的无参构造会被覆盖,如果需要用到无参构造需要手动添加
2. 构造方法的结构(如何定义构造方法)

在这里插入图片描述
与类同名,没有返回值类型的方法,可以含参可以不含参

 
public class Student {
    // 构造方法
    Student() {}
}
3. 调用构造方法请添加图片描述
public class Student {
    // 构造方法
    Student() {
        System.out.println("Student的无参构造");
    }
}

 

public class ConstructTest {
    public static void main(String[] args) {
        Student  s1 = new Student();
    }
}
4. 默认提供一个无参构造
Java编译器默认会提供一个无参构造,但是如果自定义了构造方法,默认的无参构造会被覆盖,如果需要用到无参构造需要手动添加

Java编译器默认会提供一个无参构造

public class Student {

}

public class ConstructTest {
    public static void main(String[] args) {
        Student  s1 = new Student();
    }
}
如果自定义了构造方法,默认的无参构造会被覆盖请添加图片描述

 

有此可见,本来存在的无参构造,经过我们添加了一个有参构造后,消失了,导致我们new对象的时候,调用不到了,这样就能间接的证明我们的观点: 如果自定义了构造方法,默认的无参构造会被覆盖

错误代码:

public class Student {
    Student(String stuId) {
        System.out.println("有参构造方法");
    }
}

public class ConstructTest {
    public static void main(String[] args) {
        Student  s1 = new Student(); // 报错 - 编译错误
    }
}
5. 构造方法的主要作用
构造方法的主要作用就是为了给成员变量赋初始值

请添加图片描述
public class Student {   

// 成员变量 - 属性/特征
    String stuId; // 学号
    String name; // 名字
    int age; // 年龄
    String address; // 地址
    // 构造方法(有参构造)
    Student(String stuId,String name,int age,String address) {
        this.stuId = stuId;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    void sayHi(){
        System.out.println("大家好,我的学号是" + stuId + ",我叫"+name+",今年"+age+"岁了,家住"+address);
    }
}

 

public class ConstructTest {
    public static void main(String[] args) {
        Student  s1 = new Student("JSD2207080101","zs",18,"沈阳");
        s1.sayHi();
    }
}
二、this 关键字
思考:上面的代码中我们使用了 this 这样一个关键字 ,那这个关键字起到了什么作用呢?请添加图片描述

 

这里首先涉及到了Java中变量的使用:
成员变量和局部变量相同名称时,默认采用就近原则(谁离得近使用的就是谁)
但是由于我们构造方法是想给成员变量赋初始值,为了区分,我们可以使用 this 关键字

this 指代的是当前对象,哪个对象调用方法指的就是哪个对象

this.成员变量
访问成员变量
当成员变量和局部变量同名时,如果想访问成员变量,不能省略this
this.方法名()
调用方法(一般不用)
this()
调用构造方法(一般不用)
在构造方法里,必须放置在构造方法的第一行
三、内存结构初识
内存结构:JVM


new出来的对象(成员变量,数组的元素)

局部变量(方法的参数)
基本类型存储的是值
引用类型存储的是内存中的地址(指的是对应对象的内存地址)在这里插入图片描述

内存图

请添加图片描述
四、null 和 NullPointerException
1. null
null 表示空,没有指向任何对象

请添加图片描述

 


2. NullPointerException
当引用的值为 null 时,该引用不能进行任何 点 操作,若操作会发生NullPointerException

请添加图片描述
五、引用类型数组(上)
基本类型数组
给元素赋值时,直接赋值即可
元素存储的是基本类型对应的值
引用类型数组
给元素赋值时,需要 new 对象
元素存储的是引用类型的内存地址

 请添加图片描述


public class Student {
    // 成员变量 - 属性/特征
    String stuId; // 学号
    String name; // 名字
    int age; // 年龄
    String address; // 地址
    // 构造方法(有参构造)
    Student(String stuId,String name,int age,String address) {
        this.stuId = stuId;
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

public class StudentTest {
    public static void main(String[] args) {
        int a = 5;
        Student s = new Student("JSD2207080101","zs",18,"沈阳");
        int[] arr = {1,3,5};
        Student[] students = new Student[3];
        students[0] = new Student("JSD2207080102","ls",20,"大连");
        students[1] = new Student("JSD2207080103","ww",18,"铁岭");
        students[2] = new Student("JSD2207080104","zl",27,"抚顺");
    }
}
六、拓展
1. 成员变量与局部变量的区别

在这里插入图片描述
2. 创建对象的流程
Student s = new Student(); // 短短这行代码发生了很多事情

把 Student .class 文件加载进内存
在栈内存中,开辟空间,存放引用变量 s
在堆内存中,开辟空间,存放 Student 对象
对成员变量进行默认的初始化
对成员变量进行显示初始化
执行构造方法(如果有构造代码块,就先执行构造代码块再执行构造方法)
堆内存完成
把堆内存的地址值赋值给变量 s ,s 就是一个引用变量,引用了 Student 对象的地址值
七、练习题
1. 习题
1.1 NullPointerException 练习
编写一段代码,运行后可以出现 NullPointerException 这样一个异常
1.2 构造方法 练习
编写一段代码,证明构造方法可以重载
编写一段代码,证明 new对象 时自动调用构造方法
编写一段代码,证明创建一个有参的构造函数,默认的无参的构造函数就被替代掉了
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值