面向对象-类与对象、封装、this关键字

一、面向对象概述

1. 面向过程思想

  • 回想我们在最初设计一个程序的时候,先要分析我们要完成什么功能,完成这个功能需要具体哪些步骤,每个步骤又如何实现,最后通过代码做出来。在这个过程中,每一步都需要我们亲自去实现和操作,这些步骤配合起来完成了程序需要的功能。这个就是面向过程开发,就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成具体需求。

2. 面向对象思想

  • 面向过程设计当需求单一,设计简单时没多大问题,可是当需求变多,功能复杂时就很麻烦了,那么我们能不能将具体的步骤和方法封装起来这样子结构就清晰多了,需要的时候我们直接调用就好了,这样子就很方便
  • 面向对象思想特点
    • 更符合人的思想习惯
    • 将复杂的事情简单化
    • 将程序员从执行者转变为指挥者
  • 举例:在面向过程中,喝水大致可以分为这几个阶段(拿起杯子-拧开瓶盖-仰头喝),每一个阶段都要我们去实现,很麻烦。而在面向对象中,我们只需要定义一个“人”这个对象,然后调用“人”这个对象的“喝水”方法,就完成了这个功能,至于内部代码细节是如何实现的,我们不必理会。

二、类

1. 类的概述

  • 什么是类
    在现实生活中,我们描述事物的时候主要从特征和功能两个方面,编程也是从生活而来的,在Java中,我们把某一些具有相同特征与功能的事物抽取出来,叫做一个类,这些事物具有的相同特征叫做类的属性,相同功能叫做类的方法,定义一个类其实就是定义一个类的成员

2. 类的成员

  • 成员变量
    和以前定义变量的方式一样,不过位置不再放在方法中,而是方法类中方法外
  • 成员方法
    和以前定义方法一样,描述类的功能

3. 类的创建

  • 格式

    修饰符 class 类名{
    成员变量1;
    成员变量2;
    ……
    成员方法1;
    成员方法2;
    ……
    }
    
  • 注意:一个Java class文件里最好只写一个类,类名与文件名一致

三、对象

1. 类与对象

  • 类是一类具有相关属性和行为的事物的集合(抽象)
  • 对象是该类事物的一个具体体现(具体)
  • 举例
    • 学生是一个类,是一个具有相同属性和方法的集合
    • 学生张三是一个对象,是一个人具体的人,是学生类的一个具体体现

2. 对象的创建

  • 格式
    • 类名 对象名 = new 类名();
  • 成员变量的使用
    对象名.成员变量名;
  • 成员方法的使用
    对象名.成员方法名(……)

3. 对象的内存图

  • 一个对象的内存图
    一个对象的内存图
  • 两个对象的内存图
    两个对象的内存图
  • 三个对象的内存图
    在这里插入图片描述

4. 成员变量与局部变量区别

  • 在类中的位置:成员变量在类中方法外,局部变量在方法中或方法定义上(形参)
  • 在内存中的位置:成员变量在堆内存中,局部变量在栈内存中
  • 生命周期:成员变量随着对象的创建而创建,随对象的消失而消失;局部变量随着方法的调用而产生,随着方法的结束而消失
  • 初始值:成员变量有默认的初始值,可以直接使用,局部变量没有,必须赋值后才能使用
  • 注意:在方法使用的时候,如果局部变量与成员变量名称一样的话,采用就近原则,使用局部变量

5. 方法的形参类型对实参的影响

  • 形参是基本类型:形参的改变不会影响实参,因为实参传的是具体的值,局部变量形参会随着方法的结束而消失
  • 形参是引用类型:形参的改变直接影响实参,因为实参传的是地址,形参和实参共同对同一块内存空间操作
  • 注意:如果方法的形参是一个类类型,那么其实传的是这个类的一个对象,也是地址值(引用类型)

6. 匿名对象

  • 就是没有声明变量名称的对象
  • 应用场景
    • 调用方法:仅仅只调用一次,因为匿名对象没有变量名,使用一次之后就找不到了
    • 作为实参传递

四、封装

1.封装概述

  • 为什么要封装
    因为在类的成员变量中,如果将成员设为public(即公开的),那么就难免接收到一些非法数据,造成数据的安全隐患,这时我们就要将类的一些成员的实现细节隐藏起来,只提供给外界我们想被访问的公开访问方式,以提高安全性
  • 封装定义
    值隐藏对象的属性和实现细节,仅对外提供公共访问方式
  • 封装优点
    • 隐藏实现细节,提供公共访问方式
    • 提高代码复用性
    • 提高安全性
  • 封装原则
    将不需要对外提供的内容都隐藏起来,把属性隐藏,提供公共方法对其访问

2. private关键字

  • 使用方法

    • 权限修饰符,意为私有的
    • 可以修饰成员变量和成员方法,不能修饰类
    • 被修饰的成员只能在本类中使用
  • 应用
    将成员变量用private修饰,使其变为类私有的,提供成员变量对外的get变量名()和set变量名(),用来实现对成员变量的输入输出

  • 举例

    public String model;
    
    public String getModel() {
        return model;
    }
    
    public void setModel(String model) {
        this.model = model;
    }
    

3. this关键字

  • 为什么要有this关键字
    当局部变量与成员变量重名时,在方法中由于就近原则,会出现局部变量隐藏成员变量的情况
  • this关键字的含义
    this关键字其实就是指代的当前关键字,简单来说,谁调用this就指的谁
  • 语法
    • 调用成员变量:this.成员变量
    • 调用成员方法:this.成员方法
  • 举例
    public String name;
    //当调用show方法,会输出局部变量name,成员变量会被隐藏
    public void show(String name) {
        System.out.println(name);
    }
    
    public String name;
    //当调用show方法,会输出成员变量name
    public void show(String name) {
        System.out.println(this.name);
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值