一、Java是一种更“纯粹”的面向对象程序设计语言
1、尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象程序设计语言C++和Java都是混合/杂合型语言,后者的设计者认为这种杂合性并不像C++中那么重要。C++之所以成为一种杂合语言主要是因为它支持与C语言的向后兼容,作为C的一个超集,它具有许多C语言不具备的特性,而这些特性使得C++在某些方面显得过于复杂。
2、Java中(几乎)一切都是对象,并且借助引用(reference)来操纵对象
(1)Java中(几乎)一切都是对象,因而可采用单一固定的语法——引用来操纵元素;(2)引用之于对象就像遥控器之于电视机,遥控器(引用)可以没有电视机(对象)与之关联而独立存在;
3、对象的存储位置
(1)寄存器:位于处理器内部,存取速度最快同时数量也极其有限,并且开发者无法直接控制。(2)栈:位于通用RAM中,存取速度仅次于寄存器,用于存放对象引用、变量值等。创建程序时,Java系统必须知道存储在堆栈内所有项的确切声明周期,以便上下移动堆栈指针——堆栈指针向下移动,则分配内存;若向上移动,则释放那些内存。每个方法在执行时都会创建自己的栈内存,用于存放局部变量,栈内存在方法结束时自动销毁。
(3)堆:也位于通用RAM,存取速度比堆栈慢,用于存放所有Java对象。编译器无需知道存储的数据在堆中存活多长时间,因而具有更大的灵活行。
(4)常量存储:常量永远不会改变,通常直接存放到程序代码内部。有时,在嵌入式系统中,常量直接存放到ROM中。
(5)非RAM存储:有些数据可以独立于程序之外,在程序没有运行时也可以存在。其中两个基本的例子是流对象(对象转化为字节流发送给另一台机器)和持久化对象(对象存放与磁盘上,在需要时,可以恢复成常规的基于RAM的对象)。
4、永远不需要销毁对象
(1)变量只可用于定义它的作用域之内:与C、C++类似,Java的作用域也是由花括号位置决定。不同的是,Java不允许在嵌套的块内外定义同名的变量。(2)对象在不被引用时,会被垃圾回收器自动销毁,因而不存在“内存泄漏”的问题。
二、创建新的数据类型:类
1、在Java中,你所做的全部工作就是定义类,产生这些类的对象,以及发送消息给这些对象。一旦定义了一个类,就可以在类中设
置两种类型的元素:字段(数据成员)和方法(成员函数)。
2、类的数据成员如果是基本数据类型(8种),即使没有初始化,Java也会确保它获得一个默认值:
数据类型 | 字节数 | 默认值 |
byte | 1 | (byte)0 |
short | 2 | (short)0 |
int | 4 | 0 |
long | 8 | 0L |
float | 4 | 0.0f |
double | 8 | 0.0d |
boolean | 1bit | false |
char | 2 | ‘\u0000’(null) |
但是,方法内部定义的变量如果没有初始化,直接使用,编译器就会报错而不会自动初始化为默认值。
3、通过对象名完成的方法调用通常被称为“发送消息给对象”,面向对象的程序设计通常简单地归纳为“向对象发送消息”。
4、在每个Java文件的开头,必须声明import语句,以便引入在文件代码中需要用到的额外类。注意,java.lang是默认自动导入到
每个java文件中的,无需开发者手动import导入。关于import和package的具体用法,可以参考这篇文档。
三、注释和嵌入式文档
1、Java中有两种注释风格,都是从C++中继承而来:“//”和“/**/”。
3、javadoc语法
(1)只能处理位于“/**”和紧接着的”*/”之间的内容;
(2)内容中包括两种方式:HTML标签:可以是Web文档中的任何标签(除<h1>外,因为javadoc会插入自己的标题)文档标签:即以“@”开头的命令,包括独立文档标签
(必须位于注释行的最前面)和行内文档标签(必须括于花括号内,可以位于javadoc注释中的任何地方);
(3)共有三种类型的注释文档:
/** 注释内容 */
/* 注释内容 */
//注释内容4、详细的规范可以参考《EffectiveJava中文第二版》第44条
参考资料:
《Java编程思想 (第4版)》