当前位置: 首页 > news >正文

Javase学习文档------面象对象初探

引入面向对象

面向对象的由来:
面向对象编程(Object-Oriented Programming, OOP)是一种编程范型,其由来可以追溯到20世纪60年代。在此之前,主流编程语言采用的是“过程化编程”模式,即面向过程编程模式。在这种模式下,程序主要由一组函数或子程序组成,数据和函数是分离的。
然而随着软件规模和复杂性的增加,过程化编程的不足逐渐显现:必须通过全局变量或输入参数来传递信息、代码复用困难、代码难以维护等问题。为了解决这些问题,人们开始寻求一种新的编程范型。
在此背景下,Alan Kay等人提出了面向对象编程这一概念,提供了一种新的软件设计和实现方法,从而被广泛应用于软件开发中。面向对象编程将数据和函数封装为对象,强调数据的本质和操作数据的行为作为一体,多态、继承等特性可以让我们更加灵活地设计、组织、重用和维护程序。
到20世纪80年代,面向对象编程得到了广泛的推广和应用,C++、Java、Python等编程语言都具有良好的面向对象支持。
综上所述,面向对象编程是为了解决过程化编程的不足和应用需求而产生的一种新的编程思想和技术,已经成为现代软件开发的重要组成部分。

这不禁想对比一下,面向对象VS面向过程
面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计
和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来
越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发
各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程
(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。
总结一下,异同点如下:

异同点

如何new对象
在Java中,我们可以通过关键字new来创建一个对象。具体步骤如下:
使用关键字new创建一个对象引用,该对象的类型是我们所需创建的类的类名。
例如:Student student1;
在新建对象引用后,需要使用关键字new调用类的构造方法,创建该对象实例。在括号中传入构造方法需要的参数。
例如:student1 = new Student(“001”, “Tom”, “男”, 20, 80.5);
上述代码将创建一个学生对象,并将此对象的sNO、sName、sSex、sAge、sJava属性分别初始化为"001"、“Tom”、“男”、20和80.5。

 Student() students = new Student();

例题

请定义一个交通工具(Vehicle)的类其中有: 属性: 速度(speed)、 体积(size)等,方法:移动(move())、设置速度(setSpeed(int speed))、加速 speedUp()、减速 speedDown()等。最后在测试类 Vehicle 中的 main()中实例化一个交通工具对象并通过方法给它初始化 speed,size 的值并且通过打印出来。另外调用加速、减速的方法对速度进行改变

public class Vehicle {//Vehicle实体类int speed; // 速度int size; // 体积public void move() {System.out.println("Vehicle is moving.");}public void setSpeed(int speed) {this.speed = speed;}public void speedUp() {speed += 10;}public void speedDown() {speed -= 10;}
}
public class TestVehicle {//测试类TestVehiclepublic static void main(String[] args) {Vehicle v = new Vehicle(); // 创建交通工具对象v.setSpeed(60); // 设置速度为60v.size = 3; // 设置体积为3System.out.println("Speed: " + v.speed);System.out.println("Size: " + v.size);v.speedUp(); // 加速System.out.println("New speed after speeding up: " + v.speed);v.speedDown(); // 减速System.out.println("New speed after speeding down: " + v.speed);}
}

总结

在使用面向对象的思想进行程序设计时,有一些需要特别注意的点,包括以下几个方面:

面向对象的三大特征:封装、继承和多态。在设计类时,需要考虑这些特征的应用,同时遵循单一职责原则,使类的功能更加清晰和简洁。
对象的生命周期。在Java中,对象创建后会一直存在于内存中,直到垃圾回收器回收其占用的内存。因此,在使用对象时要注意对象的生命周期,及时对不再使用的对象进行置空或释放内存。

对象之间的关系。在设计类时,需要考虑类之间的关系,包括依赖关联聚合和组合等。同时,还需注意避免出现过度耦合的情况,遵循迪米特法则,确保类与类之间的独立性。

代码的可维护性。在编写代码时,需要注意代码的可读性、可复用性、可扩展性和可测试性等方面,以确保代码的可维护性。同时,还需注意代码的规范性和风格的统一性,使其他人更易于理解和修改代码。

异常处理。在程序运行中,可能会发生各种异常情况,如空指针异常、数组越界异常等。因此,在编写代码时,需要考虑这些异常情况,并进行相应的异常处理,以保证程序的稳定性和可靠性。

综上所述,面向对象的程序设计需要在多个方面进行注意,包括类的设计、对象的生命周期、对象之间的关系、代码的可维护性和异常处理等。只有在这些方面都做到了充分考虑并合理处理,才能编写出高质量、易维护的面向对象程序。

补充

构造方法

何为构造方法、构造方法的用法与细节

解答1. 构造方法的名称必须与类名相同。2. 构造方法可以有参数,也可以没有参数。3. 构造方法没有返回值类型,也不需要显式地写出 return

构造方法的创建

无参构造
public class Person {private String name;private int age;//无参构造方法public Person() {}
}
有参构造
public class Person {private String name;private int age;// 有参构造方法public Person(String name, int age) {this.name = name;this.age = age;}
}
无参和有参构造
public class Person {private String name;private int age;//无参构造方法public Person() {}// 有参构造方法public Person(String name, int age) {this.name = name;this.age = age;}
}

相关文章:

Javase学习文档------面象对象初探

引入面向对象 面向对象的由来: 面向对象编程(Object-Oriented Programming, OOP)是一种编程范型,其由来可以追溯到20世纪60年代。在此之前,主流编程语言采用的是“过程化编程”模式,即面向过程编程模式。在这种模式下&…...

ChatGPT能够干翻谷歌吗?

目前大多数人对于ChatGPT的喜爱,主要源自于其强大的沟通能力,当我们向ChatGPT提出问题时,它不仅能够为我们提供结论,而且还能够与我们建立沟通,向ChatGPT提出任何问题,感觉都像是在与一个真实的人类进行交谈…...

PCL 使用点云创建数字高程模型DEM

目录 一、DEM1、数字高程模型二、代码实现三、结果展示1、点云2、DEM四、相关链接一、DEM 1、数字高程模型 数字高程模型(Digital Elevation Model),简称DEM,是通过有限的地形高程数据实现对地面地形的数字化模拟(即地形表面形态的数字化表达),它是用一组有序数值阵列形…...

我体验了首个接入GPT-4的代码编辑器,太炸裂了

最近一款名为Cursor的代码编辑器已经传遍了圈内,受到众多编程爱好者的追捧。 它主打的亮点就是,通过 GPT-4 来辅助你编程,完成 AI 智能生成代码、修改 Bug、生成测试等操作。 确实很吸引人,而且貌似也能大大节省人为的重复工作&…...

互联网数据挖掘与分析讲解

一、定义 数据挖掘(英语:Data mining),又译为资料探勘、数据采矿。它是数据库知识发现(英语:Knowledge-Discovery in Databases,简称:KDD)中的一个步骤。数据挖掘一般是指从大量的数…...

linux之cut的使用

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的 其语法格式为: cut [-bn] [file] 或 cut [-c][file] 或 cut [-df] [file]使用说明:…...

Redis第十讲 Redis之Hash数据结构Dict-rehash扩容操作

Rehash 执行过程 字典的 rehash 操作实际上就是执行以下任务: 创建一个比 ht[0]->table 更大的 ht[1]->table ;将 ht[0]->table 中的所有键值对迁移到 ht[1]->table ;将原有 ht[0] 的数据清空,并将 ht[1] 替换为新的 ht[0] ; 经过以上步骤之后, 程序就在不改…...

电动力学问题中的Matlab可视化

电磁场的经典描述 小说一则 电磁场的经典描述就是没有啥玩意量子力学的经典电动力学下对电磁场的描述,以后有空写个科幻小说,写啥呢,就写有天张三遇见了一个外星人,外星人来自这样一个星球,星球上的物质密度特别低,导致外星人的测量会明显的影响物质的运动,外星人不能同时得到…...

云原生周刊:编程即将终结?

近日哈佛大学计算机科学的前教授 Matt Welsh,分享了他对计算机科学、分布式计算的未来以及 ChatGPT 和 GitHub Copilot 是否代表编程结束的开始的看法。 威尔士说,编程语言仍然很复杂。再多的工作也无法让它变得简单。 “在我看来,任何改进…...

C++ STL,resize 和 reserve 的区别

结论放前边&#xff1a;resize和reserve都可以给容器扩容&#xff0c;区别在于resize会进行填充&#xff0c;使容器处于满员的状态&#xff0c;即sizecapacity&#xff0c;而reserve不会填充&#xff0c;有size<capacity. 1. size 和 capacity 的区别 size和capacity是容器…...

Java——详解ReentrantLock与AQS的关联以及AQS的数据结构和同步状态State

前言 Java中大部分同步类&#xff08;Lock、Semaphore、ReentrantLock等&#xff09;都是基于AbstractQueuedSynchronizer&#xff08;简称为 AQS&#xff09;实现的。 AQS 是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。 本文会先介绍应用层&a…...

vue3+vite+ts 接入QQ登录

说明 前提资料准备 在QQ互联中心注册成为开发者 站点&#xff1a;https://connect.qq.com/创建应用&#xff0c;如图 js sdk方式 下载对应的sdk包 sdk下载&#xff1a;https://wiki.connect.qq.com/sdk%e4%b8%8b%e8%bd%bd 使用 下载离线js sdk 打开&#xff1a;https:…...

消息队列kafka及zookeeper机制

目录 一、zookeeper 1、zookeeper简介 2、zookeeper特点 3、zookeeper工作模式及机制 4、zookeeper应用场景及选举机制 5、zookeeper集群部署 ①实验环境 ②安装zookeeper 二、消息队列kafka 1、为什么要有消息队列 2、使用消息队列的好处 3、kafka简介 4、kafka…...

分布式 - 分布式体系架构:IT架构的演进过程

文章目录01. 应用与数据一体模式02. 应用服务和数据服务的分离03. 缓存与性能的提升04. 服务器集群处理并发05. 数据库读写分离06. 反向代理和 CDN07. 分布式文件系统和分布式数据库系统08. NoSQL和搜索引擎09. 业务拆分10. Redis缓存在应用服务器上是进程内缓存还是进程外缓存…...

CSDN 周赛42期

CSDN 周赛42期1、题目名称&#xff1a;鬼画符门之宗门大比2、题目名称&#xff1a;K皇把妹3、题目名称&#xff1a;影分身4、题目名称&#xff1a;开心的金明小结1、题目名称&#xff1a;鬼画符门之宗门大比 给定整数序列A。 求在整数序列A中连续权值最大的子序列的权值。 &…...

Vue:初识Vue

1、首先要导入vue.js <!-- 当你使用script标签安装vue之后&#xff0c;上下文就注册了一个全局变量vue --><script src"../1.Vue/js/vue.js"></script> 不能直接调用vue()&#xff0c;需要new vue(),否则会报错。 2、关于vue构造函数的参数opti…...

linux语言学习记录

文章目录前言一、linux文件结构二、指令三、Gvim编辑器1、命令模式2、底行命令四、正则表达式1、表达式匹配举例2、对文件里面内容进行操作3、使用 \( 和 )\ 符号括起正规表达式&#xff0c;即可在后面使用\1和\2等变量来访问和中的内容前言 记录自己学习linux的笔记&#xff…...

面向对象编程(进阶)7:面向对象特征三:多态性

一千个读者眼中有一千个哈姆雷特。 目录 7.1 多态的形式和体现 7.1.1 对象的多态性 举例&#xff1a; 7.1.2 多态的理解 7.1.3 举例 1、方法内局部变量的赋值体现多态 2、方法的形参声明体现多态 3、方法返回值类型体现多态 7.2 为什么需要多态性(polymorphism)&#x…...

vue尚品汇商城项目-day04【29.加入购物车操作(难点)】

文章目录29.加入购物车操作&#xff08;难点&#xff09;29.1加入购物车按钮29.2addCartSuce29.3购物车29.3.1 向服务器发送ajax请求&#xff0c;获取购物车数据29.3.2UUID临时游客身份29.3.3动态展示购物车29.4修改购物车产品的数量&#xff08;需要发请求&#xff1a;参数理解…...

KubeSphere 社区双周报 | 4.8 深圳站 Meetup 火热报名中 | 2023.3.17-3.30

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.03.17-2023.…...

ChatGPT热炒之前 搜索引擎SEO算法已经悄然改变

2022年4月起&#xff0c;某度算法有了新的调整&#xff0c;这对于靠SEO获得流量的公司简直可以说是灭顶之灾。原本SEO从业者还指望跟之前一样&#xff0c;等算法调整稳定后&#xff0c;网站的自然排名还会再回来&#xff0c;但等到了10月份&#xff0c;仍然没有回暖的迹象&…...

【Linux】Mysql之视图的基本操作

一、什么是视图 MySQL 视图&#xff08;View&#xff09;是一种虚拟存在的表&#xff0c;同真实表一样&#xff0c;视图也由列和行构成&#xff0c; 但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的 表&#xff0c;并且还是在使用视图时动态生成的。…...

《扬帆优配》西藏地震!美史上最严排放新规将出台,美股收涨

当地时间周四&#xff0c;美股遍及收高&#xff0c;科技股领涨。因耶稣受难日&#xff0c;美股4月7日&#xff08;周五&#xff09;休市&#xff0c;周四为美股本周最终一个买卖日&#xff0c;从本周状况来看&#xff0c;纳指与标普500指数均录得跌幅&#xff0c;别离跌1.1%和0…...

Python 小型项目大全 66~70

六十六、简单替换密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project66.html 简单替换密码用一个字母代替另一个字母。由于字母A有 26 种可能的替换&#xff0c;B有 25 种可能的替换&#xff0c;C有 24 种可能的替换&#xff0c;等等&#xff0c;所以可能…...

Barra模型因子的构建及应用系列八之Earning_Yeild因子

一、摘要 在前期的Barra模型系列文章中&#xff0c;我们构建了Size因子、Beta因子、Momentum因子、Residual Volatility因子、NonLinear Size因子、Book-to-Price因子和Liquidity因子&#xff0c;并分别创建了对应的单因子策略&#xff0c;其中Size因子和NonLinear Siz因子具有…...

2022蓝桥杯省赛——卡片

问题描述 小蓝有 k 种卡片, 一个班有 n 位同学, 小蓝给每位同学发了两张卡片, 一位同学的两张卡片可能是同一种, 也可能是不同种, 两张卡片没有顺序。没有两位同学的卡片都是一样的。 给定 n, 请问小蓝的卡片至少有多少种? 输入格式 输入一行包含一个正整数表示 n 。 输出…...

数据结构-快速排序

一.概要 快速排序是一种基于分治思想的排序算法&#xff0c;其基本思路是选取一个基准值&#xff08;pivot&#xff09;&#xff0c;通过一趟排序将待排序列分成两个部分&#xff0c;其中左半部分都小于基准值&#xff0c;右半部分都大于基准值&#xff0c;然后对左右两部分分…...

WuThreat身份安全云-TVD每日漏洞情报-2023-04-10

漏洞名称:Apple iOS/iPadOS 越界写入 漏洞级别:高危 漏洞编号:CVE-2023-28206 相关涉及:Apple iOS <16.4.0 漏洞状态:在野 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-08810 漏洞名称:PHPGurukul Bank Locker Management System SQL 注入 漏洞级别:高…...

IDEA中查看源码点击Download Sources时出现Cannot download sources的问题复现及解决

IDEA中查看源码点击Download Sources时出现Cannot download sources的问题复现及解决 注意&#xff1a;实验环境的IDEA版本&#xff1a;2021.3.1 1、问题描述 1.1、当想看源码时&#xff0c;点击Download Sources 1.2、此时出现了Cannot download sources 2、解决办法 2.1、…...

R+VIC模型融合实践技术应用及未来气候变化模型预测/SWAT/HSPF/HEC-HMS

在气候变化问题日益严重的今天&#xff0c;水文模型在防洪规划&#xff0c;未来预测等方面发挥着不可替代的重要作用。目前&#xff0c;无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。虽然&#xff0c;这些软件有各自的优点&#xff1b;但是&am…...