文档章节

面向对象随笔

王夫子-大猿软件
 王夫子-大猿软件
发布于 2017/08/27 10:49
字数 1537
阅读 3
收藏 1
点赞 0
评论 0

今天要讲的主题是面向对象,说到对象,很多人在春节期间一定会被相亲,这事再说难眠,尤其是在乡镇农村,更是普遍现象,平时出门在外,只有春节回趟老家,必须在这期间搞事情,不然就要等来年,许多人是等不起的,所以黄金期就在这几天。现实中的对象要搞,java的对象我们也要搞,两个都很重要,话不多说,我们就聊聊面向对象。

 

说到面向对象的语言,java不是第一个,在java之前就有面向对象的语言,比如C++也是面向对象的,java只是面向对象的一员,可是很多人是由java知道的面向对象思想,这和java的普及程度已经优势是密不可分的。我们在学java的时候,书本上描述最多的就是面向对象,如果java书籍没有用大量篇幅来讲述面向对象,那么这本书一定算不上什么好书,面向对象是java里面精髓,虽然很多人用了多年的java,可还没有真正懂得面向对象的妙处,不过这也不影响使用java,就按照别人的代码格式写,套路是一样的,只要程序不出错能用即可。如果大家想要提高自己代码水平,这样做是肯定是不行的,要写好面向对象的代码,就必须对java的面向对象知识有个清晰的认知,比如继承、接口、抽象类、重写、重载、多态和封装等有个很系统的了解,在此基础上,再根据具体的业务逻辑规则搭建自己的代码框架。有人说,代码只要能完成功能没有毛病,不就OK了吗,干么非要花这么大的力气去搞懂这些东西呢,很多人也不清楚这些东西也能写代码呀。关于这个说法,不能说它没有不对,它也有可取之处,就是代码可用就行。但这只能说是前期可行,随着项目的跌倒,代码量的增加,毛病越来越多,缺点就暴露出来了。比如代码不具备可扩展性,或者扩展性比较差,方法代码量大,逻辑混乱,没有清晰的逻辑分类。要解决这些问题,就要对我们的代码重构,将代码变得逻辑清晰,具有一定的可扩展性,这就需要我们使用面向对象的思想为基础,对代码进行合理的优化重构。这是项目迭代过程必经的一道坎,每做一次,都会对面向对象有更深刻的理解。

 

在面向对象的世界里,类是一等公民,有了类才会有对象,对象我们使用new关键字来创建,对象在堆内存中物理空间里,对象都有内存地址,声明变量的值就是对象的内存地址。我们说面向对象,其实就是站在对象的角度来思考程序的组织架构,但我们不能为了面向对象而面向对象,这样是不对的,面向对象的使用是为了提高代码的扩展性,降低代码的维护成本,减少程序的bug,增强创新的稳定性。面向对象的使用,不但是使用new关键字来创建对象这么简单,我们的对象是具有多态性的,比如,有继承关系的类,子类可以以父类的身份出现,也可以以自身出现,这样也会带来方法的重写,经常面试的时候,会问到方法重写方面的问题,当然,接口也存在这样的问题,有了这些的基础,才能是写面向对象代码的前提。新手在学习面向对象的时候,经常会迷途,因为面向对象里的概念以及知识点比较多,很容易混淆也很容易忘记,这些东西其实有工作经验的也会不记得,要时常的去翻看,才会想起,不过随着代码量的增加,自己对这些问题也会有不同的理解,比如很多新手对继承和接口理解不深刻,感觉它们没什么区别,还有人说能用接口就不用抽象类,面向接口编程等一些自己也似懂非懂的话语,这些观点太片面了,新手容易把它当做真理去执行,然而,很多时候,我们遇到的实际情况跟别人是不一样的,那么别人的经验就不能拿来用,我们需要找到适合自己的编程方法。

 

我们在学面向对象的时候,一定要有内存模型的概念,因为,对象都是在堆内存中,有了这种模型概念就很容易的理解对象,以及后面的继承和多态问题,再复杂的对象关系,都可以使用内存模型来分析,画上图,就能很直观的认识到程序的走向,对象的产生、使用以及回收,对象也是有生命周期的,如果创建了对象,没有死亡,随着程序的运行,对象越来越多,那么内存就会溢出的危险,所以java虚拟机有一个神奇的功能就是垃圾回收,一些没有用的对象就会被垃圾回收器机制销毁掉,这样保证了内存的使用率,大大提高了程序的运行效率。所以这也是java安全的原因,我们不需要担心内存泄漏的问题,对象的回收由底层的jvm帮我们搞定,但是这样也不能避免程序的bug,由于bug导致的内存泄漏,jvm是无能为力的,所以写代码的时候也要小心。

© 著作权归作者所有

共有 人打赏支持
王夫子-大猿软件
粉丝 1
博文 17
码字总数 8668
作品 0
南京
程序员
有必要澄清两个基本概念--算法和过程的关系以及关于程序设计方法论的一些看法

概述 前些天,在一个关于面向对象和面向过程的话题, 我的一句评论"算法说白了就是过程"引起了辩论.于是我有了写这篇随笔的想法: 一位园友善意地说这个评论太业余了.我没有为业余二字生气,因为...

mikelij
2008/11/30
0
0
Objective-c类的声明

objective-c 是一种面向对象的编程语言,说到面向对象编程当然离不开类(class)了。 建立了第一个简单的项目后,我们应该继续加深我们对Objective-C语法的认识,我感觉Objective-C是回归C的...

晨曦之光
2012/05/16
307
0
读Clean Code - 数据结构和对象

最近在上下班挤公交的时间细阅Clean Code(代码整洁之道),再次佩服Bob大叔幽默的文笔,独到的观点和理解视角。最让我耳目一新的是Bob大叔对数据结构和对象的解释。 总的说来数据结构指的就...

zting科技
2017/01/10
0
0
F#探险之旅(六):F#代码的组织

前言 是的,我们已经学习了如何在F#中使用各种范式(函数式、命令式、面向对象)进行编程。但是目前还仅限于在单个模块内编写,要知道,不管是采用哪种语言或者范式编程,如果项目规模大了,...

长征3号
2017/12/19
0
0
F#系列随笔索引

循着我的Google笔记本,我看到第一条与F#相关的笔记发生在4月7日,到今天刚好6个月整。 为何要学习F#?这是个首当其冲的问题,跟当初“Java还是C#”这样的问题不同,现在是在学习一门新语言。...

长征3号
2017/12/21
0
0
针对Vue的后台权限功能实现思路(持续更新)

权限是一块设计挺繁琐的功能,尤其是设计到前端SPA应用,前后端的耦合性太强,先屡屡思路,再实现,如果您有好的建议,也可评论留言。 基本的表结构如下 用户表。user 字段 说明 id 用户ID ...

赛冷思
2017/10/29
0
0
微信应用号开发必备技能都在这里了啦!

“微信应用号”就像平地里炸响的一声春雷,在互联网圈内炸开了锅,小代码小程序即将成为主流,H5迎来了自己的第二春。废话少说,关于微信应用号开发技能,你都掌握了吗? 没掌握的看这里,干...

咖啡
2016/09/23
0
0
杭州软雅科技有限公司/51cnblogs

51cnblogs 博客园文章管理编辑器客户端 基本说明: 本程序只适用于博客园; 本程序不会收集用户的任何信息; 源码只是用来给有一定基础的开发人员学习用的; 想要源码直接跑起来,还是要好好...

杭州软雅科技有限公司
2017/10/26
0
0
邮件代收代发功能模块的操作界面设计和阶段性总结

大约半年前,一个客户希望给他开发一个代收代发的功能模块,只需要一个后台的服务进行自动收取和发送邮件,因此我结合了我自己的定时服务程序,增加了一个基于Lumisoft组件的邮件发送和收取插...

walb呀
2017/12/04
0
0
使用Python解析JSON数据的基本方法

Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多。 下面演示如何将一个P...

zhaobaoxin123
2017/02/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kafka设计解析(一)- Kafka背景及架构介绍

原创文章,转载请务必将下面这段话置于文章开头处。(已授权InfoQ中文站发布) 本文转发自技术世界,原文链接 http://www.jasongj.com/2015/03/10/KafkaColumn1 摘要   Kafka是由LinkedI...

mskk
6分钟前
0
0
使用Service Mesh整合您的微服务架构

在微服务架构的世界中,它正在达到这样的程度,即管理系统的复杂性对于利用它带来的好处变得至关重要。 目前,如何实现这些微服务不再是一个问题,因为有很多可用的框架(Spring Boot,Vert....

xiaomin0322
9分钟前
0
0
看看 LinkedList Java 9

终于迎来了 LinkedList 类,实现的接口就有点多了 Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>。LinkedList是一个实现了List接口和Deque接口的双端链......

woshixin
28分钟前
0
0
算法 - 冒泡排序 C++

大家好,我是ChungZH。今天我给大家讲一下最基础的排序算法:冒泡排序(BubbleSort)。 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大(可以相反),就交换他们两个。 对每...

ChungZH
30分钟前
0
0
jquery ajax request payload和fromData请求方式

请求头的不同 fromData var data = { name : 'yiifaa'};// 提交数据$.ajax('app/', { method:'POST', // 将数据编码为表单模式 contentType:'application/x-ww...

lsy999
33分钟前
0
0
阿里P7架构师,带你点亮程序员蜕变之路

前言: Java是现阶段中国互联网公司中,覆盖度最广的研发语言。 掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,成为Java架...

Java大蜗牛
34分钟前
1
0
Ecstore 在没有后台管理界面(维护)的情况如何更新表的字段

window 系统: 切换到:app\base 目录下: C:\Users\qimh>d: D:\>cd D:\WWW\huaqh\app\base 执行:D:\WWW\huaqh\app\base>cmd update linux 系统: 1># cd /alidata/www.novoeshop.com/app/......

qimh
39分钟前
0
0
设计模式-策略模式

策略模式 解释 对工厂模式的再次封装,使用参数控制上下文信息(将工厂返回的实例赋值给context field) 不会返回bean实例,只是设置对应的条件 调用context的方法(调用field的方法) 用户只...

郭里奥
41分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用,其中有个叫OrderedDict类,它可以在使用的时候记录元素插入顺序,在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

芝麻糖人
今天
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

微小宝
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部