1. 用引用操纵对象
一切都看作为对象,操纵的标识符实际上是对象的一个”引用”,如果想操纵一个词或句子,则可以创建一个String引用:
|
|
创建了一个引用,并不是对象.此时向s发送一个信心,就会返回一个运行错误.着是因为S实际上没有与任何事物相关联.因此,一种安全的做法是:创建一个引用的同时便进行初始化.
|
|
Java语言的一个特性:字符串可以用带引号的文本初始化.通常,必须对对象采用一种更通用的初始化方法.
2.必须由你创建所有对象
|
|
一旦创建了一个引用,就希望它能与一个新的对象相关联,通常用new操作符来实现这一目的.new关键字的意思是”给我一个新的对象.”
2.1 存储到什么地方
有五个不同的地方可以存储数据:
- 寄存器:它位于处理器内部,但是寄存器的数量极其有限,所以寄存器根据需求进行分配.
- 堆栈:位于通用RAM(随机访问寄存器)中,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针.尽管Java数据存储在堆栈中,但是Java对象并不存储于其中.
- 堆:一种通用的内存池(也位于RAM区),用于存放所有的Java对象,当需要一个对象时,只需要new写一行简单的代码,当执行这行代码时,会自动在堆里面进行存储分配.
- 常量存储:常量值通常直接存放在程序代码内部,这样很安全,因为不会被改变.
- 非RAM存储:数据完全存货在程序之外,最基本的例子是流对象和持久化对象.在流对象中,对象转换成字节流,通常被发送到另一台机器.在”持久化”对象中,对象被存放于硬盘上,即使程序终止,它们仍可以保持自己的状态.
2.2 特例:基本类型
在程序设计中经常用到的一系列类型,它们需要特殊对待.它们称之为”基本”类型.是因为new将对象存储在”堆”里,故用new创建一个对象,往往不是特别有效.所有Java往往不用new来创建变量,而是创建一个并非是引用的”自动”变量.这个变量直接存储”值“,并置于堆栈中,因此更加有高效.
基本类型都具有包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型.
|
|
也可以这样写:
|
|
高精度数字
- BigInteger:支持任意精度的整数.
- BigDecimal:支持任意精度的定点数.
2.3 Java中的数组
当创建了一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null.一旦Java看到null,就知道这个引用还没有指向某个对象.在引用任何引用前,都必须为其指定一个对象,否则会报错.
2.3.1 作用域
作用域决定了在其内定义的变量名的可见性和生命周期.如:
|
|
这样的代码在Java上不允许这样写,编译器将会报告变量X已经被定义过.所以,在C和C++里将一个较大作用域的变量”隐藏”起来的做法,在Java中是不被允许的.
2.3.2 对象的作用域
Java对象不具备基本类型的一样的生命周期,当用new创建一个Java对象时,它可以存活于作用域之外.
|
|
引用s在作用域中点就消失了.然而,s指向的String对象仍继续占据内存空间.在这一小段代码中,我们无法再这个作用域之后访问对象,因为对它唯一的引用已超出了作用域的范围.
Java提供垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会被引用的对象.随后,释放这些对象的内存空间,以便供其他新的对象使用.
2.4 创建新的数据类型:类
|
|
引入了新的类型.然而,你可以用new来创建这种类型的对象:
|
|
2.4.1 字段和方法
字段我们有时被称为(数据成员)和方法我们有时被称为(成员函数).字段可以是任何类型的对象,可以通过引用与其进行通信,也能为基本类型的一种.字段如果是对某个对象的引用,必须将其初始化引用.
如:
|
|
|
|
int i;
Java会在编译时会返回一个错误,告诉你变量没有初始化.
2.5 方法、参数和返回值
Java的方法决定了一个对象能够接收什么样的信息.
|
|
Java中的方法只能通过对象才能调用.
|
|
这种调用方法的行为通常被称为发送消息给对象.
2.5.1 参数列表
如果参数被设为String类型,就必须传递一个String的对象;否则,编译器会抛出错误!
return 表示它已经做完,离开此方法!
2.6 构建一个Java程序
|
|
2.6.1 static关键字
当生命一个事物是static时,就意味着某个域或方法不会与包含它的那个类的任何对象实例关联在一起.