Java中(几乎)一切都是对象。几乎是因为还包含几个基本类型,int、float、double和long等。
“2.1 用引用操纵对象”,如果你不理解引用的概念,那就先把它当做一个对象的遥控器,这个遥控器可以执行对象中的任何行为甚至直接获取属性。这里面把对象比喻成了电视机。
但是即使没有电视机,遥控器还是可以独立存在的,也就是说,你拥有一个引用,并不一定要有一个对象与他关联。这句书本上的原话很好理解。举个例子,也是书上的。String类型,就是一个字符串类型,可以创建它的引用,String s;String是字符串类,s是一个引用(遥控器),现在还没有对象(电视机)。new String(“abcd”)这个才是电视机,也就是”2.2 必须由你创建所有对象”中的String s=new String(“asdf”);这样s这个引用(遥控器)就跟我们的new String(“asdf”)对象(电视机)产生了联系。s就可以通过.的方式使用对象中的方法或者属性了。
按理说讲完了引用和对象就应该学习使用对象中的方法了,但是接下来确进入到了”2.2.1 存储到什么地方”。有点跳跃,先了解一下这一部分吧,也就5个存储区,不理解也没关系,时间久了就理解了。这部分内容不是java虚拟机里的内存模型,就是5块不同类型数据存储的地方。
1)寄存器:处理器CPU内部的一块存储区,JAVA语言控制不了这块。
2)堆栈:存储JAVA中对象的引用,基本类型变量。
3)堆:存储JAVA中new出来的对象。
4)常量存储:代码中定义出来的不会改变的值
5)非RAM存储:这里解释的不够全面,应该是除了RAM存储区以外的其他任何区域,比如文件,数据库等。
在”2.2.2 特例:基本类型”这一小小节罗列出来了我们JAVA语言中的基本类型,这些类型不是属于对象,不用new,直接赋值的,比如int a=5;下面就是所有的基本类型,以及他们的大小和范围,还有每个基本类型都对应一个包装器类型,包装器类型就是属于对象的范畴了,需要new的。
接下来仅仅针对boolean类型和char类型做了一些说明,其他的类型没有涉及到,在后续的章节会详细通过实践的方式了解。然后就跳跃到了两个高精度数字:BigInteger
、BigDecimal。书中重点说明了一点就是高精度数字是通过速度换取的精度,所以它们运算速度比较慢,这只是和上面的数值型的基础类型比较的。所以他们经常被用于与货币业务或者其他对精度要求很高的业务中。
“2.2.3 Java中的数组”这一小小节只是简单地描述了数组在c/c++和Java中的区别,在c/c++中的数组使用起来很危险,因为数组就是内存块,这点在Java中也一样。只是在c/c++中对内存的直接操作容易导致一些错误的产生。其实这在Java中也是一样,只不过Java的异常错误处理机制能够提醒程序员,这边会有问题。在c/c++中就会产生难以预料的后果。尤其是对数组在初始化方面的差异,Java的编译器会做安全方面的保护。