Think in java作为java语言的圣经书籍之一,几乎成为每个java程序员必看的书籍,不看都不好意思说自己是java程序员,不过一般也不说自己认真看了,就说自己翻了翻。作为写安卓的,当然也要翻一下。

  第一章对JAVA程序开发的一些语言特性作了概述,同时该书的作者之前是Think in C++的作者,所以该书主要以C++作为比较对象来阐述。JAVA是为提高程序员效率而出来的一门语言,其容错性比C++要高很多,相比C++可以说快速开发。在文中同时还有JAVA是C++--的一门语言的语句,说明JAVA借鉴了许多C++的语言特性同时摒弃了一些复杂的特性。JAVA在我的眼里,很大程度上的面向对象,在静态编程语言上非常好得面向对象语言。因为是单继承,所有的类都有一个共同的根节点Object,所以方便做了一个垃圾回收机制。JAVA的异常处理,是一个很大的提高生产力的语法特性,相比其它语言的返回值处理来说。反射,多态,GUI和Swing,包管理方法,多线程与并发等等。

  第二章主要介绍了对象。万物皆对象!上帝造万物,有时候也会特别考虑什么。在JAVA中为了速度的考虑,一些基本的数据类型不是对象,如int,char,byte,long,float,double,这些怎么不是对象呢,因为这些是放在了内存的堆栈区域,而不是慢一点的堆(heap)区域,速度的区别,同时也造成了使用方式的一些区别,如果要使用对象的话,有包装类,Integer,Double,这些是自动包装的。面向对象就要用面向对象的角度来思考问题,而不是传统的过程式语言的角度来思考,当然并不是说摒弃过程流程,而是说要抽象一点,把过程转化为对象。对象,由字段和方法构成,有点类似算法中的数据结构。

  第三章,操作符。赋值,算术,逻辑,关系,二元操作符,字符串操作符,类型转换操作符等等。这里和C语言中的语法没有多大的不同。其中有一个印象稍微深一点的,就是关于E和e的介绍,在数学中我们一般看到e都知道这是自然常数,不过在设计最初的语言fortran的时候,因为键盘上面都是大写的字母,所有就用了E来表示10的几次方,小e当然就是自然常数了,不过后来没有使用专门的键盘而是改为切换的方式,所以e就被沿袭下来了,一直是10的几次方的表示,如果想要使用自然常数,请使用专门的函数。逻辑操作符这里,注意一下副作用。另外按位操作符和移位操作符也沿袭C语言。另外对于java来说,类型的大小是固定的,不因具体的机器平台而有所不同,所以在java中没有对应C语言的sizeof。

  第四章,介绍控制执行流程。包括包括老大经常说得搞几个if--else就可以了,另外迭代循环,递归,更高级点得for-each,和return-break-continue,以及switch。和C语言的语法没有什么不同。

  第五章,讲初始化与清理。对象专门new 出来,不管怎么样,最后都要落实到new出来,构造器在这里承担了工作的载体。说起构造器,要求又多了,方法重载,多种不同需求的构造器,方法名和参数类型乃至参数排列的顺序都影响着构造器的唯一性。如果没有给构造器,那么系统自动给默认构造器;如果给了构造器,那么系统就不给默认构造器。这里面有个对本身对象的引用,this,构造器中调用构造器,this.id = id,当然还有其它更多用法。清理,这里落实到怎么处理对象的回收,java有析构器,手工及时调用。java有垃圾回收器,我们在实际写代码的时候怎么清理,怎么更好地利用垃圾回收器?垃圾回收器是怎么工作的,这些都大有玄机。一般,如果一个对象没有引用了,那么就应该被回收?finalize的调用,区别finally,一般发生在native调用其它语言,目前仅能调用C和C++,不过通过C和C++可以调用大多数语言,这里涉及到需要主动的垃圾回收,于是finalize就是这样一个native调用垃圾回收的方法了,一般不怎么使用。最后回头一枪,因为有继承和静态域等概念,初始化的顺序是怎么样的呢。这里想起经常写得一些代码,一般保证在类上面定义的一些初始化先被调用,static方法和对象先被调用,而后构造器才被调用。数组的初始化这里有一些需要注意的地方,似乎涉及到泛型,还有一个关键名词,可变参数列表... ,比如int getGoods(String name,String... price),这里的price的数组可以有一个也可以有多个,甚至可以只有一个name,(真的吗?)另外枚举和switch有比较好得用途。

  第六章,讲访问权限控制。类似C++中得命名空间namespace,但是又似乎更加强大。java中有一个包管理机制,怎么组织代码,怎么创建包名,import是干什么的,对于public,protected,默认的package,以及private。作为SDK开发人员,怎么保持代码的修改方便,以及保持对外接口的兼容性,这些是比较值得关注和强调的地方。

  第七章,讲复用类,既然java的主要工作是极大地提高程序员的工作效率,那么作为主要的工作载体,类,是怎么样的组织方式以提高效率的呢。三种,组合,继承,代理。组合,其实平常见得很多,而且这是主要的写代码的方式。一般在一个类里面,我们总会引用一些别的类,而用这些别的类干事情,可以说就是组合。其实看我们要用字符串String,其实就是用了系统的类String,这应该也算一种组合吧,当然本来就是用java提供的基础开发工具包来开发。继承,extends关键字,不光有原来类的很多行为而且还能增加行为,不过通透性太高,我们希望隐藏实现细节,所以在开发的过程中,还是比较少用,书中给了一个法则,如果没有用到向上转型,那么就尽量少用继承。代理,这里其实是组合和继承的一种折衷,主要还是引用在干事情。最后讲了个final,常量,这里联想到C中得const,平常的基本类型都还没问题,涉及到对象引用就要小心,就如指针一样。

  最后一章,二十二章,主要介绍了GUI和Swing,面对图形工具,java已经没落,applet已经被flash取代,IBM将eclipse开源。GUI中有一些线程并发以及用callable和future来解决的问题。类似android,同样有许多的相似的控件名字和布局解决办法。不过书中说,简单地布局用代码可以写,复杂的布局依赖IDE用图形窗口界面来拖曳,交给其比较好。android的控件复杂吗?当然最终都是由代码构成的。

Think in java浏览一的更多相关文章

  1. App Store2016年最新审核规则

    为App Store开发程序,开发者必须遵守 Program License Agreement (PLA).人机交互指南(HIG)以及开发者和苹果签订的任何协议和合同. 以下规则和示例旨在帮助开发者 ...

  2. dubbox 编译 和 测试

    因为 dubbox 并没有发布到maven中央仓库仓库中,所以需要我们自己到官网下载,自己编译,install 到本地. 1. 首先安装git客户端工具 TortoiseGit, 然后使用它将 dub ...

  3. Android WebKit 内核

    一.WebKit简介 WebKit是一个开源的浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎.WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项目.Andro ...

  4. JDBC结果集

    SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中. SELECT语句用于从数据库中选择行并在结果集中查看它们的标准方法. java.sql.ResultSet接口表示数据库查询的结果集. ...

  5. JSP应用开发 -------- 电纸书(未完待续)

    http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术   第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...

  6. webKit 内核浏览器 源码分析

    如需转载,请注明出处! WebSite: http://www.jjos.org/ 作者: 姜江 linuxemacs@gmail.com QQ: 457283 这是一篇自己写于一年前的工作文档,分享 ...

  7. CentOS7中JDK的安装和配置

    1.使用yum线上安装jdk 这里以jdk1.7为例进行示范,1.8同理 yum -y list java*                  #浏览线上所有jdk版本列表,列表太长了,会显示不全 y ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. Cookie实现商品浏览记录--方式一:Java实现

    方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...

随机推荐

  1. LoadRunner调用Java程序—性能测试-转载

    LoadRunner调用Java程序—性能测试   为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...

  2. JZ2440开发笔记(2)——minicom的安装和配置使用【转】

    一.安装配置minicom 1.安装minicom lingd@ubuntu:~$ sudo apt-get install minicom 2.配置minicom lingd@ubuntu:~$ s ...

  3. 关于 unity5.3.1 录制 animation 带有 rotation 信息打包 Android 会运动错乱的问题

         Unity5.3.1 录制 animation 带有 rotation 信息打包 Android 会运动错乱的问题 ,临时解决方法是:在动画面板中点击 rotation 属性,右键选择菜单中 ...

  4. Java笔记(四)……常量与变量

    常量 常量表示不会改变的数值. Java中常量的分类: 整数常量:所有整数 小数常量:所有小数 布尔型常量:较为特有,只有两个数值,true false 字符常量:将一个数字字母或者符号用单引号(' ...

  5. HDU 1907

    博弈入门题吧. 把尼姆博弈推广到n堆,都是用异或运算.还有个总结的地方是,只要先手面对的是奇异局势,则胜负都掌握在后手.本题,题目要求是最后拿完的输,尼姆博弈是最后拿完的赢.但实际上优先权都掌握在后手 ...

  6. 微软 Build 2014开发者大会干货整理-1

    微软 Build 2014开发者大会第二天的主题演讲主要包含两部分:Microsoft Azure的发展状况,以及 .NET和生态系统的发展介绍.第二天的重点整理也由此分为上下两部分.您可以在Chan ...

  7. Galgame引擎编写,实现对话文本显示

    class cTalk { public: cTalk(); ~cTalk(); void Init(); void Shutdown(); void SetSpeed(int speed); voi ...

  8. Codeforces13C–Sequence(区间DP)

    题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少? 题解 一个很显然的结果就是,变化后的每一个值肯定是等于原来序列的某个值,因为 ...

  9. mysql常见优化,更多mysql,Redis,memcached等文章

    mysql常见优化 http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html 更多mysql,Redis,memcached等文 ...

  10. poj 1523 SPF【点双连通求去掉割点后bcc个数】

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7246   Accepted: 3302 Description C ...