2.1 用引用操纵对象
可以单独有一个引用,并不需要一个对象与它关联。比如:
String s;
创建的只是引用,并不是一个对象。
2.2 必须由你创建所有对象
2.2.1 存储到什么地方
1. 寄存器:这是最快的存储区,因为它位于处理器内部。但数量极其有限,所以寄存器根据需求进行分配
2. 堆栈:位于通用RAM(随机访问存储器)中,当通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些Java数据存储在堆栈中——特别是对象引用,但Java对象并不存储在其中。
3. 堆:一种通用的内存池(也位于RAM区),用于存放所有的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存储多长时间。
4. 常量存储:常量存储通常直接存放在程序代码内部。有时,在嵌入式系统中,常量本身会和其他部分分隔离开,这种情况下,可以选择将其存放在ROM中。
5. 非RAM存储:数据完全存活于程序之外。比如流对象(文件存储在磁盘)和持久化对象(数据库)。
RAM-Random Access Memory易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,如计算机内存等。
ROM-Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BIOS芯片。存取速度很低,(较RAM而言)且不能改写。由于不能改写信息,不能升级,现已很少使用
2.2.2 特例:基本类型
基本类型不用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆栈中,因此更加高效。
Java要确定每个种基本类型所占存空间的大小。这种所占存储空间大小的不变性是Java程序比用其他大多数语言编写的程序更具可移植性的原因之一。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。
高精度数据
Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。虽然他们大体上属于“包装器类”,但两者都没有对应的基本类型。
2.2.3 Java中的数组
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。一旦Java看到null,就知道这个引用还没有指向某个对象。
2.3 永远不需要销毁对象
2.3.1 作用域
作用域(scope):作用域决定了在其内定义的变量名的可见性和生命周期。在java中,作用域由花括号的位置决定。在作用域里定义的变量只可用于作用域结束之前。
2.3.2 对象的作用域
当用new创建一个Java对象时,它可以存活于作用域之外。
{
String s = new String("a String");
} //End of scope
引用s的作用域终点就消失了。然而,s指向的String对象仍继续占据内存空间。在上面的例子中,我们无法再这个作用域之后访问这个对象,因为对它唯一的引用一句超出了作用域的范围。
内存释放?Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会被再引用的对象,随后,释放这些对象的内存空间,以便供其他对象使用。
2.4 创建新的数据类型:类
2.4.1 字段和方法
类中可以设置两种类型的元素:字段(数据成员)和方法(成员函数)
若类的某个成员是基本数据类型,即使没有进行初始化,Java也会确保它获得一个默认值。然后确保初始化的方法并不适用于局部变量(即并非某个类的字段)。
class A{
int x; //Java会初始化一个默认值:0
void function(){
int y; //编译器报错
}
}
每个对象都有用来存储其字段的空间;普通字段不能在对象间共享(static字段才可以)。
2.5 方法、参数和返回值
方法的基本组成部分包括:名称、参数、返回值和方法体。方法名和参数列表(方法签名)唯一地标识出某个方法。
调用方式:
- 通过对象调用。
- 通过类调用——static数据和方法。
2.5.1 参数列表
参数列表传递的信息像java中其他信息一样,采用的都是对象形式,且这些传递的实际上也是引用。
2.6 构建一个Java程序
2.6.1 名字可见性
反转域名
2.6.2 运用其他构件
import指示编译器导入一个包,也就是一个类库。
2.6.3 static关键字
当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法(类方法)或访问其static域(类数据)。
引用static变量的两种方法:
- 通过一个对象去定位;
- 通过类名直接引用(首选方法)。
static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间。
2.7 你的第一个java程序
public class HelloDate{
public static void main(String[] args){ // **static**使得main不需要创建实例即可运行。**args**用来存储命令行参数
System.out.println("Hello, it's ");// out是System类中的一个静态PrintStream对象。
System.out.println(new Date());
}
}
2.7.1 编译和运行
Java开发环境:比如JDK。安装好JDK之后,需要设定好路径信息,以确保计算机能赵傲javac(编译)和java(运行)这两个文件。
2.8 注释和嵌入式文档
单行注释://
跨行注释:始于/*,终于*/
2.8.1 注释文档
javadoc:是用于提取注释的工具,它是JDK安装的一部分。它采用Java编译器的某些技术,查找程序内的特殊注释标签。它不仅解析由这些标签标记的信息,也将毗邻注释的类名或方法名抽取出来。
javadoc输出的是一个HTML文件,可以用Web浏览器查看。
2.8.2 语法
所有javadoc命令都只能在“/**”注释中出现。使用javadoc的方式主要有两种:
- 嵌入HTML:javadoc通过生成的HTML文档传送HTML命令,这使你能够充分利用HTML
- 使用文档标签。
- 独立文档标签:是一些以“@”字符开头的命令,且要置于注释行的最前面。
- 行内文档标签:可以出现javadoc注释中的任何地方,它们也是以“@”字符开头,但要在花括号内。
javadoc只能为public和protected成员进行文档注释。private和包内可访问成员的注释会被忽略掉。
2.9 编码风格
- 类名的首字母要大写
- 驼峰风格
- 标识符的第一个字母采用小写