Thinking In Java:第一章 对象入门,第二章 一切皆对象

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

第一章 对象入门

一、抽象的进步

所有编程语言的最终目的都是提供一种“抽象”方法。解决问题的复杂程度直接取 决于抽象的种类及质量。

1、面向对象程序设计方法

(1)万物皆对象。

(2)对象间通过消息传递彼此关联。

(3)每个对象都有自己的存储空间,可容纳其他对象。

二、对象的接口

三、实现方案的隐藏

四、方案的重复使用

五、继承:重新使用接口

六、多形对象的互换使用

七、对象的创建和存在空间

八、违例控制:解决错误

九、多线程

多线程处理一个最常见的例子就是用户界面。利用线程,用户按下按钮,程序立即做出相应,而不是让用户等待程序完成了当前任务之后才开始响应。

共享资源!如果有多个线程同时 运行,而且它们试图访问相同的资源,就会遇到一个问题。为了解决这个问题,引入了锁机制。synchronized关键字。

十、永久性

程序退出后,对象仍然能保存它的全部信息,这将时一件非常有价值的事情,下次启动时,对象仍然在那里,里面保留的信息仍然是程序上一次运行时的那些信息。当然,可以将信息写入一个文件或者数据库,从而达到相同的效果。但尽管可将所有东西都看作一个对象,如果能将对象声明成“永久性”,并令其为我们 提供之前退出时应保留的信息,那岂不是美哉。现在好像还做不到,还需要存在文件里或者数据库里,很麻烦。

十一、java和因特网

1、什么是web?

客户端/服务端系统的基本思路是我们能在一个统一的地方集中存放信息资源。

一般将数据集中保存在某个数据库中,根据其他人或者机器的请求将信息传递给对方。将各种元素集中到一起,信息仓库、用于投递信息的软件以及信息及软件所在的那台机器,它们联合起来遍称作“服务器server”。

而对那些驻留在远程机器上的软件,它们需要与服务器通信,取回信息,进行适当的处理,然后再远程机器上显示出来,这些就叫作“客户端client”。

可能会有成千上万的客户同时向服务器发送请求,比如秒杀,任何微小的延误都是不能忽视的,为尽可能缓解潜伏的问题,程序员需要谨慎的坟山任务的处理负担。一般可以考虑让客户机负担部分处理任务,但有时亦可分派给服务器所在地的其它机器,那些机器亦叫做“中间件”。

2、客户端编程

(1)插件

(2)脚本编制语言

插件造成了脚本编制语言的爆炸性增涨。通过脚本语言,可将用于自己客户端的源码直接插入HTML页,而对那种语言进行解释的插件会在HTML页显示的时候自动激活。脚本语言一般都倾向于简化,易于理解。从属于HTML页的一些简单正文,所以只需向服务器发出对那个页的一次请求,即可非常快的载入。缺点是我们的代码全部暴露在人们面前。

脚本语言真正面向的是特定类型问题的解决,其中主要涉及如何创建更丰富、更具有互动能力的图形用户界面(GUI)。

(3)Java

Java通过“程序片Applet”巧妙的解决了客户端编程的问题,比如多线程操作、数据库访问、联网程序设计记忆分布式计算等等。

(4)ActiveX

微软的ActiveX,对抗Java而存在的。据说ActiveX是web页面中使用“历史遗留”代码的最佳途径。

(5)安全

自动下载和通过因特网运行程序听起来就象是一个病毒制造者的梦想。在客户端的编程中,ActiveX带来了 最让人头痛的安全问题。点击一个 Web站点的时候,可能会随同HTML 网页传回任何数量的东西:GIF 文件、 脚本代码、编译好的Java 代码以及ActiveX 组件。有些是无害的;GIF文件不会对我们造成任何危害,而脚 本编制语言通常在自己可做的事情上有着很大的限制。Java 也设计成在一个安全“沙箱”里在它的程序片中 运行,这样可防止操作位于沙箱以外的磁盘或者内存区域。 ActiveX是所有这些里面最让人担心的。

(6)因特网和内联网

3、服务器端编程

4、一个独立的领域:应用程序

十二、分析和设计

Grady Booch 面向对象分析与设计 第三版

1、建立需求分析和系统规格

2、拿出一套设计方案

日结,3月16日:45/1=45页/天,688/45=15天,预计3月31日完成!

第二章 一切皆对象

一、用句柄操纵对象

二、所有对象都必须创建

创建句柄时,我们希望它同一个新对象连接。通常用new关键字达到这一目的。

1、保存到什么地方

(1)寄存器

这是最快的保存区域,因为它位于和其它所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配,我们没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何痕迹。

(2)栈

驻留于常规RAM(随机访问存储器)区域,但可通过它的“栈指针”获得处理的直接支持。栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。

创建程序时,java编译器必须准确地知道栈内保存的所有数据的长度以及存储时间。这是由于它必须生成响应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以监管有些Java数据要保存在栈里,特别是对象句柄,但Java对象并不放在其中。

(3)堆

一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和栈不同,堆不必知道要分配多少存储空间,也不必知道数据要在堆内停留多次实践,因此,用堆保存数据时会得到更大的灵活性。为达到灵活性,必然付出一定的代价,代价就是分配存储空间时会花掉更长的时间。

(4)静态存储

这里的静态是指位于固定位置。

程序运行期间,静态存储的数据将随时等候调用,可用static关键字指出一个对象的特定元素是静态的。但java对象本身永远不会置入静态存储空间。

(5)常数存储

常数值通常直接置于程序代码内部,这样做最安全,可考虑将它们置入只读存储器ROM。

(6)非RAM存储

若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子就是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。

2、特殊情况:主要类型

基本类型 封装类型 大小
boolean Boolean 1位
char Character 16位,2字节
byte Byte 8位,1字节
short Short 16位,2字节
int Integer 32位,4字节
long Long 64位,8字节
float Float 32位,4字节
double Double 64位,8字节

注:

(1)字节是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。

(2)默认是double类型,3.14是double类型;3.14F就是 float类型。

3、Java的数组

三、绝对不要清除对象

作用域

四、新建数据类型:类

1、字段和方法

五、方法、自变量和返回值

1、自变量列表

六、构建Java程序

1、名字的可见性

2、使用其它组件

3、static

static作为一个静态方法,在载入类的时候就被载入到内存中,无论你用不用都占用这个位置。

单例模式,在用到这个实例调用方法的时候,方法才会被加入到内存中,当对象不用的时候,GC会将方法回收,效率高了非常多。

单例是类实例,占用的内存空间是堆空间,而static修饰的则被加载到方法区。

堆的优势是可以在程序运行时,动态地分配内存大小,但是正是由于这个原因,它的存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小和生存期是必须确定的,缺乏灵活性。

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

发布了110 篇原创文章 · 获赞 0 · 访问量 3688

猜你喜欢

转载自blog.csdn.net/jishulaozhuanjia/article/details/104921347