读书笔记《Thinking in Java》

电脑坏了的这几天kindle里正好有一本Thinking in JAVA, 终于从进度1%开始看了,原以为都是学过的东西,或者说是像操作符这种耳熟能详的东西可以跳过不看,看下来发现,还真不一定。 Thinking in JAVA 之所以叫Thinking的原因,可能真的是因为作者真真切切的在讨论和C++比有什么不一样,JAVA为什么这么设计,JAVA为什么慢,JAVA为什么安全,JAVA增加了什么,JAVA减少了什么,读完之后反而觉得C++是一门很好的语言,改变之前无知的偏见。下面随便记录一下这次读thinking in java学到的新的东西。

以前多无知呢,学了C++觉得比C好用多了,学了JAVA觉得C++简直麻烦,指针飞来飞去,还有malloc,free,new,delete,还有神奇的memcpy,一下内存又泄露了,而JAVA就舒服多了。后来学了python,觉得简直人类之光,python能做所有事。现在看来,其实真的语言只是工具而已,而且每个语言都有他擅长和适合做的东西,怎么说C++和java都是鼻祖,后面的语言怎么讲都在这个语言体系里,不过做的事情可能会不一样,一个东西难,很多时候是因为这个事情本身就难,但也不是无章可循吧,一切皆有章法。

Introduction to Objects

一些本章的关键词: 抽象,接口,实现方案隐藏,重复使用or重新使用,多形对象,动态绑定,单根结构,Exception,多线程, RTTI run time type identification.

第一章是一个大的概括,罗列了一些概念。

一句很重要的心灵鸡汤:希望能给提升设计者本身,而不是流水化代码编制。注重问题结构和计算机本身的结构。

C++的数据存取分为堆栈区和内存堆。(stack和heap),简单来说heap里存放动态创建的对象,需要查找存储空间及释放,stack里是编译的时候就分配好的空间,比如数组之类。C++堆区的数据需要手动释放,JAVA垃圾收集器,java是单根结构,所有对象都有通用的接口,更好的实现垃圾收集。

JAVA中的casting,有upcasting和downcasting.(type)a. Downcasting不一定安全。

Java Applet小程序客户端,Java servlet服务器端。JAR文件打包。JAVA沙箱隔离运行小程序,没有权限访问沙箱外的。 以及提到几种客户端编程的方式,插件,脚本,java applet,active X之类的。

OOP:inheritance, Encapsulation and Polymorphism.

一些不太能理解的: 多线程,C++中的参数化类型? java里的generics

Everything is Objects

  1. where storage lives

    • registers
    • stack
    • heap: the general purpose pool of memory
    • constant storage,常数,程序内部代码。
    • Non-RAM storage: i)streamed objects ii) persistant object
  2. Primitive types

    Primitive types是直接存在栈里头的,但是高精度比如BigInteger和BigDecimal还是对象。

  3. Array

    array会初始化为空,但是如果是primitives type,初始化为0. C++就会存在初始化之前就使用内存的问题以及越界访问的问题。Java不会,Java会有严格的边界检查。

  4. Java Name visibility

    如果名字相同怎么办? C++用namespace区分不同的空间。

    Java解决前向应用的问题,即使没有贬义,也可以使用。

  5. static关键字! static指向同一片内存区域,只在第一次用的时候初始化。关于static有许多的习题。只初始化一次,初始化后不再初始化。

  6. Java中没有sizeof,因为在不同的平台上数据的大小都是一样的,C++就不同。

Initialization &Clean up

  1. this 关键字和super关键字

Holding Your Objects

  1. 数组:简单线性访问,编译器支持(complier-supported type),但是大小不能改变。C++中可能会越界,但是java会进行边界检查。

  2. Java.util.*有点类似于c++中的STL,支持常见的数据结构。List,Set,Queue 和Map。

  3. 要很好的理解upcasting和downcasting. upcasting通常是没有太大问题的,但是downcasting要注意,而且有些downcasting的错误会在运行期间才能捕获。

  4. List有

    • List<apple> apples = new ArrayList<apple>
    • List<apple> apples = new LinkedList<apple>
  5. Iterator<apple> it = apples.iterator();

    ListIterator 是双向的 ListIterator<apple > =apple.listIterator();

  6. set有HashSet,TreeSet内每个元素都按照RB树排好序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值