Think in Java笔记——Java与对象
最近在重新学习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与对象的更多相关文章
- Java 笔记 —— java 和 javac
Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...
- java笔记之类和对象
现在编程的思想分成了两大阵营,面向过程和面向对象.现在谈谈啥是面向对象. 作为一只单身狗,谈“对象”还是很伤心很伤心的(:′⌒`)...... 先看看百度怎么说? 好吧,百度说的太抽象,我换个简单的说 ...
- Java笔记—— 类与对象的几个例子
问题1 按要求编写java应用程序: 编写西游记人物类,属性有:身高,名字和武器.方法有:显示名字,显示武器. 在main方法中创建两个对象.猪八戒和孙悟空,并分别为他们的两个属性名字和武器赋值,最后 ...
- java笔记 -- 类与对象
封装: 从形式上看, 封装是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式. 对象中的数据称为实例域, 操纵数据的过程称为方法. 对于每个特定的类实例(对象)都有一组特定的实例域值 ...
- Thinking in Java笔记之类及对象的初始化
最近在看<Thinking in Java>这本书,之前一直对类及对象的初始化过程不太清楚,只是感到很模糊.看了这本书关于对象初始化的部分,终于搞明白了. 废话不多说,先上两个例子,实例摘 ...
- JAVA笔记2-面向对象与内存解析
1.java中的变量先声明.再赋值.再使用.(局部变量必须初始化,成员变量默认初始化) 2.基本类型之外的所有类型都是引用类型.基本类型占一块内存,引用类型占两块(所有new出来的东西装在堆内存,因为 ...
- JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数
/** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static ...
- java笔记--String类对象解析与运用
--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877236.html "谢谢-- 1.String中的equals和==的 ...
- java笔记1-面向对象思想
合适的方法放在合适的类之中. 设计中,分解出应该具有哪些对象(面向对象),不要再想步骤了(这是面向过程).设计过程: step1:问题中有哪些类和对象(找名词,之后区分是类还是属性) step2:这些 ...
随机推荐
- COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
COGS 1224. [SHOI2002]百事世界杯之旅 ★ 输入文件:pepsi.in 输出文件:pepsi.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] ...
- Egret P2 ( 一) 掉落的小球
实际效果(蛋疼这个gif制作软件,帧率太低....): 一 Egret和P2的坐标系 首先了解下P2和Egret的坐标系. 某人链接:http://blog.csdn.net/qilei2010/ar ...
- 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法
[BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...
- 【BZOJ1458】士兵占领 最小流
[BZOJ1458]士兵占领 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占 ...
- 微信小程序 --- model弹框
model弹框:在屏幕中间弹出,让你进行选择: 效果: 代码: <button type="primary" bindtap="btnclick"> ...
- 神奇的随机数rand()
随机数在统计理论中占有很重要的地位,很多应用都需要用到他,系统自带的rand()函数产生的是伪随机数,所以该如何真正的随机数呢? 1.c语言中的时间函数 关于c语言我查到的两个比较好的博文是:http ...
- Linux系统下 Apache+PHP 环境安装搭建
一.安装Apache2.2.221.到官网下载 http://httpd.apache.org/download.cgi ,选择相应的版本 可以先下载到windows系统中,上传到linux, 也可 ...
- 170522、Linux 平台通过 nginx 和 vsftpd 构建图片服务器
Nginx WEB 服务器 Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第 ...
- 委托(Func与Action)
1.平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Sa ...
- CH1809匹配统计【KMP】
1809 匹配统计 0x18「基本数据结构」练习 描述 阿轩在纸上写了两个字符串,分别记为A和B.利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B” ...