`
joe1100
  • 浏览: 29730 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Thinking in Java读书笔记(1-3章)

    博客分类:
  • JAVA
阅读更多

第一章.对象导论
这一章主要从面向对象概念概括的描述了java技术的相关概念,其中包括以下几个点:
1、对象的概念以及抽象的过程
世界万事万物如果想要在程序中描绘出来都需要一个抽象的过程,一个复杂的系统都是由很多的对象构成,这些对象分别提供自身的服务功能。特定类型的所有对象可以接受同一消息并提供服务,这种概念是OOP思想中最重要的多态特征。
抽象出的类同样也是一个模板,你可以依据这个模板创建任意多个对象。

2、封装以及访问控制
程序开发中往往可以分为类创建者和客户端程序,类创建者往往希望只暴露必须的部分,而隐藏内部实现。这就需要对数据及方法进行访问控制。这样也有另外一个好处,当内部实现修改之后并不会影响到客户端程序。Java用到以下几个关键字及其作用域:
            

  public      protected     默认 private
当前类 可访问 可访问 可访问 可访问
同一包 可访问 不可 可访问 不可
子孙类 可访问  可访问  不可 不可
其它包   可访问  不可 不可 不可



3、继承以及复用
类复用包括组合、引用、继承。在程序设计时由于继承可以清晰体现类的层次结构而且这个功能也是面向对象设计最重要的思想之一,但是这种继承关系太多会造成程序复杂,组合则是另外一种灵活的实现思路。一个类只能继承一个父类。
后期绑定:编译器只对方法的参数和返回值进行检查,并不对具体执行那一段代码做限制,当程序运行时才确定具体执行哪一个子类代码。这也是java多态特性的具体体现。

4、容器及泛型的简单概念
如果在不清楚具体需要多少个对象时,往往对于存储对象是比较复杂的,Java提供了集合框架能够很好的解决这一问题。在使用容器时应该根据其特性以及扩展方式比较熟悉才能够很好地运用。
当容器存储对象和取出对象的过程中会对容器中所存放的对象进行类型的判断和转换,有时候并没有明确装入的对象会造成取出对象时类型转换异常。JavaSE5提供了参数化类型(即泛型),这样容器中装入的对象类型在使用方和取出时一目了然。

5、对象的创建和生命周期
Java中采用动态内存分配方式,当需要一个新对象时可以在堆中创建(使用 new关键字)。而对于对象的销毁编译器可以知道对象的的存活时间并自动销毁。Java的垃圾回收器就是用来解决对象的生命周期问题。

6、异常处理
Java内置了异常处理功能,程序员只需要在出现异常的地方抛出并在可能出现异常的地方进行捕获。就可以使得程序运行过程中大大减少其出现错误的概率。

7、并发
对于现在处理器下面多任务的程序运行模式下,对与处理多线程程序会是比较高水平的操作。虽然线程是在单进程下面运行。但是需要处理多个线程之间通信,多线程
并发问题会是一个值得深入研究的问题。

第二章.一切都是对象
第二章的标题就是一切皆对象,在java中用引用操作对象,在java代码中:
1 String s;//这里创建了一个String的引用s,但是没有指向任何的String对象
2 s = new String("hello");//将引用指向通过new创建的String对象
3 s.toUpperCase();//通过引用s向它指向的对象发出信息,即通过引用来操作引用指向的对象,将刚刚创建的String对象中的字符变大写。
4 String str = new String("hello");//在创建的同时初始化对象。
  对象在java中是存在什么地方的?内存是怎么分配的呢?
1. 寄存器。这是最快的存储区,它位于处理器的内部,而且数量及其有限,所以我们不能直接控制,是按需分配的。
2. 堆栈。堆栈位于通用的RAM中,通过堆栈指针来分配或者释放内存,通过堆栈指针的移动来快速有效的分配内存,速度仅次于寄存器,这个地方重要存储java中对象的引用和元数据,在这里,java系统必须知道堆栈内所有项的确切的生命周期,以便来通过移动堆栈指针来释放和分配内存。
3. 堆。一种通用的内存池,同样位于RAM中,用于存放所有的java对象。在堆中,java编译器不需要知道存储的数据在堆里的存活时间,这样分配起来比较容易,所以当我们使用new在创建一个新的对象的时候,代码执行,会自动的在堆里进行存储分配。最后他告诉我们的是,灵活是要有代价的,代价就是我们在堆里分配和清理需要比堆栈里面的分配和清理花费更多的时间。
4. 常量存储。这里存储程序中永远不会改变的常量。
5. 非RAM存储。
java中的基本类型,主要包含八类,包括boolean,char,byte,short,int,long,float,double,基本类型不用通过new来创建,而且它存储在速度更快的堆栈中,存取起来更加的高效。同时也介绍到java基本数据类型的默认值。同时java提供了两个用于高精度计算的类:BigInteget和BigDecimal,前者支持任意精度的整数,后者支持任意精度的浮点数。
6. Java中的数组
Java确保数组会被初始化,而且不能在它的范围之外被访问。当创建一个数组对象时,实际上就是创建一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。一旦Java看到null,就知道这个引用还没有指向某个对象。
7. 永远不需要销毁对象
作用域:在作用域里定义的变量只可用于作用域结束之前。Java不允许将一个较大的作用域的变量“隐藏”起来
对象的作用域:Java对象不具备和基本类型一样的生命周期。当用new创建一个Java对象时,它可以存活于作用域之外。但是其引用的作用域终点就消失了,然而,引用所指向的对象仍继续占据内存空间。
Java的垃圾回收器,用来监视用new创建的所有对象,并辩别那些不会再被引用的对象。随后,释放这些对象的内在空间,以便供其他新的对象使用。

8. 创建新的数据类型
字段和方法,Java中新的数据类型由字段和方法组成,字段可以是基本数据类型,也可以是任意类型的对象。当变量作为类的成员使用是java才能够给定其默认值,复杂对象类型默认值为null,基本数据类型都有其相应的默认值(具体参照书本)。
9. 注释和嵌入式文档
Java中有几种类型的注释一种是类似于c的注释/*~~~~~*/ .一种是单行注释如//
~~~~~ 。还有一种是文档注释如/**~~~~*/这种注释可以是用javadoc编译生成html文档。
10. Static关键字
使用static变量和方法有两种方式:一种是通过一个对象去调用,另一种是通过类名直接调用(这是由于类静态变量和方法在类加载的时候已经编译)
11. 练习题



第三章.操作符

Java中操作符和其他语言操作符都是类似的,然而在操作真实的数据的时候还是有很多地方需要注意的地方,比如/分母部分不能是0,X++以及X—操作符与++X及—X的异同,在这些细节点上面还是需要注意的。
java操作符共分为九种:1、赋值(=)2、算术运算符(+,  -,  *, /,  %)3、关系操作符(< ,> ,<= , >=, ==, !=)4、逻辑操作符(&&,||,!)5、按位操作符(&,|,~,^)6、移位操作符(<<,>>,>>>)7、一元加、减操作符(-,+)8、自动递增递减运算符(++,--)9、三元操作符if-else(boolean-exp ? value0 : value1)。几乎所有的操作符都只能操作java“基本类型”,例外的操作符是=,==和!=操作符能操作所有对象,String类可以支持+,+=操作符。
1、操作符优先级
    学过数学的都应没问题了,这里不再谈了
2、可以同时进行运算与赋值操作的操作符有:算术运算符(+=,  -=,  *=, /=,  %=,)、移位操作符(<<=,>>=,>>>=)和按位操作符(&=,|=,^=)
3、整数除法中,除数与被除数可以的类型(char、byte 、short 、int 、long、 float 、double),除法结果取除数与被除数类型最大的,默认是int,如果除数与被除数的类型都是(char、byte 、short 、int 、long、 float) 类型,哪么得到的会直接去掉结果的小数位,而不是四舍五入。
4、关系运算符==和!=比较的是对象的引用,equals()的默认行为也是比较对象的引用,但大多数java类库都实现了equals()方法,使它变成比较对象的内容,而非比较对象的引用。所有如果是自己创建的新类要覆盖equals()方法,否则还是比较对象的引用。“基本类型(如int,long等)”,非包装器类型(如Integer,Long等)只能用==和!=比较,没有equals()方法。
5、逻辑操作符(&&,||,!)操作只可应用于布尔值。使用逻辑操作符时,有可能出现一种“短路”现象,即逻辑表达式有可能一部份不必计算就知运算结果的。
6、按位操作符用来操作整数基本类型中的单个“比特”(bit),即二进制位。但对于布尔型作为一种单比特值对待,只能执行按位(&,|,^)运算,不能执行按位~的操作,并且不会中途“短路”这是跟逻辑操作符不同的,结果也是布尔型数据。
7、如果对char,byte或者short类型的数值进行移位处理,哪么在移位进行之前,它们会被转换成int类型,并且得到的结果也是int类型的值。所以在进行>>>=运算是要特别小心,有可能得到的不是正确的结果。
8、java允许任何基本数据类型转换成别的基本数据类型,但布尔型除外,后者根本不允许进行任何类型的转换处理。在执行窄化转换时,总是对数字执行截尾,如果要得到四舍五入的结果,就需要使用java.lang.Math中的round()方法。
9、如果对基本数据类型执行算术运算或按位运算时,只要类型比int小(char,byte,short ),运算之前就会转成int,最终结果也是int类型。如果想把结果赋值给较小的类型,必须进行类型转换。通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。

 

分享到:
评论

相关推荐

    Thinking in Java读书笔记

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

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

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

    thinking in java读书笔记

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

    thinking in java 读书笔记(五)

    《Thinking in Java》是Bruce Eckel的经典之作,它深入浅出地讲解了Java语言的核心概念和技术,对于初学者和有经验的开发者来说都是极好的学习资源。这篇读书笔记主要聚焦在第五部分的内容,可能涵盖了类、对象、...

    Thinking in java读书笔记.docx

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

    thinking in java读书笔记(2)

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

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

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

    JAVA 编程思想 思维导图Thinking_in_Java_MindMapping-master

    用了1个月时间,把《Java编程思想》读了一遍。然后用Mindjet Mindmanager做了读书笔记,跟大家分享一下~ 1. 这个思维导图的读书笔记...3. 思维导图中没有第3章、第22章《图形化用户界面》的总结,因为这个用得很少。

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

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

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...

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

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

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

    《Java学习笔记》 此书的特点在于里面有很多作者对Java语言的独有的理解与讲解,这些内容往往也是所有Java语言初学者迷惑的地方。称之为超简明入门书籍也不为过。 《Java核心技术:卷1基础知识》 这系列...

    java软件笔试题-MyNotebook:我大学时期的笔记本

    java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。...7:读书笔记 thinking in java effective java Android开发艺术探索 Android插件化开发指南

    5本java学习用书

    3. **《Thinking in Java》**:Bruce Eckel的这部巨著深入细致地介绍了Java语言,不仅涵盖基础,还涉及高级特性如多线程、网络编程、反射等。它的特点是理论与实践相结合,通过大量的实例来阐述概念,是提升Java技能...

    JAVA语言入门资料

    学习资源中的“thinking in java.chm”是经典书籍《Thinking in JAVA》的电子版,深入讲解了JAVA的各个方面;“JAVA语言入门.chm”可能是另一本JAVA入门教程,涵盖了基础知识;“Java学习.doc”则可能包含了一些学习...

    Thingking in java

    《Thinking in Java》是Java编程领域的一本经典著作,由Bruce Eckel撰写,被誉为学习Java的必读之作。这本书深入浅出地介绍了Java语言的核心概念和技术,为读者提供了全面而深刻的Java编程知识。 "第二版的"标签...

    TIJ4Reusing Classes

    thinking in java 4 Reusing Classes 读书笔记

    常用文档Java4.rar

    "thinking-in-java.pdf"是Bruce Eckel的经典之作《Thinking in Java》,书中详尽介绍了Java语言的基本概念、语法和编程思想,是初学者入门和进阶的必备读物。 3. **Spring框架**: “Spring源码深度解析(第2版)...

    MasteringJava:一些旧的Java笔记

    "Mastering Java: 一些旧的Java笔记" 提供了一个深入学习Java的资源,这可能是一个学习者或开发者在阅读《Thinking in Java》一书时所做的笔记。这本书由Bruce Eckel编写,是Java编程领域的一部经典著作,旨在帮助...

    BookReading:读书笔记

    在《BookReading》的笔记中,你会看到对《Thinking in Java》这本书的解读,这本书是Bruce Eckel的经典之作,详细介绍了Java的基础知识和高级特性。你将了解到如何创建和使用类,如何处理异常,以及如何进行多线程...

Global site tag (gtag.js) - Google Analytics