您的位置:

java思想,java思想pdf

本文目录一览:

JAVA编程思想一共有几章

一共 17 章

强烈建议你去买这本书!虽然电子文档很多,百度一下到处都是,但是不很方便!这本书看了真的思想都变了!!

第1章 对象入门

1.1 抽象的进步

1.2 对象的接口

1.3 实现方案的隐藏

1.4 方案的重复使用

1.5 继承:重新使用接口

1.5.1 改善基础类

1.5.2 等价和类似关系

1.6 多形对象的互换使用

1.6.1 动态绑定

1.6.2 抽象的基础类和接口

1.7 对象的创建和存在时间

1.7.1 集合与继承器

1.7.2 单根结构

1.7.3 集合库与方便使用集合

1.7.4 清除时的困境:由谁负责清除?

1.8 违例控制:解决错误

1.9 多线程

1.10 永久性

1.11 Java和因特网

1.11.1 什么是Web?

1.11.2 客户端编程

1.11.3 服务器端编程

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

1.12 分析和设计

1.12.1 不要迷失

1.12.2 阶段0:拟出一个计划

1.12.3 阶段1:要制作什么?

1.12.4 阶段2:开始构建?

1.12.5 阶段3:正式创建

1.12.6 阶段4:校订

1.12.7 计划的回报

1.13 Java还是C++?

第2章 一切都是对象

2.1 用句柄操纵对象

2.2 必须创建所有对象

2.2.1 保存在什么地方

2.2.2 特殊情况:主类型

2.2.3 Java中的数组

2.3 绝对不要清除对象

2.3.1 作用域

2.3.2 对象的作用域

2.4 新建数据类型:类

2.4.1 字段和方法

2.5 方法、自变量和返回值

2.5.1 自变量列表

2.6 构建Java程序

2.6.1 名字的可见性

2.6.2 使用其他组件

2.6.3 static关键字

2.7 我们的第一个Java程序

2.8 注释和嵌入文档

2.8.1 注释文档

2.8.2 具体语法

2.8.3 嵌入HTML

2.8.4 @see:引用其他类

2.8.5 类文档标记

2.8.6 变量文档标记

2.8.7 方法文档标记

2.8.8 文档示例

2.9 编码样式

2.10 总结

2.11 练习

第3章 控制程序流程

3.1 使用Java运算符

3.1.1 优先级

3.1.2 赋值

3.1.3 算术运算符

3.1.4 自动递增和递减

3.1.5 关系运算符

3.1.6 逻辑运算符

3.1.7 按位运算符

3.1.8 移位运算符

3.1.9 三元if-else运算符

3.1.10 逗号运算符

3.1.11 字串运算符+

3.1.12 运算符常规操作规则

3.1.13 造型运算符

3.1.14 Java没有“sizeof”

3.1.15 复习计算顺序

3.1.16 运算符总结

3.2 执行控制

3.2.1 真和假

3.2.2 if-else

3.2.3 反复

3.2.4 do-while

3.2.5 for

3.2.6 中断和继续

3.2.7 切换

3.3 总结

3.4 练习

第4章 初始化和清除

4.1 由构建器保证初始化

4.2 方法过载

4.2.1 区分过载方法

4.2.2 主类型的过载

4.2.3 返回值过载

4.2.4 默认构建器

4.2.5 this关键字

4.3 清除:收尾和垃圾收集

4.3.1 finalize()用途何在

4.3.2 必须执行清除

4.4 成员初始化

4.4.1 规定初始化

4.4.2 构建器初始化

4.5 数组初始化

4.5.1 多维数组

4.6 总结

4.7 练习

第5章 隐藏实施过程

5.1 包:库单元

5.1.1 创建独一无二的包名

5.1.2 自定义工具库

5.1.3 利用导入改变行为

5.1.4 包的停用

5.2 Java访问指示符

5.2.1 “友好的”

5.2.2 public:接口访问

5.2.3 private:不能接触

5.2.4 protected:“友好的一种”

5.3 接口与实现

5.4 类访问

5.5 总结

5.6 练习

第6章 类再生

6.1 合成的语法

6.2 继承的语法

6.2.1 初始化基础类

6.3 合成与继承的结合

6.3.1 确保正确的清除

6.3.2 名字的隐藏

6.4 到底选择合成还是继承

6.5 protected

6.6 递增开发

6.7 上溯造型

6.7.1 何谓“上溯造型”?

6.8 final关键字

6.8.1 final数据

6.8.2 final方法

6.8.3 final类

6.8.4 final的注意事项

6.9 初始化和类装载

6.9.1 继承初始化

6.10 总结

6.11 练习

第7章 多形性

7.1 上溯造型

7.1.1 为什么要上溯造型

7.2 深入理解

7.2.1 方法调用的绑定

7.2.2 产生正确的行为

7.2.3 扩展性

7.3 覆盖与过载

7.4 抽象类和方法

7.5 接口

7.5.1 Java的“多重继承”

7.5.2 通过继承扩展接口

7.5.3 常数分组

7.5.4 初始化接口中的字段

7.6 内部类

7.6.1 内部类和上溯造型

7.6.2 方法和作用域中的内部类

7.6.3 链接到外部类

7.6.4 static内部类

7.6.5 引用外部类对象

7.6.6 从内部类继承

7.6.7 内部类可以覆盖吗?

7.6.8 内部类标识符

7.6.9 为什么要用内部类:控制框架

7.7 构建器和多形性

7.7.1 构建器的调用顺序

7.7.2 继承和finalize()

7.7.3 构建器内部的多形性方法的行为

7.8 通过继承进行设计

7.8.1 纯继承与扩展

7.8.2 下溯造型与运行期类型标识

7.9 总结

7.10 练习

第8章 对象的容纳

8.1 数组

8.1.1 数组和第一类对象

8.1.2 数组的返回

8.2 集合

8.2.1 缺点:类型未知

8.3 枚举器(反复器)

8.4 集合的类型

8.4.1 Vector

8.4.2 BitSet

8.4.3 Stack

8.4.4 Hashtable

8.4.5 再论枚举器

8.5 排序

8.6 通用集合库

8.7 新集合

8.7.1 使用Collections

8.7.2 使用Lists

8.7.3 使用Sets

8.7.4 使用Maps

8.7.5 决定实施方案

8.7.6 未支持的操作

8.7.7 排序和搜索

8.7.8 实用工具

8.8 总结

8.9 练习

第9章 违例差错控制

9.1 基本违例

9.1.1 违例自变量

9.2 违例的捕获

9.2.1 try块

9.2.2 违例控制器

9.2.3 违例规范

9.2.4 捕获所有违例

9.2.5 重新“掷”出违例

9.3 标准Java违例

9.3.1 RuntimeException的特殊情况

9.4 创建自己的违例

9.5 违例的限制

9.6 用finally清除

9.6.1 用finally做什么

9.6.2 缺点:丢失的违例

9.7 构建器

9.8 违例匹配

9.8.1 违例准则

9.9 总结

9.10 练习

第10章 Java IO系统

10.1 输入和输出

10.1.1 InputStream的类型

10.1.2 OutputStream的类型

10.2 增添属性和有用的接口

10.2.1 通过FilterInputStream从InputStream里读入数据

10.2.2 通过FilterOutputStream向OutputStream里写入数据

10.3 本身的缺陷:RandomAccessFile

10.4 File类

10.4.1 目录列表器

10.4.2 检查与创建目录

10.5 IO流的典型应用

10.5.1 输入流

10.5.2 输出流

10.5.3 快捷文件处理

10.5.4 从标准输入中读取数据

10.5.5 管道数据流

10.6 StreamTokenizer

10.6.1 StringTokenizer

10.7 Java 1.1的IO流

10.7.1 数据的发起与接收

10.7.2 修改数据流的行为

10.7.3 未改变的类

10.7.4 一个例子

10.7.5 重定向标准IO

10.8 压缩

10.8.1 用GZIP进行简单压缩

10.8.2 用Zip进行多文件保存

10.8.3 Java归档(jar)实用程序

10.9 对象串联

10.9.1 寻找类

10.9.2 序列化的控制

10.9.3 利用“持久性”

10.10 总结

10.11 练习

第11章 运行期类型鉴定

11.1 对RTTI的需要

11.1.1 Class对象

11.1.2 造型前的检查

11.2 RTTI语法

11.3 反射:运行期类信息

11.3.1 一个类方法提取器

11.4 总结

11.5 练习

第12章 传递和返回对象

12.1 传递句柄

12.1.1 别名问题

12.2 制作本地副本

12.2.1 按值传递

12.2.2 克隆对象

12.2.3 使类具有克隆能力

12.2.4 成功的克隆

12.2.5 Object.clone()的效果

12.2.6 克隆合成对象

12.2.7 用Vector进行深层复制

12.2.8 通过序列化进行深层复制

12.2.9 使克隆具有更大的深度

12.2.10 为什么有这个奇怪的设计

12.3 克隆的控制

12.3.1 副本构建器

12.4 只读类

12.4.1 创建只读类

12.4.2 “一成不变”的弊端

12.4.3 不变字串

12.4.4 String和StringBuffer类

12.4.5 字串的特殊性

12.5 总结

12.6 练习

第13章 创建窗口和程序片

13.1 为何要用AWT?

13.2 基本程序片

13.2.1 程序片的测试

13.2.2 一个更图形化的例子

13.2.3 框架方法的演示

13.3 制作按钮

13.4 捕获事件

13.5 文本字段

13.6 文本区域

13.7 标签

13.8 复选框

13.9 单选钮

13.10 下拉列表

13.11 列表框

13.11.1 handleEvent()

13.12 布局的控制

13.12.1 FlowLayout

13.12.2 BorderLayout

13.12.3 GridLayout

13.12.4 CardLayout

13.12.5 GridBagLayout

13.13 action的替用品

13.14 程序片的局限

13.14.1 程序片的优点

13.15 视窗化应用

13.15.1 菜单

13.15.2 对话框

13.16 新型AWT

13.16.1 新的事件模型

13.16.2 事件和接收者类型

13.16.3 用Java 1.1 AWT制作窗口和程序片

13.16.4 再探早期示例

13.16.5 动态绑定事件

13.16.6 将商业逻辑与UI逻辑区分开

13.16.7 推荐编码方法

13.17 Java 1.1 UI API

13.17.1 桌面颜色

13.17.2 打印

13.17.3 剪贴板

13.18 可视编程和Beans

13.18.1 什么是Bean

13.18.2 用Introspector提取BeanInfo

13.18.3 一个更复杂的Bean

13.18.4 Bean的封装

13.18.5 更复杂的Bean支持

13.18.6 Bean更多的知识

13.19 Swing入门

13.19.1 Swing有哪些优点

13.19.2 方便的转换

13.19.3 显示框架

13.19.4 工具提示

13.19.5 边框

13.19.6 按钮

13.19.7 按钮组

13.19.8 图标

13.19.9 菜单

13.19.10 弹出式菜单

13.19.11 列表框和组合框

13.19.12 滑杆和进度指示条

13.19.13 树

13.19.14 表格

13.19.15 卡片式对话框

13.19.16 Swing消息框

13.19.17 Swing更多的知识

13.20 总结

13.21 练习

第14章 多线程

14.1 反应灵敏的用户界面

14.1.1 从线程继承

14.1.2 针对用户界面的多线程

14.1.3 用主类合并线程

14.1.4 制作多个线程

14.1.5 Daemon线程

14.2 共享有限的资源

14.2.1 资源访问的错误方法

14.2.2 Java如何共享资源

14.2.3 回顾Java Beans

14.3 堵塞

14.3.1 为何会堵塞

14.3.2 死锁

14.4 优先级

14.4.1 线程组

14.5 回顾runnable

14.5.1 过多的线程

14.6 总结

14.7 练习

第15章 网络编程

15.1 机器的标识

15.1.1 服务器和客户机

15.1.2 端口:机器内独一无二的场所

15.2 套接字

15.2.1 一个简单的服务器和客户机程序

15.3 服务多个客户

15.4 数据报

15.5 一个Web应用

15.5.1 服务器应用

15.5.2 NameSender程序片

15.5.3 15.5.3 要注意的问题

15.6 Java与CGI的沟通

15.6.1 CGI数据的编码

15.6.2 程序片

15.6.3 用C++写的CGI程序

15.6.4 POST的概念

15.7 用JDBC连接数据库

15.7.1 获得学习示例

15.7.2 查找程序的GUI版本

15.7.3 JDBC API为何如何复杂

15.8 远程方法

15.8.1 远程接口概念

15.8.2 远程接口的实施

15.8.3 创建根与干

15.8.4 使用远程对象

15.8.5 RMI的替选方案

15.9 总结

15.10 练习

第16章 设计范式

16.1 范式的概念

16.1.1 单子

16.1.2 范式分类

16.2 观察器范式

16.3 模拟垃圾回收站

16.4 改进设计

16.4.1 “制作更多的对象”

16.4.2 用于原型创建的一个范式

16.5 抽象的应用

16.6 多重派遣

16.6.1 实现双重派遣

16.7 访问器范式

16.8 RTTI有害吗

16.9 总结

16.10 练习

第17章 项目

17.1 文字处理

17.1.1 提取代码列表

17.1.2 检查大小写样式

17.2 方法查找工具

17.3 复杂性理论

17.4 总结

17.5 练习

java编程思想怎么理解?

说说我个人的理解:

java编程思想并不是一本适合初学者看的书,起码要对面向对象有了一定的了解之后在看这本书,这本书我也有,断断续续的看,到现在看完一多半了,有的地方并没有完全理解,我觉得,好书,是不可能一遍就看懂的,而且看一遍也不能完全理解,如果有时间的话,要反复的看,随着自己编程经验的增加,理解也会越来越深入。

如果你没有任何的基础,建议先学一下C语言,把变量,函数,if,else,for循环这些基本的先掌握了,这些东西,是所有编程语言所共同的。

我不知道你的时间是否充裕,想学java的话,先学基础(j2se),如果以后想学j2ee,学完基础后要学习java web,包括html,javascript,css,servlet,jsp,学完这些之后,开始学习一些框架,像struts,spring,hibernate等等。要学的东西挺多的,如果是自学的话,我估计最少要1年,所以如果想学java,就要做好准备,不断学习的准备!

希望以上这些对你有帮助!

学习java最重要的思想是什么

当然是面向对象的思想咯。  OOP的许多原始思想都来之于Simula语言,并在Smalltalk语言的完善和标准化过程中得到更多的扩展和对以前的思想的重新注解。可以说OO思想和OOPL几乎是同步发展相互促进的。与函数式程序设计(functional-programming)和逻辑式程序设计(logic-programming)所代表的接近于机器的实际计算模型所不同的是,OOP几乎没有引入精确的数学描叙,而是倾向于建立一个对象模型,它能够近似的反映应用领域内的实体之间的关系,其本质是更接近于一种人类认知事物所采用的哲学观的计算模型。由此,导致了一个自然的话题,那就是OOP到底是什么?[DT 1988][B.S 1991] .。在OOP中,对象作为计算主体,拥有自己的名称,状态以及接受外界消息的接口。在对象模型中,产生新对象,旧对象销毁,发送消息,响应消息就构成OOP计算模型的根本。

对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象。原型的概念已经在认知心理学中被用来解释概念学习的递增特性,原型模型本身就是企图通过提供一个有代表性的对象为基础来产生各种新的对象,并由此继续产生更符合实际应用的对象。而原型-委托也是OOP中的对象抽象,代码共享机制中的一种。一个类提供了一个或者多个对象的通用性描叙。从形式化的观点看,类与类型有关,因此一个类相当于是从该类中产生的实例的集合。而这样的观点也会带来一些矛盾,比较典型的就是在继承体系下,子集(子类)对象和父集(父类)对象之间的行为相融性可能很难达到,这也就是OOP中常被引用的---子类型(subtype)不等于子类(subclass)[Budd 2002]。而在一种所有皆对象的世界观背景下,在类模型基础上还诞生出了一种拥有元类(metaclass)的新对象模型。即类本身也是一种其他类的对象。以上三种根本不同的观点各自定义了三种基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型。而这三种对象模型也就导致了许多不同的程序设计语言(如果我们暂时把静态与动态的差别放在一边)。是的,我们经常接触的C++,Java都是使用基于类的对象模型,但除此之外还有很多我们所没有接触的OOPL采用了完全不一样的对象模型,他们是在用另外一种观点诠释OOP的内涵。

什么是类型(type)?

类型以及类型系统的起源以及研究与发展是独立于OOP的。早在五十年代的FORTRAN语言编译器实现中,就已经采用类型系统作为类型检查的一种手段。广义的类型一般被定义为一种约束,也就是一种逻辑公式。而在对类型的研究过程中产生多种方法,比如[CW 1985]等。而代数方法(algebraic approach)是一种非常好的建立类型的形式化规范的方法。代数中的一个类型对应于一系列元素,在它们之上定义代数操作。同时在此基础上二阶λ演算已经被用于继承和模板所支持的模型。在上面两种方法中,类型被认为是一系列满足确定约束条件的元素,更抽象的方式可以把一个类型当作规定一个约束条件,如果我们规定的约束条件越好,相对应的被定义元素的集合就越精密,所以逻辑公式(logical formulas)就成为描叙类型特征的最合适工具。在这里,我们不想深入的探究对于类型理论的各种不同的数学模型,我们需要明白的是类型(type)以及类型理论这个在编程语言中经常应用到的概念的内涵是极其丰富的,而其自身理论的发展并非局限于OOP之中,但当两者相结合的时候就对我们的程序观产生了巨大的影响。

类(class),类型(type),接口(interface)

这三个概念是在OOP中出现频率最多,也最容易混淆的。而对于这三个概念的澄清也是文章写作的初衷。让我们先看看大师们对于这三个概念的描叙----

“The fundamental unit of programming in Java programming language is the class, but the fundamental unit of the object-oriented design is the type.while classes define types,it is very useful and powerful to be able to define a type without defining a class.Interface define types in an abstract form as a collection of methods or other types that form the contract for the type.” [Jams 2000]。

“In C++,A class is a user definite type”[B.S 1998]。

“A type is a name used to denote a particular interface……An object may have many types,and widely different objects can share a type.Part of an object’s interface may be characterized by one type ,and other parts by other types.Two objects of the same type need only share parts of their interface.Interface can contain other interface as subset.We say that a type is a subtype of another if its interface contain the interface of its supertype.Often we speak of a subtype inheriting the interface of its supertype”[Gamma 1995]

在其中,一共出现了四个概念:类(class),类型(type),接口(interface)以及契约(contract)。这里我们说到的类型和上面提到的类型有所不同,是狭义的OOP中的类型。为了理解这几个概念,我先划分出三个概念域:一个是针对现实世界的,一个是针对特定程序设计范型的(在这里就是OO设计范型),最后一个是针对编译器实现的。也就是说,在现实世界中的概念必须有一种手段映射到OO范型中去,而OO范型中的概念也应该在编译器实现中有相同的概念对应。由此,我们可以这样说,类是做为现实世界中的概念,而传统的OOPL都会提供class关键字来表示对现实世界模拟的支持。而接口,是作为OO程序设计范型中与类对应的一个概念。在OO设计中,我们所要做的就是针对接口进行设计和编程,而接口的实质含义就是对象之间的一种契约。而类型就是编译器实现中针对类和接口所定义的对应概念。可以这样说,类是现实世界中存在的客观概念,是唯物的。接口是设计人员定义出来的,存在于设计人员心中的概念,是唯心的。而类型是类和接口这两种概念的编译器实现的映射概念,也是唯物的。类型主要是用来指导编译器的类型检查的谓词,类是创建现实对象的模板,接口是OO设计中的关键概念。这三个概念相互区别(分别位于不同的概念域),又相互联系(都是代表相同的概念的不同概念域的映射)。有了上面的理解,我们看看下面最常见的Java语句:

people a=new man();

这代表了什么?程序员向编译器声明了一个people类型(type)的对象变量a,而对象变量a本身却指向了一个man类(class)的实体(而在编译器中理解是对象变量a指向了一个类型为man的实体)。再让我们回到[Jams 2000],其中句子的根本含义我们可以概括如下:声明一个类或者一个接口都同时向编译器注册了一个新的类型,而此类或者接口以及类型都是共享同样的一个名字。也就是说。编译器所能理解的全部都是类型,而程序员的工作是把现实中的类概念转化为设计中的接口概念,而编译器对应于上两种概念都有直接的支持,那就是一个类声明或者接口声明在编译器的理解来看就是一个类型声明。但是反过来却不一定成立。一个类可以有多个接口(一个类完全有可能实现了设计人员的多个契约条件),同时也就可能有多个类型(因为类型不过是接口这个设计域内的概念在编译器中的实现)。

多态,替换原则,对象切割

多态作为OO中的核心机制之一拥有着丰富的内涵。顾名思义,多态就是一种名称多种形态的意思。其主要有三种形式:函数多态,对象变量多态,泛型多态。函数多态主要包括函数重载(overload)和改写(overriding)。泛型多态(genericity)主要是提供了一种创建通用工具的方法,可以在特定的场合将其特化。在这里,我们重点要考量的是对象变量多态。在理解对象变量多态之前,我们首先了解一下OO核心机制之一的替换原则。静态类型的OOPL的一个特征就是一个变量所包含的值(value)的类型可能并不等于这个变量所声明的类型,在传统的编程语言中并不具备这样的特征,因为我们不可能把声明为整型的变量赋上字符串的变量值。而替换原则发生作用的情况就隐含的描叙了两种不同类型所具有的关联----类型继承。Barbara Liskov曾经这样描叙替换原则以及起作用的类型之间的关联:对于类型为S的每个对象s,存在一个类型为T的对象t,对于根据类型T所定义的所有程序P,如果用对象s替换对象t,程序P的行为保持不变,那么类型S就是类型T的子类型[Liskov 1988]

在理解了多态以及替换原则后,我们可以继续深入理解继承与替换原则相结合所带来的新的观点。可以说继承与替换原则的引入影响了几乎所有的OOPL,包括类型系统,值语义/引用语义,对象内存空间分配等等。下面,我将试图逐步的拨开其中的各种因果。

首先考虑,people a; 这样的代码在编译器中将如何实现?可以肯定是首先将把类型people绑定到对象a上,然后必须为对象a分配空间。同时,我们创建people的子类man,由于man IS A people。根据多态以及替换原则,我们当然可以让对象a保存一个man类型的值(这就是替换原则的表现)。这是一种直观的描叙,但在编程语言的实现过程中就出现一些困难。我们知道继承是一种扩展接口与实现的方式,那么我们就很难保证man类型不对people类型做扩展,而一旦做出扩展,我们如何能用存储people对象的空间去存储man类型的对象值呢?

people a;

man b=new man();

a=b;

这样的代码将首先把b对象进行切割,然后再存储到a对象空间去。然而这并不是我们所期望的。那么,为了支持OOP的继承,多态,替换原则,但却需要避免对象切割的发生,面对对象a我们将采用何种分配空间模型呢?常用的有下面三种方式:

1, 只为a分配基类people的存储空间,不支持对象多态以及替换原则。这样的模型内存分配紧凑,存储效率很高。

2, 分配继承树中的最大类对象所需要空间(在这里是man类的对象值空间),这样的模型简单,同时可以实现多态和替换原则而避免对象切割问题,但是十分浪费内存空间十分明显。

3, 只分配用于保存一个指针所需要的存储空间,在运行时通过堆来分配对象实际类型所需要的空间大小,这样也可以实现多态和替换原则而避免对象切割问题。(也就是说a只是一个对象的引用,而不是真实的对象,真实对象的生成必须靠程序员显式的声明)。

对于上面提到的三种内存模型,1和3都被一些程序设计语言所采用。相信说到这里,大家应该开始慢慢明白了。是的,C++作为C语言的继承者,对于效率的追求迫使它必须采用第一种最小静态空间分配的方式,由于基于栈空间的程序运行效率要比基于堆空间的程序运行效率高出许多,所以C++允许用栈空间保存对象,但同时也允许堆空间保存对象,可以说C++是采用了1和3两种相混合的内存模型,而C++中基于1内存模型的对象,也就是说基于栈内存空间的对象是没有办法体现多态和替换原则的(请思考一下在C++中什么对象是基于栈的),而基于3内存模型的对象将支持多态和替换原则(又想一想在C++中什么对象是基于堆的)。这里,我们终于可以揭开第一层迷雾了,很多人都知道在C++中只有指针和引用才能支持对象的多态行为,但是为什么会如此?上面做出了最好的解释。

Java语言由于设计理念和C++有着很大的区别,它采用的是第3种对象模型,一切对象(除了基本类型对象)都是基于堆分配的。这也是Java语言必须采用虚拟机的原因所在。在C++中很大一部分对象是不需要程序员进行管理的(静态空间对象),而在Java中,如果不采用虚拟机机制,所有的对象都需要程序员管理,而这样的开发代价将是巨大而不现实的。这也就揭开了第二层迷雾,当我们在对比C++和Java语言的时候总是为虚拟机是否有其价值而争论不休,但当你抛开所谓的好与不好的简单讨论,进入到其语言本身的内在对象存储本质的时候,也许对于各种声音才会有一个属于自己的清醒认识。

让我们继续望下走,不同的对象内存分配模型直接影响到其程序设计语言的赋值的含义。在各种编程语言中,赋值可以给出两种不同的语义解释:复制语义和指针语义。很明显,由于C++支持两种相混合的对象存储模型(但是默认的存储方式是栈存储),所以在C++中默认赋值语义采用的是前者,但C++同时提供了指针语义的功能支持(在拷贝构造函数和=运算符重载中用户进行自定义)。而在Java中采用的是后者。这也就是我们揭开的最后一道迷雾,不同的对象存储模型直接导致了不同的赋值语义。

面向对象的计算模型和可计算性

编程就是用计算所需要的指令构成一种运算装置,无论我们的程序设计思想以及程序设计语言如何发展和提高,最终我们所使用的底层计算数学模型并没有改变。但高级程序设计语言给我们带来的变革是在其语言环境中构建起了一个全新的,更抽象的虚拟计算模型。Smalltalk语言引入的对象计算模型从根本上改变了以前的传统计算模型,以前的计算模型突出的是顺序计算过程中的机器状态,而现在的对象计算模型突出的对象之间的协作其计算结果由参加计算的所有的对象的状态总体构成。而由于对象本身具有自身状态,我们也可以把一个对象看成是一个小的计算机器。这样,面向对象的计算模型就演变成了许多小的计算机器的合作计算模型。图灵机作为计算领域内的根本计算模型,精确的抓住了计算的要点:什么是可计算的,计算时间和空间存储大小开销有多大。计算模型清楚的界定了可计算性的范围,也就界定了哪些问题是可求解,哪些问题是不可求解的。OOP为程序员提供了一种更加抽象和易于理解的新的计算模型,但其本身并没有超越冯.诺依曼体系所代表的图灵机数学计算模型。所以我们不能期望OOP能帮助我们解决更多的问题,或者减少运算的复杂度。但OOP却能帮助我们用一种更容易被我们所理解和接受的方式去描叙和解决现实问题。

java的核心思想是什么?

朋友你好,

我想你已经看过java的基础书籍了,至于你提出这个问题我想你是不明白书上解释的意义。

JAVA的核心思想:面向对象,一切事物皆对象。而面向对象的四个特性才构成了面向对象。下面我将不会为你解释概念,只为你举出一些例子帮助你理解:

1.抽象:比如,我们将水果看做一个对象,而水果中又有苹果、梨子等等一系列的分类,在我们眼中,水果是对象,而苹果、梨子等也都是对象,对一个苹果而言,你会关心这个苹果产自哪里,苹果是姓什么吗?不会,这就是抽象,去掉我们不关心的,我们只关心它就是个苹果

2.继承:继续上面我们将水果看做一个对象,那么所有的水果都有颜色、味道等一系列属性,而这些属性在苹果、梨子等都是一定会有的,那么我们的苹果就可以继承于水果,因为它具有水果的一切特性,但是它还有自己的特性,这就便于我们自己对其定义新属性

3.封装:继续上面,水果的属性有很多,颜色、味道等等,我们怎么才能表达出最完整的水果?这就是封装,将水果的特性包装在一个javabean,这样一个完美的水果就诞生了

4. 多态性:接着上面,一个苹果具有水果的全部特性,但是仅仅是这样吗?苹果还能作为蔬菜做饭(如苹果酱等),那么我们怎么才确定它和蔬菜的关联呢?这就是多态了,它不仅有一个水果的特性还有其他种类的特性,在具有水果的全部特性前提下(继承),我们就需要为苹果添加一个蔬菜的接口,接口中定义了蔬菜的特性方法,但是我们不必像继承那样实现所有的方法,我们只需要实现需要的做饭这一个特性方法就行了,这就是接口,这就是多态

说了这么多,仅仅是个人体会,仅供参考,有不对的地方希望原理。

希望能对你有帮助。

Java面向对象的程序设计思想是什么?

面向对象的程序设计简称OOP是当今主流的程序设计范型,面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。万物皆对象的概念,由具有共同特征和行为的对象抽象出此类对象的模型称之为“类”

Java编程大神,常常说的Java编程思想是什么?

编程思想的形成,靠的是去实践,去练习不知道你java现在学到什么程度了我就从头说起吧 首先学习的是java的特性(安全,跨平台),学习java的语法,一些常用的类等等这时候你可以做一些简单的练习比如书上的例子你写到电脑上,运行,看看结果,一句一句的分析。每行代码干什么的,然后试着去改变变量的值,修改一些语句。慢慢培养自己,熟悉java。但是要注意!你写的根本就不是java程序,为什么呢?你根本就没有用到java的特点,比如类,继承,封装,多态....没有这些,就是C语言用java语法写了一遍。熟练的掌握java的基础知识,这样你就可以试着写小程序了,推荐你写一些游戏,慢慢培养自己设计的能力。比如扫雷游戏吧,整个游戏要分为几个部分,计时器,计雷器,雷区,界面,菜单....在将功能细化,比如每一个雷块都是一个对象。。。对象有许多的方法。。。。慢慢的培养自己面向对象程序设计的思路。 一个完整的程序写成了,你就会对编程有自己的把握了,你就可以试着写更大项目。慢慢的你就成了老鸟。。。回过头看自己刚学java的时候写的游戏,就会发现架构不好,设计不好,代码重用度不好,扩展性不好。。。。 学java不难,只要肯坚持,多用头脑去思考,也别想着一口吃成胖子