文档章节

《java编程思想》学习笔记—对象导论

一个yuanbeth
 一个yuanbeth
发布于 2017/09/03 09:12
字数 1970
阅读 6
收藏 0
点赞 0
评论 0

1.1抽象过程

1、人们所能解决的问题的复杂性直接取决于抽象的类型和质量。

2、对象具有状态,行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体来说,就是每一个对象在内存中都有一个唯一地地址。

1.2每个对象都有一个接口

1、面向对象程序设计的挑战之一,就是问题空间的元素和解空间的对象之间创建一对一的映射。

2、每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的便是类型。

3、接口确定了对某一特定对象所能发出的请求,但是,在程序中必须有满足这些请求的代码,这些代码与隐藏的数据一起构成了实现。

4、在类型中,每一个可能的请求都有一个方法与之相关联,当向对象发送请求时,与之向关联的对象就会被调用。

5、UML,每个类都用一个方框标识,类名在方框的顶部,任何数据成员都描述在方框的中间部分,法法在方框的底部。

参考博客:https://my.oschina.net/fuyong/blog/717505

1.3每个对象都提供服务

程序本身想用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。

在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但它并不试图做更多的事。

1.4被隐藏的具体实现

1、访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分。

2、访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。

3java用三个关键字在类的内部设定边界:

public:任何人都可访问

private:创建者和类型的内部方法可访问

protected:创建者,类型的内部类方法,以及继承的类可以访问,但是不能访问private成员。

没有任何限定词时:包内可以访问

1.5复用具体实现

1、最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。

2、使用现有的类合成新的类,这种概念被称为组合,如果组合是动态发生的,那么它统称被称为聚合。

3、新类的成员对象通常都被声明为private,使得使用新类的客户端程序员不能访问它们。

4、理解组合和聚合的区别:

(1)组合视为has-a(拥有)关系:例如公司由多个部门组成,公司不存在了,部门也就不存在了

(2)聚合:例如一个部门由多个员工组成,如部门不撤销了,人不会消失

1.6继承

1、有两种方法可以使基类和导出类产生差异:

(1)一种方法非常直接:直接在导出类中添加新方法。

(2)改变现有基类的方法的行为,这被称之为覆盖。

2、继承会继承父类的所有成员,包括private成员

3、“是一个”与“像是一个”关系

是一个:用一个导出类对象来完全代替一个基类对象(称之替代原则);

像是一个:扩展接口,即再到处类型中添加新的接口元素。这个新的类型仍然可以替代基类,但这种替代并不完美,因为基类无法访问新添加的方法。

1.7伴随多台的可互换对象

调用基类的方法,怎么知道具体的子类方法? 后期绑定:为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用再对象中存储的信息来计算方法体的地址。这样根据这一小段代码的内容,每一个对象都可以具有不同的表现行为。当向对象发送消息时,该对象就知道能够知道这条消息应该做些什么。

1.8单根继承机构

java所有的类最终都继承单一的基类,即Object

1.9容器

1、为什么要使用容器?

由于不知道解决某个特定问题时需要多少个对象,或者他们讲存活多久,所以创建另一种对象型类型,这种新的对象类型持有对其他兑现的引用,在任何需要时都可以扩充自己以容纳你置于其中的所有东西。

2、为什么容器有多种类型?

(1)不同容器提供了不同类型的接口和外部行为。

(2)不同的容器对于某些操作具有不同的效率

3、参数化类型(泛型) (1)单根继承意味着所有东西都是object类型,所以可以存储object的容器可以存储任何东西。

(2)存储object,所以当将对象引用置入容器时,它被向上转型为object,因此它会丢失其身份。当把它取

回时,就获取了一个对object对象的引用,而不是对置入时的那个类型的对象的引用。怎样才能将它变回先

前置入容器时的具有实用接口的对象呢?

一种方法是向下转型(不安全)

另一种方式便是实用泛型,泛型是一个编译器可以自动定制作用于特定类型上的类。例如,通过使用泛型,

编译器可以定制一个只接纳和取出shape对象的容器。

关于基类怎么调用子类的方法,可参考如下博客:

https://my.oschina.net/u/2427561/blog/1526877

1.10对象的创建和生命期

1、C++创建对象在堆栈或静态区域。

2、java是在堆的内存池中动态的创建对象。

3、在堆栈中创建存储空间和释放存储空间通常需要一条汇编指令即可,分别对应将栈顶指针向下移动和将

栈顶指针向上移动。创建对存储空间的时间以来于存储机制的设计。

4、对于允许在堆栈上创建对象的语言,编译器可以确定对象存活的时间,并可以自动销毁它。然而,如

果是在堆上创建对象,编译器就会对它的生命周期一无所知。

5、java垃圾回收器被设计用来处理内存释放问题,但不包括清理对象的其他方面。

1.11异常处理:处理错误

1、异常时一种对象,它从出错点被“抛出”,被被专门设计用来处理特定类型错误的应用的异常处理器“捕

获”。

2、异常处理就想是与程序正常执行路径并行的,在错误发生时执行的另一条路径。

3、异常不能被忽略,所以它保证一定会在某处得到处理。

4、异常提供了一种从错误状况进行可靠回复的途径。

5、异常处理不是面向对象的特征。

1.12并发编程

java的并发是内置于语言中的。

1.13java与Internet

© 著作权归作者所有

共有 人打赏支持
一个yuanbeth
粉丝 79
博文 98
码字总数 62541
作品 0
深圳
程序员
fbf的书单,欢迎分享,欢迎更新

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

fbf
2015/03/16
0
0
Scala学习笔记(1):Scala语言的来源

Scala是“scalable language”,也就是“可扩展”语言是意思。Scala是一种静态类型语言,它融合了函数式编程和面向对象编程和的思想,前者让它可以很方便快速地构建可用程序,后者则让其具有...

chengyao2
2013/04/28
0
0
为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 这是前不久我们发布《Kotlin或将取代Java》一文之后,来自网友们的部分声音。 可以看到:作为编程语言界的老大——Java仍然...

csdnnews
05/30
0
0
新手怎么学习java?学Java要学哪些内容?

学习任何一门技术之前,兴趣最重要。在学校的时候一直觉得自己在学计算机编程语言,学习了很多,但每门语言都停留在知识边缘地带,都没深入到它们的精华部分。我经朋友介绍有免费的学习Java课...

糖宝_d864
07/02
0
0
Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

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

启示录是真的
05/24
0
0
【给初学者】Android学习路线

很多朋友都对学习路线问题感到迷茫,特别是还在上学的朋友们。在这里就详细的为大家介绍一下。 1.Java基础 很多朋友一上手就开始学习Android,似乎太着急了一些。Android应用程序开发是以Jav...

Jimmy Xie
2012/09/08
0
1
Java技术体系大全,准备面试的可以参考一下!

JAVA技术体系1.1 Java程序员 ·高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 ·核心编程 IO、多线程、实体类、集合类、正则表达式、X...

heiyexue
2015/08/17
0
2
0基础学java难不难?java编程提升学习

很多同学在学Java前都会问这个问题:Java到底难不难学?咱们今天就聊下这个问题。 Java就是一种语言,跟我们平时学习母语、英语并无不同,只不过它的适用对象是计算机、手机一类而已,但基本...

老男孩Linux培训
07/13
0
0
Scala学习笔记(1)-环境搭建

Scala是一种多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。scala可以和java程序无缝拼接,因为scala文件编译后也是成为.class文件,并且在JVM上运行,有下下一代J...

山海经
2013/08/25
0
0
从程序员走向java架构师的书籍推荐!

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想...

欧阳海阳
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

TensorFlow 作用域与操作符的受限范围

variable_scope 影响变量和操作符 name_scope 只影响操作符 with tf.name_scope(""),使用空字符串将作用域返回到顶层 tf.variable_scope("") 相当于添加一个空层 import tensorflow as tf...

阿豪boy
6分钟前
0
0
Java面试基础篇——第六篇:常见Map类的区别

常见的map类有: HashMap, ConcurrentHashMap (Jdk1.8) , LinkedHashMap, TreeMap, Hashtable。 其中我们最常用的莫过于HashMap, 和并发情况下使用的ConcurrentHashMap了,它们的主要区别就在...

developlee的潇洒人生
8分钟前
0
0
崛起于Springboot2.X之前端模版freemaker(23)

1、配置文件 spring: freemarker: allow-request-override: false cache: true check-template-location: true charset: UTF-8 content-type: text/html ......

木九天
24分钟前
1
0
spring-boot:run启动时,指定spring.profiles.active

Maven启动指定Profile通过-P,如mvn spring-boot:run -Ptest,但这是Maven的Profile。 如果要指定spring-boot的spring.profiles.active,则必须使用mvn spring-boot:run -Drun.profiles=test......

夜黑人模糊灬
26分钟前
0
0
大数据分析挖掘技术学习:Python文本分类

引言 文本分类作为自然语言处理任务之一,被广泛应用于解决各种商业领域的问题。文本分类的目的是将 文本/文档 自动地归类为一种或多种预定义的类别。常见的文本分类应用如下: • 理解社交媒...

加米谷大数据
31分钟前
0
0
istio-0.8 指标监控,prometheus,grafana

配置: https://istio.io/docs/tasks/telemetry/metrics-logs/ https://istio.io/docs/tasks/telemetry/tcp-metrics/ envoy拦截请求>上报mixer>对接prometheus>grafana 效果截图: promethe......

xiaomin0322
33分钟前
0
0
公众号推荐

阿里技术 书籍:《不止代码》

courtzjl
36分钟前
0
0
关于改进工作效率

1.给不同的业务线建立需求群,所有的数据需求都在群里面提。 2.对于特别难搞定的事情,到对应的技术哪去做,有问题随时沟通。 3.定期给工作总结形成方法论。 4.学习新的技术,尝试用新的方法...

Avner
43分钟前
0
0
关于thinkphp 框架开启路径重写,无法获取Authorization Header

今天遇到在thinkphp框架中获取不到header头里边的 Authorization ,后来在.htaccess里面加多一项解决,记录下: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews Rewrite......

殘留回憶
46分钟前
0
0
centos 使用yum安装nginx后如何添加模块 10

centos 使用yum安装nginx后如何添加模块 10 centos6.2版本,使用yum来安装了nginx,但是最近需要重新添加模块,所以就傻了,询问下有人知道怎么重新添加模块吗? PS:俺是新手,需要高手救助...

linjin200
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部