Think in java浏览一
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浏览一的更多相关文章
- App Store2016年最新审核规则
为App Store开发程序,开发者必须遵守 Program License Agreement (PLA).人机交互指南(HIG)以及开发者和苹果签订的任何协议和合同. 以下规则和示例旨在帮助开发者 ...
- dubbox 编译 和 测试
因为 dubbox 并没有发布到maven中央仓库仓库中,所以需要我们自己到官网下载,自己编译,install 到本地. 1. 首先安装git客户端工具 TortoiseGit, 然后使用它将 dub ...
- Android WebKit 内核
一.WebKit简介 WebKit是一个开源的浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎.WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项目.Andro ...
- JDBC结果集
SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中. SELECT语句用于从数据库中选择行并在结果集中查看它们的标准方法. java.sql.ResultSet接口表示数据库查询的结果集. ...
- JSP应用开发 -------- 电纸书(未完待续)
http://www.educity.cn/jiaocheng/j9415.html JSP程序员常用的技术 第1章 JSP及其相关技术导航 [本章专家知识导学] JSP是一种编程语言,也是一种动 ...
- webKit 内核浏览器 源码分析
如需转载,请注明出处! WebSite: http://www.jjos.org/ 作者: 姜江 linuxemacs@gmail.com QQ: 457283 这是一篇自己写于一年前的工作文档,分享 ...
- CentOS7中JDK的安装和配置
1.使用yum线上安装jdk 这里以jdk1.7为例进行示范,1.8同理 yum -y list java* #浏览线上所有jdk版本列表,列表太长了,会显示不全 y ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Cookie实现商品浏览记录--方式一:Java实现
方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...
随机推荐
- 分布式缓存BeIT Memcached简介
分布式缓存BeIT Memcached简介 或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步.下面稍微介绍一下beitmemca ...
- Android Paint和Color类
要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...
- zookeeper服务器端管理工具
zookeeper基本是基于API和console进行znode的操作,并没有一个比较方便的操作界面,这里也发现了taobao 伯岩写的一个工具,可以比较方便的查询zookeeper信息. 工具的开发 ...
- Linux文件类型与扩展名
Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...
- FZU2235 国王的出游 水题
因为只有1e5个点,所以直接离散化bfs就好 #include <cstdio> #include <cstring> #include <queue> #incl ...
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...
- 链表反转C实现(递归与循环)
//逆转链表http://blog.163.com/lichunliang1988116@126/blog/static/26599443201282083655446/ #include<io ...
- scala学习笔记(四)样本类与模式匹配
访问修饰符 格式:private[x]或protected[x],x指某个所属包.类或单例对象,表示被修饰的类(或方法.单例对象),在X域中公开,在x域范围内都可以访问: private[包名]:在该 ...
- HW5.24
import java.util.Calendar; public class Solution { public static void main(String[] args) { System.o ...
- Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!
Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...