Java编程思想(二)

2019-04-23  本文已影响0人  MikeShine

第2章 一切都是对象

这一章主要介绍跟对象相关的工作。包括一个对象的生成,销毁,作用域等等。都是一些细节的知识点。

2.1 用引用操作对象

在java中,一切都被看做对对象,但是操作的标识符实际上是对象的一个“引用(reference)”。

String s ;

这里的 s 只是一个引用,并没有和对象关联。

String s = "abc";

这里的引用 s 关联了 对象 "abc",即通过操作引用来操作对象(就好像用遥控器操作电视机一样)。

2.2 必须由你创建所有对象

对象存储位置

这里我们关注一下创建的对象存到什么地方。
有5个地方可以存储数据:

明白一个点,引用在 stack中,对象在 heap 中。

对象特例:基本类型

除了上面说的需要 new 的存储于heap中的对象,java中还有一类很小的、简单的、不需要 new 来存储到heap中 的对象:基本类型。基本类型创建一个“自动”变量,直接存储“值”在 stack 中,更加高效(前面说到 stack 中比 heap 中更快)。

明白一个点,基本类型不需要new一个对象,直接存储值在 stack 中

java中的基本类型
看到,所有的基本类型都是有正负号的。不存在没有无符号的数值类型。
boolean 类型所占的存储大小没有指定(具体要看虚拟机和实现)。
这里当然也可以使基本类型在 heap 中创建对象。
Character ch = new Character('x');

这么做的用处以后会说到。
除了上面的基本类型外,java 还提供了两个类来做高精度计算:BigInteger & BigDecimal。

java 中的数组

java 确保数组可以被初始化(相对于c/c++中可能存在的初始化之前使用数组引起错误而言),并且不能在它的范围之外被访问。

2.3 永远不需要销毁对象

正如前面说的,java不需要考虑合适销毁对象,垃圾回收器帮我们做了这一项工作,使得程序的 bug 大大减少。

{
  String s = new String("Test");
}

这里引用s在括号(作用域)之外就消失了。但是s指向的String对象仍然占用空间。垃圾回收器就会监视用 new 创建的对象,辨别不被引用的对象,释放相应的内存空间。

2.4 创建新的数据类型:类

其实在 java 中所做的所有工作都是在自定义类。
类中可以有,数据成员、成员函数。
类中的数据成员可以是任何类型的对象。如果是基本数据类型,不需要初始化,系统会对其自动赋默认值;如果是某个对象的引用,必须初始化(一般用new),使其与某个对象实例相关联。
如果在成员函数中,基本类型的对象需要初始化的,不然会报错。

记住两个点:
(1)类中的非基本类型对象需要初始化(系统会自动初始化)
(2)成员函数中的基本类型需要初始化

2.5 方法、参数和返回值

2.6 构建一个 java 程序

static 关键字

通常而言,只有 new 一个对象,相关的类方法才可以被调用。
但是 用static 关键字声明的方法或成员数据,可以不用创建对象,就进行访问。

class StaticTest{
    static int i = 47;
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();

这里 st1.i 和 st2.i 指向同一存储空间,因此他们具有相同的值 47。

StaticTest.i++;

这就是所谓不用创建对象,直接通过类名. 来访问。

这里记住两个点:
(1)静态数据成员指向同一存储空间
(2)静态数据和函数可以不通过对象,直接用类名进行访问

public static void main(String args[])

主函数都是这么写。这里虽然没有用到 args,但是编译器是这么要求的。args要用来存储命令行参数

上一篇 下一篇

猜你喜欢

热点阅读