最近在重新学习Java,在阅读Java的经典著作——Java编程思想,因此每天记录阅读的心得。

  当听到Java这个词时,大家一般想到的是面向对象,确实Java相对于C/C++这两门语言来说,Java最大的特点与优势是完全面向对象的。(当然严格来讲,Java并不是完全面向对象的,基本类型并不是对象,虽然它们有自己对应的封装类型)那什么是面向对象?为什么面向对象使得Java成为一门生产效率很高的编程语言?为什么Java比C++开发效率更高,应用领域更广?为什么使用Java开发更加简洁?

  计算机编程语言刚开始发展时,最开始的编程语言是机器语言,机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,又称为机器码(machine code),CPU可以直接识别并执行该数据。

 代表 加载(LOAD)                      000000010000 代表地址为 16 的存储器                            0000,0000,000000010000 代表 LOAD A, 16

  机器语言是对底层机器的基本抽象。当技术发展后,出现了汇编语言(assembly language),汇编语言使用助记符的方式来替代和表示低级语言的操作,往往汇编语言对应某种计算机体系结构,不同平台可能对应不同的汇编语言。汇编语言以节省修改程序后人工转址的乏味耗时计算,在机器语言的基础上进行进一步的抽象。接着技术的发展,出现了所谓的命令式编程语言,如C、FORTRAN等,它们都是对汇编语言的抽象,上诉3中语言解决问题时都是基于计算机的结构,而不是所要解决的问题进行建模,因此程序员必须建立机器模式与实体问题模型之间的关联。通俗的讲,命令式编程语言或过程式编程语言是强调如何解决问题的细节,程序遵循步骤一步一步实现需求。当时很容易导致程序难以维护,当需求有变动时,很难改动。而另外一种建模方式是对解问题进行建模,面向对象方式就是一种比较好的建模方式。面向对象将问题空间的元素及在解空间中的表示称为"对象"。即万物即对象。对象不但有状态,还有操作,用户可以执行这些操作,然后对象必然有它所属的类,类是一类有相同特性和行为的对象,类是对对象的抽象。比如:老鹰是一个对象,老鹰属于鸟类。类(class)类似于数据类型,数据类型是数据的基本抽象。如浮点型数字具有相同的特性和行为集合。

  Java为什么编程效率高呢?是Java中的类能够复用,而不用重复造轮子。复用主要有两种方法,组合与继承。组合能够在不修改原有代码的基础上使用一个对象,即将原有类的对象置于某个新类中,组合是"has-a"的关系,而继承在原有类的基础上进行添加和修改,是"is-a"的关系。继承可能复用代码,并且Java只使用单根继承,这种继承方法能够让让编程变得更为清晰,而不会带来多继承的毛病。

  Java生产效率高,还有很多原因,如Java去除指针,这样用户就能避免大量的空指针的错误,还加入了自动垃圾回收机制,这样用户就可以不用自己判断对象的回收时间,自己书写回收程序,避免了很多内存异常问题,Java还默认支持并发和网络编程,这为Java的应用领域带来很大的扩展。Java还支持异常处理,能够让程序从异常中恢复。

  

Think in Java笔记——Java与对象的更多相关文章

  1. Java 笔记 —— java 和 javac

    Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...

  2. java笔记之类和对象

    现在编程的思想分成了两大阵营,面向过程和面向对象.现在谈谈啥是面向对象. 作为一只单身狗,谈“对象”还是很伤心很伤心的(:′⌒`)...... 先看看百度怎么说? 好吧,百度说的太抽象,我换个简单的说 ...

  3. Java笔记—— 类与对象的几个例子

    问题1 按要求编写java应用程序: 编写西游记人物类,属性有:身高,名字和武器.方法有:显示名字,显示武器. 在main方法中创建两个对象.猪八戒和孙悟空,并分别为他们的两个属性名字和武器赋值,最后 ...

  4. java笔记 -- 类与对象

    封装: 从形式上看, 封装是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式. 对象中的数据称为实例域, 操纵数据的过程称为方法. 对于每个特定的类实例(对象)都有一组特定的实例域值 ...

  5. Thinking in Java笔记之类及对象的初始化

    最近在看<Thinking in Java>这本书,之前一直对类及对象的初始化过程不太清楚,只是感到很模糊.看了这本书关于对象初始化的部分,终于搞明白了. 废话不多说,先上两个例子,实例摘 ...

  6. JAVA笔记2-面向对象与内存解析

    1.java中的变量先声明.再赋值.再使用.(局部变量必须初始化,成员变量默认初始化) 2.基本类型之外的所有类型都是引用类型.基本类型占一块内存,引用类型占两块(所有new出来的东西装在堆内存,因为 ...

  7. JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数

    /** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static ...

  8. java笔记--String类对象解析与运用

    --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877236.html "谢谢-- 1.String中的equals和==的 ...

  9. java笔记1-面向对象思想

    合适的方法放在合适的类之中. 设计中,分解出应该具有哪些对象(面向对象),不要再想步骤了(这是面向过程).设计过程: step1:问题中有哪些类和对象(找名词,之后区分是类还是属性) step2:这些 ...

随机推荐

  1. LeetCode——pow(x, n)

    超时了,只能先这么干了. return Math.pow(x, n);

  2. {Azure} 常用链接

    https://azure.microsoft.com/zh-cn/documentation/scenarios/web-app/

  3. Unity3D笔记十二 游戏元素二之摄像机

    一.摄像机 摄像头用以捕捉和显示的世界给玩家.通过自定义和操纵相机,你可以让你的游戏的呈现真正独一无二的.您可以在一个场景无限数量的摄像机.它们可以设置在任何顺序呈现在屏幕上的任何地方,或者屏幕的某些 ...

  4. SSL安装方法一:在Windows Server 2008安装SSL证书(IIS 7.0)

    购买的是GlobalSign 公司的通配符域名型SSL 大致的意思就是“通配符公用名填写*.域名.com,这个下面的所有子域名是不受数量限制的,*可以换成任意字符” 1 生成数字证书签名请求文件(CS ...

  5. applicationContext.xml的文件位置就可以有两种默认实现

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...

  6. 三进制状态压缩DP(旅行商问题TSP)HDU3001

    http://acm.hdu.edu.cn/showproblem.php?pid=3001 Travelling Time Limit: 6000/3000 MS (Java/Others)     ...

  7. 关于Properties的用法的详细解释

    如果不熟悉 java.util.Properties类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的.(如清单 1 所示).最近更新的java.util.Properti ...

  8. 310实验室OTL问题(2)

    1.PyOptimization代码学习心得 (1).该部分由三个分块组成(按完成的相应的任务).第一部分,运行函数. 以optimization.py为入口程序,其思路是:首先获取路径,然后,初始化 ...

  9. zabbix_server部署,启动,及端口未监听问题

    安装 下载地址:wget https://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3 ...

  10. List<Map<String, Object>> 与 json 互转

    近期做指纹识别,需要用到缓存文件,数据量并不大,用redis不合适,所以用到了txt文件. 思路是 1.定时查询指纹,存到txt缓存文件中.      2.新增或删除指纹时,查询指纹,存到txt缓存文 ...