【Java核心技术12】面向对象编程(OOP):深入理解类与对象

引言

所有文章均为原创验证,您随手的 关注点赞收藏 是我创作最大的动力。
示例代码地址https://gitee.com/code-in-java/csdn-blog.git

Java,作为一种面向对象的编程语言,其核心思想是将数据和操作这些数据的方法封装在一起。这种编程范式不仅提高了代码的可重用性,还使得程序结构更加清晰和模块化。在本文中,我们将深入探讨Java中的面向对象编程(OOP),特别是类和对象的概念,并通过代码示例来加深理解。

一、类的定义

在Java中,类(Class)是对象的模板或蓝图。它定义了对象的 属性方法。属性是对象的数据部分,而方法是对象可以执行的操作。

下面是一个简单的 Person 类的定义:


public class Person {  // 属性  private String name;  private int age;  // 构造方法  public Person(String name, int age) {  this.name = name;  this.age = age;  }  // 方法  public void introduce() {  System.out.println("我的名字是 " + name + ",我 " + age + " 岁了。");  }  
}
  • 在这个例子中,Person 类有两个属性:nameage,以及一个构造方法和一个 introduce方法。
  • 构造方法用于创建对象并初始化其属性,而 introduce 方法则用于打印自我介绍。

二、对象的创建和使用

对象是类的实例。在Java中,我们使用 new 关键字和构造方法来创建对象。

以下是如何创建和使用 Person 类的对象的示例:

public static void main(String[] args) {  // 创建Person对象  Person person = new Person("张三", 25);  // 调用对象的方法  person.introduce(); // 输出:我的名字是 张三,我 25 岁了。  // 访问和修改对象的属性(通常通过getter和setter方法,这里为了简化直接访问)  System.out.println("年龄:" + person.age); // 输出:年龄:25  person.age = 26; // 修改年龄属性  System.out.println("修改后的年龄:" + person.age); // 输出:修改后的年龄:26  }  
  • 在这个例子中,我们首先使用 new Person(“张三”, 25) 创建了一个名为 personPerson 对象,并初始化了其 nameage 属性。
  • 然后,我们调用了该对象的 introduce 方法来打印自我介绍。
  • 最后,我们直接访问和修改了 age 属性(在实际应用中,通常建议使用 gettersetter 方法来访问和修改私有属性,以确保数据的安全性和完整性)。

三、详细讲解类和对象

1. 类是什么?

在Java中,类就像一个模板或者设计图,它定义了一个 类型 的所有特性和行为。你可以把类想象成一个制造东西的说明书,这个说明书告诉你这个东西有哪些部分(属性)以及它可以做什么(方法)。

比如,我们定义一个 的类,这个类就会包含 的一些基本特性,比如姓名和年龄,还有一些行为,比如自我介绍。

2. 如何定义一个类?

  • 在上面的文章中,我们定义了一个 Person 类,它有两个属性:name(姓名)和 age(年龄)。这两个属性被声明为 private,意味着它们只能在 Person 类内部被直接访问。这是一种封装的方式,可以保护数据不被外部随意修改。
  • 类中还有一个构造方法,这个方法在创建类的对象时被调用,用于初始化对象的属性。在这个例子中,构造方法接收两个参数——姓名和年龄,并将它们分别赋值给 nameage 属性。
  • 最后,类中定义了一个 introduce 方法,这个方法用于打印出人的姓名和年龄,相当于一个自我介绍的功能。

3. 对象是怎么来的?

  • 对象是根据类的模板创建出来的具体实例。就像根据一个建筑设计图可以建造出很多房子一样,根据一个类可以创建出很多对象。每个对象都有自己的属性和方法,但这些属性和方法都是基于类的定义。
  • 在Java中,我们使用 new 关键字加上类的构造方法来创建一个新的对象。比如,new Person(“张三”,25) 就是根据 Person 类的模板创建了一个姓名为“张三”、年龄为25岁的具体的人。

4. 如何使用对象?

创建了对象之后,我们就可以通过这个对象来调用其属性和方法了。在上面的例子中,我们调用了 person.introduce() 方法来让“张三”进行自我介绍。我们还直接访问和修改了 personage 属性(虽然在实际编程中,我们通常不会直接访问和修改私有属性,而是通过公共的方法来操作)。

5. 面向对象编程的好处

  • 首先,它提高了代码的可重用性。比如,如果我们想要创建一个新的“人”,只需要调用 Person
    类的构造方法就可以了,而不需要重新写一遍所有的属性和方法。
  • 其次,面向对象编程使得程序结构更加清晰和模块化。每个类都负责自己的数据和操作,这样代码就更容易理解和维护了。
  • 最后,通过封装、继承和多态等特性,面向对象编程可以让我们编写出更加健壮和可扩展的程序。这些特性可以帮助我们更好地组织和管理代码,提高程序的灵活性和可重用性。

四、总结

Java的面向对象编程提供了一种强大且灵活的方式来组织和管理代码。通过类和对象的概念,我们可以将数据和操作这些数据的方法封装在一起,从而提高代码的可读性、可维护性和可重用性,这样,我们可以编写出更加健壮和可扩展的程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL NDB Cluster 8.4 这是什么版本

MySQL NDB Cluster 8.4 这是什么版本 MySQL NDB Cluster 8.4 是 MySQL 数据库的一种集群版本,主要用于需要高可用性、高性能和横向扩展的应用程序。NDB Cluster 通过分布式内存存储来实现这些特性,适合于需要快速响应时间和高可用性的场景,如…

idea-Spring框架与ioc容器

Sping是轻量级的开源J2EE框架,可以解决企业应用开发的复杂性 Spring有两个核心部分为Ioc和AOP Ioc:控制反转,吧创建对象过程交给Sping进行管理 AOP:面向切面,不修改代码进行功能增强 创建Maven项目 IDEA-2024 就直接创建java项目即可 创…

PostGreSQL遇到的坑

记录一下: 在postgresql中,alter table a add column b integer 和 alter table ”a“ add column b integer是不一样的, 前者是添加了字段a,后者是添加的是区分大小写的字段a,若后面是添加的“A”那么查询的时候也必须是select…

Android WebSocket长连接的实现

一、为什么需要 WebSocket 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客…

SpringBoot引入外部依赖包

将需要引入的文件放置到与src同级别的目录下 如上&#xff0c;在src的同级&#xff0c;新建了一个lib目录&#xff0c;将jar包放置其中 在POM文件下&#xff0c;加入如下配置 <dependency><groupId>com.aliyun</groupId><artifactId>com.aliyun.filed…

搭建取图系统app源码开发,满足广泛应用需求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 图片已成为信息传递的重要媒介&#xff0c;广泛应用于各个领域。为满足日益增长的图片需求&#xff0c;搭建一款高效的取图系统&#xff0c;可以为用户提供便捷、全面的…

linux c++学习笔记整理

文章目录 linux c学习笔记整理环境准备静态库与动态库静态库与动态库理论静态库与动态库示例代码 makemain函数的参数gdb调试程序linux的时间&#xff1a;一、linux的时间操作二、time()库函数三、tm结构体四、loacltime()函数五、mktime()库函数六、gettimeofday()库函数七、程…

windows服务器下jenkins c语言打包的一些经验share

前言 因为一些原因&#xff0c;需要从linux环境下的jenkins 打包c语言转移到使用windows环境下的jenkins打包c语言&#xff0c;从转移的过程中&#xff0c;发现了一些问题和解决方案&#xff0c;故在此和各位运维工程师分享一下。 一、windows 下的c语言编译环境配置 这边就…

中国最全的hive sql 函数集合(持续更新)

#6/20/24 增加greatest函数&#xff1a; select greatest(1,2,3,4,5,2) 结论&#xff1a;可以用hive presto spark得出正确的结果值 #6/20/24 增加last_value(cl1) ignore nulls over(order by ts ) as dt 函数&#xff1a; 有数据集&#xff1a; 1 1 1 2 2   3 3 …

模拟算法:代码世界的生活模拟器

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 模拟算法的总结 二. 模拟算法题目 2.1 替换所有的问号 2.2 提莫攻击 2.3 Z字形变换 2.4 外观数列 2.5 数青蛙 总结 前言 本篇详细介绍了模拟算法的使用&#xff0c;让…

自动化办公04 使用pyecharts制图

目录 一、柱状图 二、折线图 三、饼图 四、地图 1. 中国地图 2. 世界地图 3. 省会地图 五、词云 Pyecharts是一个用于数据可视化的Python库。它基于Echarts库&#xff0c;可以通过Python代码生成各种类型的图表&#xff0c;如折线图、柱状图、饼图、散点图等。 Pyecha…

《他强由他强,清风拂山岗;他横由他横,明月照大江》之四

JVM垃圾回收 1.JVM中判断对象存活的方法 引用计数法 每个对象都有一个与之关联的引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1。 优点:高效、简单 缺点:无法解决循环引用问题可达性分析算法 目前主流的商用程序语言(包括Java)主要采用的…

【腾讯云智笔试题——分苹果时间复杂度和空间复杂度都是O(1)】

文章目录 题目描述解题思路&#xff1a;思路讲解&#xff1a; 题目描述 有m个苹果&#xff0c;n个小孩。每个小孩都有一个编号&#xff0c;小明的编号是。要尽量公平的分苹果&#xff0c;相邻编号的小孩分到的苹果数目差距不能大于1。 请问如何在满足相邻编号的小孩分到的苹果…

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 鸿蒙全仓代码的更新策略6 参考文献7 FAQ7.1 缺头文件xcr…

【0基础学爬虫】爬虫基础之自动化工具 Appium 的使用

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源&#xff08;本地、华为云、阿里云、网易&#xff09; 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver&#xff0c; rpm -qa | grep vnc如果没有安装那就行自行下载安装&#xff08;我这里用yum安装了&#xff0c;vncserver安装需…

设计程序,实现高精度圆周率的计算和存储,使用线性表突破程序设计语言内置变量的数值和有效数字范围限制

一、使用线性表突破程序设计语言内置变量的数值和有效数字范围的限制&#xff0c;为了实现高精度圆周率的计算&#xff0c;先根据数学公式进行对PI高精度运算&#xff0c;如图1-1。根据这个数学公式 π2 0nn!2n1‼ 即 Rn1Rn*n2n1&#xff0c;R11&#xff0c;sum π2* n1∞Rn 来…

sql-server数据库的备份与还原

一、数据库的备份 BACKUP DATABASE [pathogen-jeecg] TO DISK D:\pathogenManagement\pathogen_jeecg_Full.bak WITH COMPRESSION, STATS 10, INIT; 二、数据库的还原 RESTORE DATABASE [pathogen_jeecg_jw] FROM DISK D:\pathogenManagement\pathogen_jeecg_Full.bak …

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库&#xff0c;并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )

文章目录 一、Graham 凸包扫描算法1、凸包概念2、常用的凸包算法3、Graham 凸包扫描算法 二、Graham 算法前置知识点1、角排序2、叉积3、算法过程分析 三、代码示例1、完整代码示例2、执行结果 使用 Graham 算法绘制的凸包效果 : 博客代码下载 : https://download.csdn.net/d…