Java编程思想——ch02 一切都是对象

”如果我们说另一种不同的语言,那么我们就会发掘一个有些不同的世界“

——Luduing Wittgerstein

Java不像C++那么复杂,Java假设我们只进行面向对象的程序设计。


1、 用引用操作对象

1)、 在java中一切都被视为对象,尽管一切都是对象,但操作的标示符实际上是对象的一个引用。

2)、 引用不一定非得和对象相关联,引用可以独立于对象而存在。

3)、 一种安全的做法是创建一个引用的同事就进行初始化。

2、 必须由你创建所有对象

Java程序设计的基本行为是由程序员创建类型。

2.1、 存储到什么地方

Java有五个不同的地方可以存储数据:

1)、寄存器:最快的存储区,位于处理器内部,一般不能直接控制。但是C/C++允许向编译器建议寄存器的分配方式。

2)、 堆栈:位于RAM中,通过堆栈指针可以从处理器获得直接支持。向下移动指针则分配内存,向上移动指针则释放内存。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是对象并不位于堆栈中。

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

4)、 常量存储:常量值通常直接存放在程序代码内部,这样是安全的,因为永远不会改变。嵌入式系统可以放在ROM中。

5)、 非RAM存储: 如果数据完全存活于程序之外,那么可以不受程序控制。两个基本的例子——流对象和持久化对象。可以把对象转化成可以存储在其他媒介上的事物,需要时恢复成基于RAM对象。Java提供了对轻量级持久化的支持,而诸如JDBC和Hibernate这样的机制提供了更加复杂的支持。

2.2、 特列:基本类型

1)、 一般new将对象存放在堆中,但是有些小的、简单的变量存放在堆中不是很有效,因此,对这类变量,Java不用new来创建,而是创建一个并非是引用的自动变量,这个变量直接存储值,且位于堆栈中,因而更加高效。这些变量类型即基本类型。

2)、 Java要确定每种基本类型的所占存储空间的大小,其大小不随硬件机器的改变而改变,因而java更加具有可移植性。

3)、 所有的数值类型都有正负号,没有无符号的数值类型。

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

5)、 Java的自动包装功能能自动将基本类型转化为包装器类型,并可以反向转换。

6)、 高精度数字:BigInteger和BigDecimal,运算用调用方法的方式取代运算符方式。以速度换精度。

2.3、 Java中的数组

1)、 Java的目标之一是安全性,Java会确保数组会被初始化,且不能在其范围之外被访问,这种范围检查是以每个数组上少量的内存开销及运行时下标检查为代价的。

2)、 创建一个数组对象时,实际上是创建了一个引用数组,每个引用会自动初始化为一个特定值——null。

3)、 可以创建存放基本数据类型的数组,编译器能确保这种数组的初始化,将其所占内存全部置零。

3、 永远不需要销毁对象

大多数程序设计语言都有变量生命周期的概念,变量生命周期的混乱导致了大量的bug,Java没有这些麻烦,会自动完成对象的清理工作。

3.1、 作用域: C/C++里较小的作用于会隐蔽较大的作用于中的变量,但是在Java中不允许,这样会导致混乱。

{
    int x = 12;
    {
        int x = 96;
    }
}

以上代码在C/C++中是合法的,但是在Java中是不允许的。

3.2、 对象的作用域:Java对象不具备和基本类型一样的生命周期。用new创建一个Java对象的时候,它可以存活于作用域之外。引用在作用域终点会消失,但是对象只要需要就会一直保留下去。Java有一个垃圾回收器,用来监视new所创建的对象,并辨别哪些不会再被引用的对象,随后释放内存。你只需要创建对象,一旦不再需要,对象会自动消失。这样就消除了内存泄露问题。

4、 创建新的数据类型:类

1)、 在java中所做的全部工作就是:定义类,产生类的对象,以及发送消息给对象。

2)、 字段可以是任何类型的对象,通过引用与其通信,也可以是基本类型。

3)、 每个对象都有用来存储其字段的空间,普通字段不能再对象间共享。

4)、 基本成员默认值:如果类的成员是基本数据类型,即使没有初始化,Java也会确保它获得一个默认值,以确保变量初始化。boolean---》false, char null

然而上述初始化的方法不适用于局部变量(即非某个类的字段),如:int x。对于未初始化的变量,Java会视为错误。

5、 方法、参数和返回值

1)、 Java的方法决定了一个对象能够接受什么样的消息,方法包括:名称、参数、返回值和方法体。名称和参数合起来称为方法签名

2)、Java中方法只能作为类的一部分来创建。方法只有通过对象才能调用,且对象必须能执行方法。

3)、 调用方法通常被称为发送消息给对象。int x=a.f();    可以理解为向对象a发送消息f()

4)、 参数列表:指定要传递给方法什么样的消息,这些信息采用的都是对象的形式,实际上传递的是对象的引用。

6、 构建一个Java程序

1)、 名字可见性:Java为了给一个类库生成不会与其他名字混淆的名字,Java设计者希望程序员反过来使用自己的Internet域名,保证其独一无二。这样所有的文件都能自动存活于其自己的名字空间内。且同一个文件的每个类都有唯一的标示符。

2)、 运用其他构件:如果想使用预先定义好的类,使用import指示编译器导入一个包。

3)、 static关键字:执行new创建对象时,数据存储空间才被分配,其方法才会工外界调用。但是如果只想为某个特定域分配单一存储空间,而不考虑究竟要创建多少个对象,或者希望某个方法不与包含它的类的任何对象关联在一起,即在没有对象的情况下也能调用方法,这就需要用static关键字。

当申明一个事物是static的时候,就意味着这个域或者方法不会与包含他的类的任何对象关联在一起。即使未创建类的对象,也可以调用其static方法或者访问其static域。而非static域或者方法必须知道它们一起运作的特定对象。使用类名是引用static变量的首选,为编译器进行优化提供了更好的机会。

一个static字段对每个类只有一份存储空间,但是非static字段对每个对象都有一个存储空间。static方法可以创建或者使用与其类型相同的被命名对象,static方法常常作为牧羊人的角色,看护其隶属同一个类的实例群。

4)、类的名字必须和文件的名字相同

7、 编码风格

类名首字母大写;每个内部单词手写字母大写。方法和字段以及对象引用名称的首字母小写,其他每个内部单词首字母大写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值