面向对象编程(包、类、对象)

Java知识点总结:想看的可以从这里进入

1、 面向对象编程


1.1、OOP

Java的核心思想是面向对象(OOP Object-Oriented Programming),面向对象是一种编程的范式,它通过将数据和操作数据的代码组织为对象,来设计和实现软件。OOP 的主要目标是提高软件的可维护性和可重用性,它适合处理复杂问题,处理多人协作的问题。

面向对象编程的本质是:以类的方式组织代码,以对象的形式封装数据

  • 面向过程强调的是通过一系列步骤来完成某种功能,基本不考虑后续的修改,所以面向过程是具有逻辑性的,它按照一步步的过程来操作,缺少其中一个步骤就可能导致结果发生错误。
  • 而面向对象,更多的是要进行模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。

比如说我们用一个简单的例子来理解面向过程和面向对象:

  • 面向过程:告诉你做饭的每一个步骤,你需要按照指南一步步进行

    1. 准备食材
    2. 处理食材
    3. 炒菜,装盘
    4. 吃饭

    它强调的是操作的步骤,你需要关心每一个步骤的具体实现,按照顺序调用这些步骤来完成最终的目标。

  • 面向对象:面向对象则像是厨师们在厨房里工作。厨房里有不同的“对象”,比如厨师、炒锅、食材等,每个对象都有其特定的职责和行为:

    1. 对象厨师:负责调用其他对象的功能,指挥厨房工作的流程。
    2. 对象炒锅:具有烹饪的功能,可以“炒”食材。
    3. 对象食材:每种食材都有自己的特点

    面向对象的过程中,不需要关心每一步的具体实现细节,只需要知道每个对象的功能和如何调用它们。

    比如,想吃蛋炒饭时,你只需告诉厨师“做一份蛋炒饭”,厨师就会协调炒锅和各种食材,按照各自的职责完成任务。

面向过程更适合解决一些简单、规模小的问题,而面向对象适合解决规模大的问题。

在面向对象编程中,类(Class)和对象(Object)是面向对象的核心概念。它强调的是对象及其职责,通过设计互相协作的对象来解决问题。

比如之前常用的Scanner、Print等,我们只需要知道它们的功能,然后在需要时调用它们即可,并不关心它们怎么实现的,这就是面向对象的好处:一个已经存在的对象,我只需要知道其功能,就能直接拿来使用。

1.2、类和对象

类和对象是面向对象编程(OOP)的两个基本概念。

1.2.1、类

我们可以把类当成一个模板看待,通过这个模板可以量化产生无数的对象,由类构建对象的过程成为创建这个类的实例对象。

类本身不占用内存空间,只有在创建对象时,才会分配内存。可以把类看作是对象的设计图或模具,它是封装对象属性和行为的载体,而对象就是类的一个实例。

类和对象是共生的,我们通过代码编写一个个的类,然后通过类去生成一个个对象,我们通过操作和管理这些对象,最终产生一个复杂的程序。

类主要的两个组成:

  1. 字段(Fields):也称为属性或成员变量,表示对象的状态或特征。例如,人的类可能有姓名和年龄两个字段。
  2. 方法(Methods):表示对象的行为或功能。方法定义了对象可以执行的操作。例如,人的类可能有走路和说话的方法。
1.2.2、对象

那么什么是对象?

万物皆为对象,问题领域中的实体和概念都可以抽象为对象。如在学校领域中:学生、老师、课程、班级等等都可以当成一个对象处理。

  • 对象在一个系统中是唯一的
  • 对象具有属性和行为:静态部分(属性)和动态部分(行为)
    ​ 现实中我们是怎么样描述一个人的?通常是通过名字、高矮胖瘦、性别、年龄等属性。除此之外一般还会描述他当前正在做的事情:说话、跑步、哭泣等等行为。通过这几个方面我们可以充分了解一个人。
    比如张三正在哭,你向别人介绍张三:这人叫张三(属性姓名),都20好几的人了(属性年龄),180的大个子(属性身高),你看,动不动就哭(行为哭泣)。
  • 对象具有状态:某个行为发生后可能会改变属性的取值。
  • 对象都是某个类的具体实现。
比方人是一个类,需要有姓名、年龄、身高、体重等等特征,有跑步、走路、吃饭、学习等等行为。
那么对象呢,假如一个人叫张三,另一个叫李四,这两个他们的特征不同,正在进行的行为也不同,而张三李四就是依据人这个类为模板而生成的不同对象。

我们在计算机中如何准确去描述正在学习的学生A?
1、首先有一个统一的学生类(具有所有学生共用的特征):属性:学号、姓名、年龄、性别、班级等等。	行为:学习、游戏、运动等等
2、我们将学生这个类实例化为一个具体的对象,这时候考虑怎么通过类去区分出来是学生A?
3、先通过属性(姓名:A、学号:1111111、年龄:18、性别:男......),通过这些就能确切的定位到学生A
4、然后再通过行为去描述学生A正在学习。
这样我们通过分析学生的属性和行为就能确定一个具体的学生对象。

1.3、包

在Java中,类是存放在包(package)中的,借助包可以轻松组织代码,便于对类进行区分。

1.3.1、包的定义

在java中我们需要创建不同的类,根据类创建对象去编写程序,所以当我们的类越来越多时,如果将所有的类放在一起,管理的难度可想而知,而且我们的类又是唯一的,当类很多且堆积在一起的情况下,恐怕就连起名字都是一件让人头疼的事情。

所以在Java中引入了包(package)的概念。它类似于文件夹,可提供多层的命名空间,不同包内的类可以重名,因为Java中的类在加载时,是通过 包+类名 来区分的。

包的作用如下:

  1. 目录结构:通过建立不同的包,可以把具有相同功能的类放在同一包中,方便进行管理和维护(如controller、service等等)
  2. 命名空间:Java中类的全限定名为 包路径+类名,可以确保唯一性,避免类名的冲突。
  3. 访问控制:可以更方便的控制类的访问权限
  4. 代码重用:通过将功能相关的类组织到包中,可以更容易地重用代码。其他项目可以通过导入需要的包来使用其中的类和接口,而不必担心命名冲突。

每个类中的第一行代码就是包定义语句,通过关键字package + 类所在的包。后面跟包的导入语句,关键字为import

  1. package:用来指定所属的包,没有该关键字,则类默认属于无名包 ( unnamed package)
    • 类内第一行使用package 关键字指定包名
    • class文件位于对应的路径内
  2. import:入各种包层次下的类。如果想快速导入一个包内的所有类可以使用 * 号。(使用全限定名可以放置不同包内名字相同的问题)
package 包名;			//必须位于源文件第一行,且只能有一个,表示该类所在的包(没有该语句则类位于默认包内)
import 包名+类名;	  //import需要在package之后,可以有多个
import 包名.*;	//可以直接导入包内所有的类
............

Oracle公司建议使用公司的internet域名倒写作为包名。 比如域名为 xx.com,则包名为 com.xx

import除了可以导入类外,还能导入静态方法和静态字段

import static javaJang.System.*; 导入System类的静态方法和静态字段

1.3.2、常用包

Java的一些核心类都方法了Java包及其子包内,扩展的类放在了 javax包及其子包内,这些就是API。

  1. java.lang:内部包含Java语言的核心类(String、Math、System等等都在该包内),该包内的类不用impot导入即可使用,系统会自动导入。
  2. java.util:包含了Java的工具类和接口、集合框架类和接口(List、Set等都在该包内)
  3. java.io:包含了Java的输入、输出相关的类和接口
  4. java.text:包含与Java格式化相关的一些类
  5. java.sql:JDBC连接数据库相关的类和接口
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值