尽管java是基于C的,但是相比之下,java是一种更“纯粹”的面向对象程序设计语言。
2.1 用引用操纵对象
一切都视为对象,因此可采用单一固定的语法。尽管这一切都看作对象,但操纵的标识符实际上是对象的一个“引用(reference)”。
java语言的一个特性:字符串可以用带引号的文本初始化。通常,必须对对象采用一种更通用的初始化方法。
2.2 必须由你创建所有对象
一旦创建了一个“引用”,就希望它能与一个新的对象相关联。通常用new操作符来实现这一目的。
2.2.1 存储到了什么地方
(1)寄存器
这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但寄存器数量有限,所以寄存器根据需求进行分配。不能直接控制,也不能在程序中感觉到寄存器存在的任何痕迹。
(2)堆栈
位于通用RAM(随机访问存储器)中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放内存。仅次于寄存器。
(3)堆
一种通用的内存池,也位于RAM区,用于存放所有的java对象。堆相当于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此在堆里分配存储有很大的灵活性。但用堆进行存储分配和清理可能比用堆栈进行存储分配需要更多的时间。
(4)常量存储
常量值通常存放在程序代码内部,这样做是安全的,因为它永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分隔离开,所以在这种情况下,可以选择将其存放在ROM(只读存储器)中。
(5)非RAM存储
如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
流对象:对象被转化成字节流,通常被发送给另一台机器。
持久化对象:对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。
2.2.2 特例:基本类型
“基本类型”之所以特殊,是因为不是用new来创建变量,而是创建一个并非是引用的“自动变量”。这个变量直接储存“值”,并置于堆栈中,因此更加高效。
boolean (true false) 包装器类型 Boolean
char(16-bit) Character
byte(8-bits) Byte
short(16-bits) Short
int(32-bits) Intrger
long(64-bits) Long
float(32-bits) Float
double(64-bits) Double
void void
高精度数字:BigInteger 和 BigDecimal(二者都没有相应的基本类型)。能作用于int和float的操作,也同样能作用于BigInteger 和 BigDecimal 。只不过必须以方法调用方式取代运算符方式来实现。
2.2.3 java中的数组
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。一旦java看到null,就知道这个引用还没有只想某个对象。在使用任何引用前,必须为其指定一个对象;如果试图使用一个还是null的引用,在运行时将会保错。
存放基本数据类型的数组,同样,编译器也能确保这种数组的初始化,因为它将这种数组所占的内存全部置零。
2.3永远不需要销毁对象
2.3.1 作用域
作用域决定了在其内定义的变量名的可见性和生命周期。在C、C++和java中,作用域由花括号的位置决定。
2.3.2 对象的作用域
java对象不具备和基本类型一样的生命周期。当new一个对象的时候,它可以存活于作用域之外。new一个对象,引用在作用域终点就会消失,但是指向的对象仍继续占据内存空间。
java的垃圾回收器用来监视new创建的所有对象,并辨别哪些不会在被引用。随后释放这些对象的内存空间,以便其它新的对象使用。
内存泄漏:程序员忘记释放内存而产生的问题。
2.4 创建新的数据类型:类
2.4.1 字段和方法
一旦定义了类,就可以在类中设置两种类型的元素:字段(有时被称为数据成员)和方法(有时被称为成员函数)。如果字段是某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象(使用new来实现)相关联。
DataOnly类出了保存数据外没有别的用处,因为它没有任何成员方法。
基本成员变量默认值:若类的成员是某个基本数据类型,即使没有进行初始化,java也会确保它获得一个默认值。当变量作为类的成员使用时,java才会确保给定其默认值。但是初始值对程序可能是不正确的,甚至是不合法的。所以最好明确地对变量进行初始化。
2.5 方法 、参数和返回值
java的方法决定了一个对象能够接受什么样的消息。方法的基本组成备份包括:名称、参数、返回值和方法体。
方法只有通过对象才能被调用,且这个对象必须能执行这个方法调用。
2.5.1 参数列表
方法的参数列表指定要传递给方法什么样的信息。这些信息采用的都是对象形式。因此,在参数列表中必须指定每个所传递对象的类型及名字。这里的传递实际上也是引用,并且引用的类型必须正确。
2.6 构建一个java程序
2.6.1 名字可见性
java通过反转域名来避免命名发生冲突。
2.6.2 运用其它构件
import指示编译器导入一个包,也就是一个类库。
2.6.3 static关键字
生命一个事物是stataic时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
2.7 你的第一个程序
2.7.1 编译和运行
2.8 注释和嵌入式文档
// /** */ /* */
2.8.1 注释文档
javadoc用于提取注释的工具,它是jdk安装的一部分。
javadoc输出的是一个HTML文件,可以用web浏览器查看。
2.8.2 语法
所有的javadoc命令都只能在“/** ”注释中出现。 使用javadoc的方式主要由两种:嵌入HTML, 或使用“文档标签”。独立文档标签是使用“@”字符的,且要置于注释行的最前面。“行内文档标签”则可以出现在javadoc注释中的任何地方,也是以“@”字符开头,但要在花括号内。
共有三种类型的注释文档,分别对应于注释位置后面的三种元素:类、域和方法。
注:javadoc只能为public和projected成员进行文档注释。private和包内可访问成员的注释可能被忽略掉。
2.8.3 嵌入式HTML
javadoc通过生成的HTML文档传送HTML命令,这使你能充分利用HTML。主要目的还是对代码进行格式化。
所有类型的注释文档——类、域和方法——都支持嵌入式HTML
2.8.4 一些标签实例
(1) @see : 引用其他类
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method-name
上述每种格式都会在生成文档中加入一个具有超链接的“see also”条目。
(2){@link package.class#member label}
该标签与@see标签类似,只是它用于行内,并且是用“label”作为超链接文本而不用“see also”
(3){@docRoot}
该标签产生到文档根目录的相对路径,用于文档树页面的显示超链接。
(4){@inheritDoc}
该标签从当前这个类的最直接的基类中继承相关文档到当前的文档注释中。
(5)@version
该标签的格式如下:@version version-information
其中,“version-information”可以是任何你认为适合包含在版本说明中的重要信息。
(6)@author
@author author-informatioin 姓名
(7)@since
该标签允许你指定程序订最早使用的版本,可以在HTML java文档中看到它被用来指定所用的jdk的版本
(8)@param
@param parameter-name description
方法的参数名 可延续数行的文本
(9)@return
@return descript
返回值
(10) @throws
@throws fully-qualified-class-name descript
第二个参数表示给出一个异常类无歧义的名字,第三个参数告诉你为什么此特殊类型的异常会在方法调用中出现
(11)@deprecated
该标签用于指出一些就特性已由改进的新特性取代,建议用户不要使用这些就特性,因为在不久的将来它们可能会被删除。
2.8.5 文档示例
2.9 编码风格
在“Java编程语言编码约定”中是这样规定的:类名的首字母要大写;如果类名由几个单词构成,那么把它们并在一起,其余每个内部单词的首字母都要大写形式。
原文:https://www.cnblogs.com/wangjun119/p/9986748.html