2.1 用引用操纵对象
- 每种编程语言都有自己的操作内存中元素的方式。
- 引用可以独立存在,也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。
- Java语言的一个特性:字符串可以用带引号的文本初始化。通常,必须对对象采用一种更通用的初始化方法。
2.2 必须由你创建所有对象
- 存储到什么地方
a. 寄存器:在处理器内部,Java不能直接操作。
b. 堆栈:位于通用RAM,通过堆栈指针操作,速度快,Java的对象引用存放在这里。
c. 堆:也位于RAM,用于存放所有的Java对象。编译器不需要知道存储的数据在堆里的存活时间。操作灵活,但进行存储分配的时候需要较多时间。
d. 常量存储:常量值通常直接存放在程序代码内部。可以存放在ROM中。
e. 非RAM存储:如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。流对象:对象转化成字节流,通常被发送给另一台机器;持久化对象:对象被存放在磁盘上。 - 特例:基本类型
a. 基础类型直接存储“值”,并置于堆栈中,因此更高效。
b. Java要确定每种基本类型所占存储空间的大小。但他们的大小不会随机器硬件架构的变化而变化。
c. 所有数值类型都有正负号,所以不用去寻找无符号的数值类型。
d. Java的自动包装功能将自动地将基本数据类型转换为包装器类型。
e. 高精度数字:Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。这两个类的方法,提供的操作与基本类型所能执行的操作相似。 - Java中的数组
a. Java的主要目标之一是安全性。
b. Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价。但由此换来的是安全性和效率的提高,因此付出的代价是值得的(并且Java有时可以优化这些操作)。
c. 当创建一个数组对象时,创建应用数组时,自动初始化为null,基本类型被初始化为0。
2.3 永远不要销毁对象
- 作用域
a. 作用域决定了在其内定义的变量名的可见性和生命周期。
b.Java里不允许隐藏较大作用域的变量,编译器会报告变量已经被定义过。 - 对象的作用域
a. Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。
b. Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别哪些不会再被引用的对象。随后释放这些对象的内存空间,以便其他新的对象使用。
2.4 创建新的数据类型:类
- class用于创建类型,这决定了某一类对象的外观与行为。
- 在类中设置两种类型的元素:字段(数据成员)和方法(成员函数)。
基本成员默认值,但是并不适用于“局部”变量。使用变量之前必须初始化,不然Java会报编译错误。
2.5 方法、参数和返回值
- Java的方法决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。
- Java中的方法只能作为类的一部分来创建。方法只能通过对象才能调用,且这个对象必须能执行这个方法的调用。
- 参数列表:在参数列表中传递的也是对象的引用,基本数据类型除外。
- return的用法,没有必要到方法结束时才离开,可以在任何地方返回。
2.6 构建一个Java程序
- 名字可见性
a. 为了给一个类库生成不会与其他名字混淆的名字,Java设计者希望程序员反过来使用自己的Internet域名。反转域名后,句点就用来代表子目录的划分。 - 运用其他构件
a. 为了解决类名冲突这个问题,必须消除所有可能的混淆情况。为实现这个目的,可以使用关键字import来准确地告诉编译器你想要的类是什么。 - static关键字
a. 一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。
b. 通过static关键字可以满足这两方面的需要。当声明一个事物时static时,就以为着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。
c. static创建的字段或方法,只存储一遍,所有的对象共享一个存储空间。
2.7 你的第一个Java程序
import java.util.*;
public class HelloDate{
public static void main(String[] args){ //String[] args用来存储命令行参数
System.out.println("Hello "+new Date());
}
}
System的许多其他的方法
public class ShowProperties {
//main()的第一行将显示从运行程序的系统中获取的所有“属性”,因此它可以向你提供环境信息
public static void main(String[] args) {
System.getProperties().list(System.out);
System.out.println(System.getProperty("user.name"));
System.out.println(
System.getProperty("java.library.path")
);
}
}
- 编译和运行
javac HelloDate.java //编译
java HelloDate //运行
2.8 注释和嵌入式文档
两种注释方式
/*我是注释*/
//我是注释
- 注释文档
a. 使用javadoc工具产生文档 - 语法
a. 所有javadoc命令都只能在“/**”注释中出现,和通常一样,注释结束也“*/”。
b. javadoc只能为public和protected成员进行文档注释。
/** 我是注释*/
- 嵌入式HTML
a. 所有类型的注释文档–类、域和方法–都支持嵌入式HTML - 一些标签示例
2.9 编码风格
- 类名的首字母大写
- 如果类名由几个单词构成,那么把它们并在一起,其中每个单词的首字母都采用大写形式。
- 驼峰风格
- 方法、字段以及对象引用名称等,公认的风格与类的风格一样。只是标识符的第一个字符采用小写。
2.10 总结
通过本章的学习,大家已经接触相当多的关于如何编写一个简单程序的Java编程知识。此外,对Java语言及它的一些基本思想也有了一个总体认识。