java学习笔记(二)——对象扩展

2.1 用引用操纵对象

尽管一切都看作对象,但操纵的标识符实际上是对象的一个reference。此外,拥有一个引用,并不一定有一个对象与之关联。如:String s。

但这里所创建的只是引用,并不是对象。如果此时向s发送一个消息,就会返回一个运行时错误。因为此时s实际上没有与任何事物相关联。因此,一种安全的做法是:创建一个引用的同时便进行初始化。


2.2 必须有你创建所有对象

2.2.1 存储位置

1)寄存器。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。

2)堆栈。位于通用RAM中,但通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些内存。它的速度仅次与寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。这一约束现在了程序的灵活性,所以虽然某些Java数据存储于堆栈(尤其是对象引用),但是Java对象并存储其中。

3)堆。一种通用的内存池(位于RAM区),用于存放所以的Java对象。堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。但也要为此付出代价:用堆进行存储分配和清理可能比用堆栈需要更多的时间。

4)常量存储。常量值通常直接放在程序代码内部,这样安全,因为它们永远不会改变。

5)非RAM存储。如果数据完全存活于程序之外,那它可以不受程序的任何控制,在程序没有运行时也可以存在。其中两个基本的例子就是流对象和持久化对象。

2.2.2 基本类型

Java要确定每种基本类型所占存储空间的大小。它们的大小不随机器硬件架构的变化而变化。这种所占存储空间的不变性是Java程序比其他大多数语言编写的程序更具有移植性的原因之一。


所有数值类型都有正负号,所以不要寻找无符号的数值类型。

boolean类型所占的存储空间的大小没有明确指定,仅定义为能够取字面值ture或false。

基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。

高精度数字

Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。

能作用于int或float的操作,也同样能作用于BigInteger或BigDecimal。只不过必须以方法调用的方式取代运算符方式来实现。这么做复杂了许多,所以运算速度会变慢。这里以速度换取了精度。

BigInteger支持任意精度的整数。BigDecimal支持任意精度的定点数。

2.2.3 Java中的数组

Java确保数组会被初始化,而且不能在它的范围之外被访问。这种范围检查,是以每股数组上少量的内存开销及运行时的下标检查为代价的。但由此换来的安全性和效率的提高。

当创建了一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。Java看到null,就知道这个引用还没有指向某个对象。在使用任何引用前,必须为其指定一个对象;如果试图使用一个还是null的引用,在运行时将会报错。


2.3 无须销毁对象

Java对象不具备像基本类型一样的生命周期。当new创建已经Java对象时,它可以存活于作用域之外。

Java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用。


2.4 类

2.4.1 字段和方法

一旦定义了一个类(Java中所有工作就是定义类,产生那些类的对象,以及发送给消息给这些对象),就可以在类中设置两种类型的元素:字段(数据成员)和方法(成员函数)。字段可以是任何类型的对象,可以通过其引用与其进行通信;也可以是基本类型的一种。如果字段是某个对象的引用,那么必须初始化该引用,以便使其与一个实际的对象相关联。

基本对象默认值



2.5 方法、参数和返回值

Java的方法决定了一个对象能够接收什么样的消息。方法的组成部分包括:名称、参数、返回值和方法体。

返回类型描述的是在调用方法之后从方法返回的值。参数列表给出了要传给方法的信息的类型和名称。方法名和参数列表(合称方法签名)唯一地标识出某个方法。

Java中的方法只能作为类的一部分来创建。方法只有通过对象才能被调用,且这个对象必须能执行这个方法调用。如果试图在某个对象上调用它并不具备的方法,那么在编译时就会得到一条错误信息。


2.6 构建Java程序

若要创建一个独立运行的程序,那么文件中必须存在某个类与该文件同名(否则编译器会报错),而且那个类必须包含一个名为main的方法。

2.6.1 static关键字

当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建这个类的任何对象,也可以调用其static方法或访问其static域。

2.6.2 编译和运行

首先必须要有一个Java开发环境,即JDK开发环境。


2.7 注释

Java有两种注释风格。一种是以/*开始,以*/结束,但许多人习惯每一行注释都以*开头。

另一种是单行注释,以//开头,直到句末。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值