Java编程思想:第2章 一切都是对象

  尽管Java是基于C++的,但是Java是一种更纯粹的面向对象语言。

2.1用引用操作对象

  每种编程语言都有自己操作内存中元素的方式。有时候程序员需要注意将要操作的数据是什么类型。是直接操控元素,还是用某种基于特殊语法的间接表示(如C和C++中的指针)。

  Java中是非常简单的,由于一切都是对象,我们可以采用单一的语法进行操作。采用遥控器操作电视方式,用引用操控对象。任何对象都可以用一个引用来操作。

2.2必须由你创建所有对象

  在创建了一个引用之后,就希望它可以与一个对象相关联。通常用new来实现:

  String s = new String("hello");

  Java内置了很多现成的类型,但重要的是我们可以自己创造类型,然后建立新对象。

2.2.1存储到什么地方

  程序运行时,对象是怎么放置安排的?特别是内存如何分配的?了解这个对我们有很大帮助。有五个地方可以存放数据:

  1)寄存器:位于处理器内部,是最快的存储区,但数量有限,按需分配。不能控制也无法在程序里感觉到它存在,C和C++允许向编译器建议寄存器的分配方式。

  2)堆栈:位于RAM中,可以通过堆栈指针从处理器那里获得直接支持。速度仅次于寄存器。Java程序在创建的时候就必须要知道堆栈里所有元素的确切的生命周期,以便上下移动指针,这限制了程序的灵活性。所以Java把引用存放在堆栈,而把对象存在了堆中。

  3)堆:通用内存池,也在RAM中,存放所有Java对象。编译器不需要知道数据在堆里的生命周期。所以使用起来非常方便灵活,只要用new即可自动在堆里进行存储分配,但灵活的背面也是有代价的:堆里的存储和分配所花费的时间比栈里更多。

  4)常量存储:常量直接存放在代码里,这是安全的,不会被改变。

  5)非RAM存储:如果数据完全存活于程序之外,那就可以不受程序控制,程序不运行时候也可以存在。常见的有流和持久化对象。这种存储方式的技巧在于把对象转化成可以存储在其他媒介上的东西,在需要的时候可以转化到RAM里。

2.2.2特例:基本类型

  基本类型由于它比较"小"比较简单,如果用new在堆里创建它往往并不高效,所以基本类型直接按照各自类型所占空间的大小存储在栈空间中,会更加高效。Java每种类型的大小在各个平台是不会变化的,这加强了可移植性。

  boolean    -           -

  byte    1字节(8bits)      -27~27-1

  short     2字节(16bits)    -215~215-1

  int      4字节(32bits)    -231~231-1

  long    8字节(64bits)    -263~263-1

  float    4字节(32bits)    

  double    8字节(64bits)    

  void      -          -

  可以使用包装类使它们创建在堆中。

  利用BigInteger和BigDecimal两个类可以进行高精度计算,他们没有对应的基本类型。

2.2.3Java中的数组

  几乎所有的语言都支持数组,C和C++里使用数组就是直接操作内存块,这是很危险的,如果访问越界或者未初始化就访问,会造成难以预料的问题。Java为提高安全性,会确保数组被初始化,且不能在它范围之外被访问(以少量的内存开销和运行时下标检查为代价,这种代价是值得的)。在数组创建时,引用会被设置为特定值null,如果java发现试图使用一个还是null的引用时,会产生一个运行时错误,从而避免了这种情况。

2.3永远不要销毁对象  大多程序设计语言中,变量的生命周期设计是非常重要的,存活多久?何时销毁?生命周期的混乱往往导致大量bug。此处将介绍Java是如何替我们完成所有清理工作的,从而大大简化这个问题的。

2.3.1作用域

  作用域决定了在其内变量的可见性和生命周期。

2.3.2对象的作用域

  java中对象和基本类型的生命周期不一样,当引用不存在时,对象依旧在内存中,等待垃圾回收。

2.4创建新的数据类型:类  我们用关键字class来定义一个新类型

  class ATypeName{}

  即使我们并没有做任何事情,而且该类也没任何行为,但是我们已经可以用new ATypeName()来创建它的对象。

2.4.1字段和方法

  Java程序只要做3件事:定义类、产生对象、发送消息。

  类定义之后,可以在类中设置2种类型元素:字段(数据成员)、方法(成员函数)。

  

时间: 2024-10-06 19:15:59

Java编程思想:第2章 一切都是对象的相关文章

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

<Java编程思想> 作者:Bruce Eckel 虽然这本书是经典,但是对于一个入门java,又没有其他编程经验的人来讲,实在难以看懂,前前后后看了三遍. 第一次什么都不懂的时候硬着头皮看,没看完,看了前面忘了后面,中间很多看不懂.第二次的时候,看懂了很多,但是不知道经典在何处. 第三次,是自己用了这门语言一年后,知道所谓的经典是什么,java的特性都在这里,这书不是从基础的JDK怎么装开始讲起.,大部头的一本书,现代人的话很少去翻了,其实可以当参考书,看哪一部分忘了,直接温故即可.一次在学

【Java编程思想】二、一切都是对象

尽管Java是基于C++的,但是相比之下,Java是一种更“纯粹”的面向对象设计语言. 2.1 用引用操纵对象 一切都被视为对象, 因此可采用单一固定的语法.尽管一切都被看作对象,但操纵的标识符实际上是对象的一个“引用”. Java里的“引用”与C++中的“引用”是有区别的,但是这个概念不需要完全明白,学会处理引用就可以了. 2.2 必须由你创建所有对象 new关键字的意思就是“给我一个新对象”! 2.2.1对象存储到什么地方 1)寄存器 2)堆栈(RAM) 3)堆(RAM) 4)常量存储(RO

java编程思想(2)--一切都是对象

1创建对象 String s ;创建引用,并未初始化,即引用未关联任何东西 String s2="asda"; 初始化 System.out.println(s2); System.out.println(s);//报错 用new 来初始化 String s = new String("sgjadfjaf"); 1.1如何存储 程序运行时,对象时怎么放置安排的呢?内存怎么分配的呢? (1)寄存器 --处理器内部,外部程序感觉不到其存在 (2)堆栈 --位于RAM(随

Java编程思想笔记(第二章)

第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(reference)操作对象 类似遥控器(引用)来操作电视(对象) 在Java中你可以创建一个引用,但是没有与任何对象关联,比如: String s; 这个时候如果用则会报错.安全的做法是: 创建一个引用的同时并进行初始化 String s="1111"; 必须由你创建所有对象 New关键字的意思是给我一

java编程思想笔记(第一章)

Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5.某一特定类型的所有对象都可以接收同样的消息. Booch提出一种更简洁的描述: 对象拥有状态(state) 行为(behavior) 和标识(identity) 每个对象都有一个接口 每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method) 在面向对象的程序设

Java编程思想——第17章 容器深入研究(two)

六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add 在尾部增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementExce

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算

Java 编程思想 第五章 ----初始化与清理(1)

从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来. 5.5 清理:终结处理和垃圾回收 初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全.Java有自己的垃圾回收器负责回收无用的对象占据的内存资源.但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法.       工作原理: 一旦垃圾回收器准备好释放对象占用的存储空间,将首

java 编程思想 一 第二章(对象)

上班之余发现有很多空闲时间,享受生活 又觉得有点空虚,而且对自己的基础知识总觉得掌握的不是很牢固,有点似懂非懂的感觉,近来刚好有时间,所以就考虑继续学习,然后再经过考虑和各大博主推荐选择了<java编程思想>这本书,在此分享学习心得跟大家共勉,也算是对自己的监督吧.(本内容需要有一定的基础才能看,类似于基础回顾,强化理解,新手可能有些地方不太能听懂) 一.什么是对象? 这并不是我们男女朋友那种对象哈哈. 简言之:万事万物皆对象. 个人理解:我们所要处理的事务或者建立的某种模型的抽象总结.具体就