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. Windows下的.NET+ Memcached安装

    转载请标明出处: http://www.yaosansi.com/ 原文:http://www.yaosansi.com/post/1396.html Memcached官方:http://danga ...

  2. Android中界面实现全屏显示的两种方式

    在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...

  3. windows下rundll32介绍

    最近看书介绍rundll32可以加载dll文件并执行其中导出函数,在MSDN中我们可以看到绍http://support.microsoft.com/kb/164787/zh-cn rundll32调 ...

  4. HDU-5391 Zball in Tina Town

    (n-1)!/n 就是如果n为素数,就等于n-1else为0. 求素数表: Zball in Tina Town Time Limit: 3000/1500 MS (Java/Others) Memo ...

  5. devexpress中gridview控件编辑时改变输入法状态

    在win7环境下使用Devexpress中的SpinEdit控件,切换成中文[简/繁]输入法输入数字键时有不少输入法会重复产生数字如输入1会变成11,输入123会变成112233.使用SpinEdit ...

  6. linux定时器用法

    linux定时器  原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...

  7. SQL SERVER全面优化

    今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的!为了方便阅读给出前文链接: SQL SERVER全面优化-------Expert for SQL Ser ...

  8. 字符串匹配算法之Rabin-Karp算法

    关键思想在于把输入的字符既看作图形符号,又看做数字,预处理算出模式P的d进制的值p,时间复杂度为Θ(m),让后针对n - m + 1个有效偏移s计算出相应的ts,这里是由于利用ts来计算ts+1,时间 ...

  9. javabean以及内省技术详解(转)

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  10. String的点点滴滴

    一.String 的 equals()到底比较的是什么?equals() 与 == 的区别? 当使用关系运算符==比较两个对象时,是比较两个对象使用的内存地址和内容是否相同,如果两个对象使用的是同一个 ...