1、面向对象程序设计五大特征
- 所有东西都是对象。
- 程序是一大堆对象的组合,通过消息传递,各个对象知道自己该做些什么。
- 每个对象都有自己的存储空间,可容纳其他对象。
- 每个对象都有一种类型。每个对象都是某个类的实例。
- 同一类所有对象都能接受相同的信息。
类关键字‘friendly’:只能在此包“package”中使用’
2、方案的重复使用
为重复使用一个类,最简单的办法是仅直接使用那个类的对象,即创建一个成员对象。这个概念叫作“组织”——在现有类的基础上组织一个新类。
新建类时,优先考虑“组织对象”,而不是疯狂继承。
3、继承
- java中,继承通过extends来实现。
4、多态
upcasting向上造型:把衍生类型当做基本类型处理。是安全的。
即“我知道你是xxx基础类的东西,你自己能…,你自己去做吧。”
多态性:不知道对方的具体类型,但采取的行动是正确的。
实现多态性的方法,“动态绑定”,在C++中用“virtual”关键字进行动态绑定,而java的动态绑定是自动进行的。
5、单根结构
在java中,所有类最终从单独一个基础类继承,即Object。这种称为单根结构。
Java的一种通用类型:Object,Object可以容纳任何东西。
类型参数化:
C++中,用template(模板)关键字来实现类型参数化。
清除:
C++中,new出来的对象,必须明确删除。
6、多线程
在一个程序中,独立运行的片段叫做“线程”(Thread),利用其编程的概念就叫做“多线程处理”。
在多线程处理时,要特别注意共享资源问题,如两个线程不能将信息同时发送给一台打印机,为解决这个问题,在资源使用期间,该资源进入锁定状态,完成任务后释放。
在Java中需使用synchronized关键字进行资源锁定,其他类型的资源必须由
程序员明确锁定,这通常要求程序员创建一个对象,用它代表一把锁,所有线程
在访问那个资源时都必须检查这把锁
7、Java和因特网
7.1客户机/服务器计算
客户机/服务器系统的基本思想是我们能在一个统一的地方集中存放信息资源。
服务器(Server):信息仓库、用于投递信息的软件以及信息及软件所在的及其的联合。
客户(Client):与服务器通信,取回信息并适当处理,在远程机器显示。
7.2Web是个巨大的服务器
Web实际上就是规模巨大的客户机/服务器系统。
目前讨论得最多的脚本编制语言包括 JavaScript(它与 Java 没有任何关系;
之所以叫那个名字,完全是一种市场策略)
8、内存分配
有六个地方可以保存数据:
1、寄存器。
-
位于处理器内部,最快。
-
但寄存器数量有限,需编译器分配,我们无直接控制权。
2、堆栈。 -
速度仅次寄存器。
-
驻留在RAM(随机访问存储器)区域,可通过“堆栈指针”获得处理的直接支持。堆栈指针向下,创建新的内存;向上,释放内存。
-
Java编译器需准确知道堆栈内的数据长度和存在时间,这一限制影响了程序灵活性。
-
对象句柄,即对象管理者保存在堆栈,但Java对象不放其中。
3、堆。 -
内存池,也在RAM,保存Java对象。
-
堆(Heap):编译器不必知道要从堆里分配多少内存以及存在时间,故用堆保存数据得到很大的灵活性。创建一个对象,只需New。
-
代价:在堆里分配空间会花掉更长的时间。
4、静态存储。 -
“静态”(Static)指“位于固定位置”,也在RAM里。
-
Java对象永远不会放在静态存储空间。
5、常数存储。 -
常数值通常直接置于代码内部,安全。但有些常数需严格保护,可置入只读存储器(ROM)
6、非RAM存储。 -
流式对象、固定对象。
-
流式对象:对象会变成字节流,通常会发给另一台机器。
-
固定对象:对象保存在磁盘中
9、垃圾收集器
Java 有一个特别的“垃圾收集器”,它会查找用 new 创建的所有对象,并辨别其中哪些不再被引用。随后,它会自动释放由那些闲置对象占据的内存,以便能由新对象使用。这意味着我们根本不必操心内存的回收问题。
10、注释和嵌入文档
10.1 注释文档
- 用于提取注释的工具:javadoc,提取标记指示的信息以及毗邻注释的类名和方法名。
- javadoc输出一个HTML文件。
10.2 具体语法
- 所以的javadoc命令只能出现于"/*"注释中。
- 主要通过两种方式来使用javadoc。
1、嵌入的HTML。
2、使用文档标记(Doc Tags),文档标记是以“@”开头的命令,置于注释行的起始处,前导"*"会被忽略。 - javadoc只能为public、protected成员处理注释文档。而private和友好成员的注释会被忽略。
- 有三种类型的注释文档:类注释、变量注释、方法注释。一个类注释正好位于一个类定义之前,后同。
10.3 嵌入HTML
例子:
/**
* 您<em>甚至</em>可以插入一个列表:
* <ol>
* <li> 项目一
15
* <li> 项目二
* <li> 项目三
* </ol>
*/
/**
* <pre>
* System.out.println(new Date());
* </pre>
*/
- 在文档注释中,位于一行最开头的星号会被 javadoc 丢弃。同时丢弃的还有前导空格。
- javadoc 会对所有内容进行格式化,使其与标准的文档外观相符。
- 不要将
或
这样的标题当作嵌入 HTML 使用,因为 javadoc 会插入自己的标题,我们给出的标题会与之冲撞。 - 所有类型的注释文档——类、变量和方法——都支持嵌入 HTML。
10.4 @see:引用其他类
- 所有三种类型的注释文档都可包含@see 标记,它允许我们引用其他类里的文档。
格式:
@see 类名
@see 完整类名
@see 完整类名#方法名
10.5 类文档标记
- 随同嵌入 HTML 和@see 引用,类文档还可以包括用于版本信息以及作者姓名的标记。类文档亦可用于“接口”目的。
1、@version
格式:@version 版本信息
“版本信息”代表任何适合作为版本说明的资料,若在 javadoc 命令行使用了“-version”标记,就会从生成的 HTML 文档里提取出版本信息
2、@author
格式:@author 作者信息
“作者信息”包括您的姓名、电子函件地址或者其他任何适宜的资料,若在 javadoc 命令行使用了“-author”标记,就会专门从生成的 HTML 文档里提取出作者信息。
10.6 变量文档标记
变量文档只能包括嵌入的 HTML 以及@see 引用。
10.7 方法文档标记
除嵌入 HTML 和@see 引用之外,方法还允许使用针对参数、返回值以及违例的文档标记。
1、@param
格式:@param 参数名 说明
“参数名”是指参数列表内的标识符,而“说明”代表一些可延续到后续行内的说明文字。一旦遇到一个新文档标记,就认为前一个说明结束。可使用任意数量的说明,每个参数一个。
2. @return
格式:@return 说明
其中,“说明”是指返回值的含义。它可延续到后面的行内。
3. @exception
“违例”(Exception)
格式:@exception 完整类名 说明
“完整类名”明确指定了一个违例类的名字,它是在其他某个地方定义好的。而“说明”(同样可以延续到下面的行)告诉我们为什么这种特殊类型的违例会在方法调用中出现。
4. @deprecated
这是 Java 1.1 的新特性。该标记用于指出一些旧功能已由改进过的新功能取
代。该标记的作用是建议用户不必再使用一种特定的功能,因为未来改版时可能
摒弃这一功能。若将一个方法标记为@deprecated,则使用该方法时会收到编译
器的警告。