`
一帆过海
  • 浏览: 16293 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

Thinking in Java 阅读笔记

阅读更多

对象导论

--------------------------------------------------------------------------------------

1.将对象想象成 服务的提供者。

2.代码复用,继承和组合的恰当使用。

3. 继承:is a 和 is like a,前者是子类和父类拥有一套完全相同的借口,后者子类不仅拥有父类的

   所有接口,且拥有自己的接口(新特性)

 

--------------------------------------------------------------------------------------

一切皆对象

--------------------------------------------------------------------------------------

1.对象的存储

  程序运行时,有六个地方可以存储数据

 

  a. 寄存器:数量有限,编译器根据需求分配,程序感觉不到其的存在。

 

  b. 堆栈:RAM中。通过操作堆栈指针进行快速有效的地分配内存,编译器需要生成相关代码来维护堆栈中的内存分配与释放.

           所以垃圾回收器不负责堆该内存区域。Java的引用和基本数据类型存储再堆栈中。抽象数据类型存在在堆中。

 

  c. 堆:RAM中。通用性内存池,所有的Java对象都存放在该区域中。内存分配灵活,释放依赖垃圾回收机制。

     注:垃圾回收机制只回收new出来的内存。其他方式或得的内存需要手动释放。

 

  d. 静态存储区域:RAM中。在固定位置存放着程序运行时一直存在的数据。然而Java的对象不会存放在该区域中。

 

  e. 常量存储:直接放在程序的代码内部,一般存放在ROM中。它们永远不会被改变。

 

  f. 非RAM存储:完全存活于程序之外。如流对象或者持久化对象。存储在磁盘或者其他媒介物质上。

 

2. 基本成员默认值:若类的某个成员是基本数据类型,即使没有初始化,Java也会给它一个默认值。

 

3. 关于静态Static :通常来说类只是描述一种属性和行为。只有new创建了类的对象才会分配内存。

                    然而当a.想为特定数据分配一块内存;b.某个方法不和任何对象关联起来---》有了静态。

           简单理解为:类数据和类方法。

 

4. 学习一下 Javadoc

 

5. 为什么不能以返回值区分重载方法? 因为当为了达到某种效果而调用一个方法,而不关心其返回值。

   如: void f(){...} int f(){...}    调用时: f();

 

6. 垃圾回收器的工作方式

   部分Java虚拟机中堆的实现类似一个传送带。每分配一个对象,就前进一个格子。存储空间分配的速度很快。

   通过简单地移动“堆指针”到尚未分配的存储区域,效率很高。然而为了避免内存页面的频繁调度,虚拟机中

   的堆并不是完全按照传送带的方式工作。这时垃圾回收器发挥了作用。它一面回收内存,一面使堆中的对象紧凑

   排列。这样堆指针就可以轻松地移动到更靠近传送带的开始处。从而避免了页面错误。

 

   简而言之,通过垃圾回收器对堆内对象的重新排列,提供了一种高速、有无限空间可分配的堆模型。

 

   工作方式: a. 标记——清扫  b. 停止——复制

--------------------------------------------------------------------------------------

继承

--------------------------------------------------------------------------------------

1. 生成一个类的对象时,变量初始化的顺序:

   a. 类加载阶段:加载所有的父类,从最上层的基类开始,先初始化所有的静态变量

   b. 所有的类加载完毕,且第一步完成后,开始从最上层的基类开始,初始化所有的非静态成员变量。

   c. 从基类开始,逐级调用构造方法。

 

 

--------------------------------------------------------------------------------------

多态

--------------------------------------------------------------------------------------

1. 编写构造器的一条有益规则:用尽可能少的方法使对象进入正常状态,如果可以避免的话,尽可能地避免调用其他方法。

  (参见:thining in java 构造器内部的多态方法的行为)

 

2. 继承和组合的选择:用继承表达行为上的差异,用属性表达状态上的变化(组合)。

 

3. 运行期类型识别RTTI:运行时对类型进行检查的行为。

 

4. 若不是动态绑定,就不是多态。

 

--------------------------------------------------------------------------------------

 

接口和内部类

--------------------------------------------------------------------------------------

 

1. 接口:方法签名和数据成员(数据成员全部是static和final的 )。

         接口用来定义类和类之间的“协议”。

 

2.内部类:内部类拥有外部类所有成员的访问权限。

 

3. 为什么会使用内部类实现某个接口,而不是直接用enclosing-class外围类直接实现接口?

   a. 内部类可以有效地实现多继承(多个内部类继承自多个类或者抽象类)

   b. 每个内部类可以独立地继承自一个实现,无论外围类是否已经继承某个实现,对于内部类都没有影响。

 

4. 闭包: 内部类是外围类的超集。因为内部类可以访问外部类的所有成员,包括私有成员。或者说内部类是面向对象的闭包。

 

 

 

--------------------------------------------------------------------------------------

异常和错误处理

--------------------------------------------------------------------------------------

1. 异常处理的目标:将错误处理的代码和错误发生的地方相分离。

 

 

--------------------------------------------------------------------------------------

运行时类型检查

--------------------------------------------------------------------------------------

1. 运行期识别对象和类信息的两种方式:RTTI和反射

 

2. 运行期类型识别:当只有一个指向基类的引用时,RTTI可以找出这个对象的确切类型。

   RTTI的三种形式:

        a. 强制类型转换 Circle c = (Circle)aShape;

        b. 通过Class对象来获取运行时所需要的信息。

        c. instanceof

 

3. Class对象:类型信息在运行期保存在Class类型的对象中。当编写并编译了一个类时,就会产生一个class对象

   并且被保存在同名.class文件中。运行期,当想生成一个类的对象时,JVM会检查是否加载了该类的class对象,若

   尚未加载就根据类名找.class文件并加载。

 

4. 生成class对象的引用的两种方法:a. Class.forName(); b. 类字面常量 xxx.class

 

5. RTTI 和反射之间的区别:RTTI在编译器编译期间打开和检查.class文件;

                          反射在程序运行期间打开和检查.class文件(因为在编译期间.class文件不可获取)

--------------------------------------------------------------------------------------

数组和容器

--------------------------------------------------------------------------------------

1. 数组:注意对象数组和基本数据类型数组的区别。基本数据类型数组直接保存值,对象数组保存对象的引用。

 

2. 数组复制:对象数组的复制,只是复制引用,是浅拷贝。

 

3. 数组元素或者容器元素之间的比较:comparator接口

 

 

 

--------------------------------------------------------------------------------------

Java I/O 

--------------------------------------------------------------------------------------

 

 

 

--------------------------------------------------------------------------------------

Java nio

--------------------------------------------------------------------------------------

引入NIO的目的: 提高速度,快速移动大量数据

 

速度的提高来源于使用的结构更接近于操作系统采用的执行I\O的方式:通道和缓冲器。

 

数据就像是煤矿,通道是通向煤矿的线路。缓冲器是运煤的卡车。能和通道交互的只有缓冲器即ByteBuffer。


分享到:
评论

相关推荐

    Thinking in Java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、万事万物皆对象 1. **对象存储位置** - **寄存器**:程序无法直接控制。 - **栈(Stack)**:存储基本类型数据和对象引用,但对象本身不在此处。 - **堆(Heap)...

    Thinking in Java 自学笔记——第二章 一切皆对象

    ### Thinking in Java 自学笔记——第二章 一切皆对象 #### 重要概念解析 ##### 2.1 用引用操纵对象 在Java中,一切都被视为对象,这意味着无论是字符串、数字还是其他数据类型都可以被视为对象来进行操作。当...

    Thinking in java学习笔记

    《Thinking in Java》是一本深度解析Java编程语言的经典著作,其深入浅出的讲解和丰富的实例使得读者能够全面理解Java的精髓。以下是对书中部分关键知识点的总结: 1. **Java 泛型**:泛型是Java SE 5.0引入的重要...

    Thinking in Java 自学笔记——第一章 对象导论

    Thinking in Java 自学笔记——第一章 对象导论 本章节总结了面向对象程序设计(Object-oriented Programming, OOP)的基本概念和原则,以帮助读者更好地理解 Java 编程语言。以下是对标题、描述、标签和部分内容的...

    王者归来之Thinking in java读书笔记

    通过阅读《王者归来之Thinking in Java读书笔记》,你可以系统地掌握Java编程的核心知识,理解编程思想,提高解决问题的能力。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。这本书不仅提供了理论知识,还有...

    thinking in java读书笔记

    ### Thinking in Java 读书笔记知识点总结 #### 一、构造器与方法重载 1. **构造器的特点**: - 构造器不返回任何值,与返回`void`不同。 - 当未在类中声明构造器时,编译器会自动生成一个默认的无参构造器。 - ...

    thinking in java 读书笔记(五)

    《Thinking in Java》是Bruce ...以上只是《Thinking in Java》第五部分可能涵盖的部分内容,实际笔记可能还涉及其他高级主题,如反射、注解、并发编程等。通过深入学习这些知识,可以全面提升对Java的理解和应用能力。

    Thinking In Java的笔记_第一章

    ### Thinking In Java的第一章知识点概览 #### 一、面向对象的基本概念 在《Thinking In Java》这本书的第一章中,作者介绍了Java的核心理念——一切皆对象。Java采用了一种统一的语法来处理所有事物,这是因为Java...

    Thinking in java读书笔记.docx

    《Thinking in Java》是Bruce Eckel的经典之作,这本书深入探讨了Java编程的各个方面。以下是根据提供的部分内容提炼出的一些核心知识点: 1. **访问修饰符**: - `public`:公共访问修饰符,允许所有类访问。 - ...

    Thinking In java学习笔记

    ### Thinking In Java 学习笔记知识点总结 #### 面向对象编程(OOP)的重要性及其影响 面向对象编程(OOP)在软件开发领域产生了深远的影响。它不仅提高了开发效率和降低了维护成本,还简化了设计流程,使得编程任务...

    读书笔记:Thinking in Java (Java 编程思想).zip

    读书笔记:Thinking in Java (Java 编程思想)

    thinking in java读书笔记(2)

    Java 编程基础 - 继承和复用 在 Java 编程中,继承和复用是两个非常重要的概念。继承允许我们创建出新的类,继承自已有的类,从而实现代码的重用和扩展。今天,我们将讨论继承和复用相关的知识点,并通过实践例子来...

    java基础补足和thinking In Java学习.rar

    JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...

    中文版Thinking in Java 4th编程思想(笔记)

    《中文版Thinking in Java 4th编程思想》是学习Java编程的重要参考资料,它深入浅出地介绍了面向对象编程的核心概念。下面将详细解读其中的主要知识点。 1. **对象导论** - **万物皆对象**:Java编程的核心是对象...

    用于存放java源码和Thinking of Java的资源

    "Thinking in Java"是一本由Bruce Eckel编写的经典书籍,它深入浅出地介绍了Java编程语言,是许多初学者和专业开发者的必备读物。这个压缩包文件“java-resources-master”很可能包含了与学习和实践Java相关的各种...

    一个大神读Thinking in Java 写下的笔记

    这是我从一位认识的大神那里要来的第一手资料,主要是他对Java面向对象的一些认识,我看了之后顿时犹如醍醐灌顶,对面向对象的思想有了深刻认识!原来以前只是学了皮毛而已。遗憾的是,这个笔记他没有写完,我只是看...

    包括JAVA夜未眠,thinkingJAVA和学习笔记

    "Java笔记"可能是个人或集体在学习Java过程中的整理,通常包含了学习心得、关键概念的总结和实例代码。这样的笔记往往更具实战性和针对性,可以帮助学习者巩固所学,快速查找遗忘的知识点,或者作为解决问题的参考。...

    《Thinking+in+Java》读书笔记共38页.pd

    总之,《Thinking in Java》的读书笔记结合了广泛的Java知识和实践应用,从基础知识到高级主题,从理论到实践,为学习和提升Java编程技能提供了全面的资源。无论是对初学者还是经验丰富的开发者,这都是一个宝贵的...

Global site tag (gtag.js) - Google Analytics