Thinking in Java -- Chapter 2 -- 一切都是对象

对象的创建:

 


  1. 堆栈中存储的是对象引用,java系统需要知道堆栈中所有项的生命周期,以便上下移动堆栈指针来分配内存或是释放内存(堆栈指针向下分配内存,向上释放内存)。----RAM 存储
  2. 堆用于存放所有的java对象,编译器不需要知道存储的数据在堆中存活了多长时间。当代码执行到new时,会在堆中进行存储分配。但是堆中进行存储分配和清理要比堆栈中需要更多的时间。---RAM 存储
  3. 常量值一般直接存储在程序代码内部。--- 有时会存储在ROM中
  4. 如果数据完全存活在程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。两个基本的例子:流对象和持久化对象。流对象中,对象转化成字节流,通常被发送给另一台机器;在持久化对象中,对象被存放在磁盘上,即使程序终止,它们仍然可以保持自己的状态。这种存储方式的技巧在于:把对象转化为可以存放在其他媒介上的事物,在需要时可恢复成常规的、基于RAM的对象。---非RAM存储
  5. 特例:基本类型。new将对象存储在堆中,如果用new创建一个对象,特别是小的,简单的变量,往往不是很有效。所以,对于基本类型,不是用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆栈中,因此更加高效。基本类型所占存储空间的大小,不会像其他语言那样随着机器硬件架构的变化而变化,这种不变性也是java比其他语言更具可移植性的原因之一。
  6. java提供了两个用于高精度计算的类:BigInteger和BigDecimal,这二者都没有对应的基础类型。不过,这两个类包含的方法,提供的操作和对基本类型所能执行的操作相似,只不过必须以方法调用的形式取代运算符方式进行。这么做就麻烦了很多,所以运算速度就比较慢。在这里,我们以速度换取了精度。BigInteger支持任意精度的整数,在运算中,可以准确的表示任意大小的整数值,而不会丢失任何信息。BigDe。cimal支持任意精度的定点数。例如,可以用它进行精确的货币计算。
  7. 关于数组:当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键值null,一旦java看到null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象,如果试图使用一个还是null的引用,运行时将会报错。

对象的作用域:


java对象不具备与基本类型一样的生命周期,当用new创建一个对象时,它可以存活于作用域之外。对象的引用在作用域终点就消失了,对象会依然继续占据内存空间。但是这样会带来一个问题,如果java让对象继续存在,那怎么才能防止这些对象填满内存空间,进而阻塞你的程序呢?这就是java的神奇之处,java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后释放这些对象的内存空间,以便供其他新的对象使用。

类中的字段和方法:


  1. 若类的某个成员是基本数据类型,即使没有进行初始化,java也会确保它获得一个默认值,以确保那些是基本类型的成员变量得到初始化,防止产生程序错误。但是这些初始值对程序来说,可能是不正确的,甚至是不合法的。所以最好明确的对变量进行初始化。
  2. 但是确保初始化的方法并不适用于局部变量(即并非某个类的字段)。因此,如果你在某个方法中定义 int x ; ,那么变量x得到的可能是任意值,而不会被自动初始化为0.所以在使用x前,需要对其赋予一个适当的值,否则java会在编译时返回一个错误,告诉你变量没有初始化。
  3. 方法的方法名和参数类别唯一的标识出了这个方法。
  4. java中的方法只能作为类的一部分来创建。方法只有通过对象才能被调用(当然static方法是针对类调用的,并不依赖于对象的存在),且这个对象必须能执行这个方法调用。

static 关键字:


  1. 通常来说,当创建类时,就是在描述那个类的对象的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。
  2. 但是上述情况出导致两种无法解决的情形出现:1 ,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。2,希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也可以调用这个方法。
  3. static关键字可以满足上面两方面的需求。当然,由于在用static方法前不需要创建任何对象,所以对于static方法,不能简单的通过调用其他非static域或方法而没有指定某个命名对象,来直接访问非static域与方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值