Nrich's blog Nrich's blog
首页
  • Java
  • Golang
  • 深度学习
  • Git
  • Linux
  • DataStructure
  • CloudNative
  • Redis
  • MySQL
  • 路由劫持
GitHub (opens new window)

Nrich

小聪明
首页
  • Java
  • Golang
  • 深度学习
  • Git
  • Linux
  • DataStructure
  • CloudNative
  • Redis
  • MySQL
  • 路由劫持
GitHub (opens new window)
  • Java

    • 黑马Java入门基础-学习笔记

      • Java 基础语法
      • 数组
      • 方法
      • 面向对象基础
        • 1. 类和对象
          • 1.1 类和对象的理解
          • 1.2 类的定义
        • 2. 对象内存图
          • 2.1 多个对象内存图
          • 2.2 多个对象指向相同内存图
          • 2.3 垃圾回收
        • 3. 构造器
          • 3.1 构造器的作用
          • 3.2 构造器的分类
        • 4. this 关键字
        • 5. 封装
          • 5.1 什么是封装
          • 5.2 封装的实现步骤
          • 5.3 封装的好处
        • 6. 标准 JavaBean
        • 7. 成员变量和局部变量
          • 7.1 成员变量和局部变量的区别
      • 常用API(String、ArrayList)
      • 面向对象进阶1(static、单例、代码块、继承)
      • 面向对象进阶2(包、权限修饰符、抽象类、接口)
      • 面向对象进阶3(多态、内部类、常用API)
      • 面向对象进阶4(常用日期API、正则、Arrays类、Lambda)
      • 面向对象进阶5(集合体系)
      • 面向对象进阶6(集合体系之Map)
      • 面向对象进阶-补充(可变参数)
    • 面向对象
    • 常用API
    • 并发、并行、异步、同步(暂存)
    • 《Spring Boot 进阶-郑天民》

  • GoLang

  • 开发
  • Java
  • 黑马Java入门基础-学习笔记
Nrich
2023-01-29
目录

面向对象基础

# 面向对象基础

# 1. 类和对象

# 1.1 类和对象的理解

客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。

  • 类
    • 类的理解
      • 类是对现实生活中一类具有共同属性和行为的事物的抽象
      • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
      • 简单理解:类就是对现实事物的一种描述
    • 类的组成
      • 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
      • 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
  • 类和对象的关系
    • 类:类是对现实生活中一类具有共同属性和行为的事物的抽象,是对象共同特征的描述
    • 对象:是能够看得到摸的着的真实存在的实体,是真实存在的具体实例
    • 简单理解:类是对事物的一种描述,对象则为具体存在的事物

# 1.2 类的定义

类的组成是由属性和行为两部分组成

  • 属性:在类中通过成员变量来体现(类中方法外的变量)
  • 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)

⚠️ 补充注意事项:

  • 类名首字母建议大写,且有意义,满足“驼峰模式”。

  • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。 实际开发中建议还是一个文件定义一个class类。

  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。

    • 对象的成员变量的默认值规则:

    • 数据类型 明细 默认值
      基本类型 byte、short、char、int、long 0
      基本类型 float、double 0.0
      基本类型 boolean false
      引用类型 类、接口、数组、String null

# 2. 对象内存图

# 2.1 多个对象内存图

  • 对象的成员方法不直接加载到堆内存中,而是在堆内存中引用方法区中的内容。
  • 对象的成员变量存储值在堆内存中修改。

image-20230129154403005

  • 执行到第二个对象创建时,在堆内存中再开辟一个新的空间存此新对象。

image-20230129155629674

总结:

  • 对象放在堆内存中。
  • Car c = new Car(); 语句中,c 变量名中存储的是对象在堆内存中的地址。
  • 成员变量(name、price)的数据放在对象中,存在堆内存中。

# 2.2 多个对象指向相同内存图

image-20230129160159915

总结:

  • 当多个对象的引用指向同一个内存空间(变量所记录的地址值是一样的)

  • 只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

# 2.3 垃圾回收

  • 当堆内存中的类对象或数组对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。

    • 如上图中若代码中后续还有 s1=null; s2=null; ,会导致左侧两条指向堆内存中对象存储区域的红线不存在,此时堆内存的白色区域变成了内存垃圾。
  • Java 存在自动垃圾回收器,会定期进行清理。

# 3. 构造器

# 3.1 构造器的作用

初始化类的对象,并返回对象的地址。

# 3.2 构造器的分类

  • 无参数构造器

    • (默认存在的):初始化对象时,成员变量的数据均采用默认值。
  • 有参数构造器

    • 在初始化对象的时候,同时可以为对象进行赋值。

⚠️ 注意事项:

  • 任何类定义出来,默认就自带了无参数构造器,写不写都有。

  • 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。

public class Car {
    ...
    // 无参数构造器(此时需要明确写出来)
    public Car(){
        
    }
    // 有参数构造器
    public Car(String n, String b){
        
    }
}
1
2
3
4
5
6
7
8
9
10
11

# 4. this 关键字

  • 作用
    • 代表当前对象的地址
  • this关键字在构造器中、成员方法中可以做什么
    • 可以用于访问当前对象的成员变量

# 5. 封装

# 5.1 什么是封装

  • 面向对象的三大特征:封装,继承,多态

  • 隐藏实现细节,暴露出合适的访问方式。(合理隐藏、合理暴露)

# 5.2 封装的实现步骤

  • 一般对成员变量使用 private (私有)关键字修饰进行隐藏,private 修饰后该成员变量就只能在当前类中访问。

  • 提供 public 修饰的公开的 getter、setter 方法暴露其取值和赋值。

    • IDEA 中可以自动生成 getter、setter 方法

方法和哪个对象封装在一起怎么确定 ?

方法导致谁的属性变化,该方法就属于哪个对象

# 5.3 封装的好处

  • 加强了程序代码的安全性。
  • 适当的封装可以提升开发效率,同时可以让程序更容易理解与维护。

# 6. 标准 JavaBean

JavaBean: 也可以理解成实体类,其对象可以用于在程序中封装数据。

标准JavaBean须满足如下要求:

  • 成员变量使用 private 修饰。
  • 提供每一个成员变量对应的 setXxx() / getXxx()。
  • 必须提供一个无参构造器。

# 7. 成员变量和局部变量

# 7.1 成员变量和局部变量的区别

区别 成员变量 局部变量
类中位置不同 类中,方法外 常见于方法中
初始化值不同 有默认初始化值 没有,使用之前需要完成赋值
内存中位置不同 堆内存 栈内存
生命周期不同 随着对象的创建而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的运行结束而消失
作用域 (不一定) 在所归属的大括号中
编辑 (opens new window)
上次更新: 2023/01/29, 08:40:33
方法
常用API(String、ArrayList)

← 方法 常用API(String、ArrayList)→

最近更新
01
YAML、Pod、Job、CronJob、ConfigMap、Secret
06-06
02
Kubernetes 的安装与基本架构
06-04
03
初识容器
05-30
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Nrich | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式