首页 > 技术文章 > 🥶全套Java教程_Java基础入门教程,零基础小白自学Java必备教程🐱‍009 # 第九单元 封装、构造方法 #

Z777 2021-10-06 18:40 原文

一、本单元知识点概述

(Ⅰ)知识点概述

 

二、本单元目标

(Ⅰ)重点知识目标

1.对象的封装
2.封装的使用
3.构造方法的定义格式

(Ⅱ)能力目标

1.掌握对象的封装
2.掌握封装的使用流程
3.掌握定义构造方法

三、本单元知识详讲

9.1 封装

9.1.1 封装概述★★★

  • 概述:面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

  • 原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

9.1.2 封装的步骤★★★

  1. 使用 private 关键字来修饰成员变量。

  2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。

9.1.3 private的含义★★★★

  1. private是一个权限修饰符,代表最小权限。

  2. 可以修饰成员变量和成员方法。

  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。

9.1.4 private的使用格式★★★★

private 数据类型 变量名 ;

 

  1. 使用 private 修饰成员变量,代码如下:

 

1 public class Student {
2     private String name;
3     private int age;
4 }
  1. 提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:

 

 1 public class Student {
 2     private String name;
 3     private int age;
 4     public void setName(String n) {
 5         name = n;
 6     } 
 7     public String getName() {
 8         return name;
 9     } 
10     public void setAge(int a) {
11         age = a;
12     } 
13     public int getAge() {
14         return age;
15     }
16 }

9.1.5 封装的优化★★★★★

  • this关键字

我们发现 setXxx 方法中的形参名字并不符合见名知意的规定,那么如果修改与成员变量名一致,是否就见名知意 了呢?代码如下:

 1 public class Student {
 2     private String name;
 3     private int age;
 4     public void setName(String name) {
 5         name = name;
 6     } 
 7     public void setAge(int age) {
 8         age = age;
 9     }
10 }

经过修改和测试,我们发现新的问题,成员变量赋值失败了。也就是说,在修改了setXxx() 的形参变量名后,方 法并没有给成员变量赋值!这是由于形参变量名与成员变量名重名,导致成员变量名被隐藏,方法中的变量名,无 法访问到成员变量,从而赋值失败。所以,我们只能使用this关键字,来解决这个重名问题。

  • this的含义

    this代表所在类的当前对象的引用(地址值),即对象自己的引用。

记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

  • this使用格式

this.成员变量名;

使用 this 修饰方法中的变量,解决成员变量被隐藏的问题,代码如下:

 1 public class Student {
 2     private String name;
 3     private int age;
 4     public void setName(String name) {
 5         //name = name;
 6         this.name = name;
 7     } 
 8     public String getName() {
 9         return name;
10     } 
11     public void setAge(int age) {
12         //age = age;
13         this.age = age;
14     } 
15     public int getAge() {
16         return age; 
17     }
18 }

9.2 构造方法

9.2.1 构造方法概述★★★

当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值 .

小贴士:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效

9.2.2 构造方法的定义格式★★★

修饰符 构造方法名(参数列表){
    // 方法体
}     

构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用 构造方法后,代码如下:

 1 public class Student {
 2     private String name;
 3     private int age;
 4     // 无参数构造方法
 5     public Student() {}
 6     // 有参数构造方法
 7     public Student(String name,int age) {
 8         this.name = name;
 9         this.age = age;
10     }
11 } 

注意事项

  1. 如果你不提供构造方法,系统会给出无参数构造方法。

  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。

  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。

四、本单元知识总结

1.对象的封装
2.封装的使用
3.构造方法的定义格式
4.定义构造方法的注意事项

推荐阅读