文档章节

Java编程思想: 对象导论

fzyz_sb
 fzyz_sb
发布于 2016/07/11 20:45
字数 784
阅读 71
收藏 2

抽象过程

所有编程语言都提供抽象机制. 抽象机制的不同引发了编程语言的变更:

汇编语言: 对底层机器的轻微抽象.

FORTRAN,BASIC,C: 对汇编语言的抽象.

以上两类语言必须建立起在机器模型和实际待解决问题的模型之间的关联. 例如不懂UNIX, 就无法进行C语言编程的道理一样.

LISP: 针对待解决问题建模. LISP把所有问题都理解为列表.

C++, Java: 面向对象编程, 根据问题来描述问题.

面向对象语言的五个基本特性(以Java为例)

1. 万物皆为对象(除了基本类型, Java中的对象都用new来创建)

2. 程序是对象的集合, 它们通过发送消息来告知彼此所要做的(get/set函数)

3. 每个对象都有自己的由其他对象所构成的存储(所有的类均继承Object, 而类存在继承, 组合,内部类等操作)

4. 每个对象都拥有其类型(编译器知道对象其类型情况下, 才知道如何分配内存空间进行存储)

5. 某一特定类型的所有对象都可以接收同样的消息(类的继承)

面向对象语言更简洁的描述

对象具有状态,行为和标识. 这意味着每一个对象都可以拥有内部数据(保持状态)和方法(产生行为), 并且每一个对象都可以唯一的与其他对象区分开来, 即每个对象都有唯一的地址(针对Java来说为对象的散列值, 由hashCode方法获取, 默认取对象的内存地址).

 

对象导论

1. 对象提供接口而隐藏其数据状态, 接口用来发送/接收消息, 并调用具体的方法实现具体的操作.

2. 访问控制的存在有两大原因: 1.保护数据不受污染. 2. 只要提供了标准接口, 类的创建者就可以随意修改其实现方式而不会影响其接口的调用者.

3. 使用组合可方便代码复用.

4. 子类继承于父类, 可通过: 1) 在子类中添加新的方法. 2) 在子类中覆盖父类的方法, 来产生差异性.

5. 使用多态来编写不依赖于特定类型的代码, 使用动态绑定保证多态的正确性.

以下针对Java:

6. Java为单继承结构.

7. Java通过容器(泛型化)来存储对象.

 

对象的创建和生命周期

C++方式: 对象的存储空间和生命周期可以在编写程序时确定, 这可以通过将对象置于堆栈或静态存储区域内来实现.

Java方式: 在堆的内存池中动态的创建对象. 如果需要一个新的对象, 可以在需要的时刻直接在堆中创建. 而释放直接通过栈顶指针移动即可.

© 著作权归作者所有

共有 人打赏支持
fzyz_sb
粉丝 408
博文 209
码字总数 447144
作品 0
武汉
程序员
私信 提问
那些年,关于 Java 的那些事儿

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78695893 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2017/12/02
0
0
fbf的书单,欢迎分享,欢迎更新

本人看过的以下书值得推荐的,列出来的就是值得推荐的 这个颜色是一般推荐 这个颜色是强烈推荐 这个颜色是神作,收藏吧 物联网:生产力的变革 李虹著 开拓视野,一般 源码中国:全球IT外包新原...

fbf
2015/03/16
0
0
为什么会有C和JAVA,C#抑或其他语言之争呢?

刚工作的人...真的不理解这个... 就老听人说搞C的完全看不起JAVAer,我实在不知道,为啥呢?喷子我问他原因,他就给我个结论... 啥语言,不都是翻译自己的思想而已么?还是,争论的并不是语言...

黑狗
2012/08/16
481
7
Java基础教程,第八讲,如何使用对象和引用?

面向对象的程序设计,简称OOP(Object-oriented Programming)是目前各大互联网公司主流的程序设计范型,现在绝大部分招聘岗位都要求精通OOP编程,它取代了之前的面向过程的编程,必须精通O...

程序员补给栈
02/11
0
0
Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

Java java常常跟"企业"联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有...

启示录是真的
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
24分钟前
0
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
26分钟前
0
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
33分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
43分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部