﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gavin&#039;s Blog &#187; Thinking</title>
	<atom:link href="http://laigw.name/tag/thinking/feed" rel="self" type="application/rss+xml" />
	<link>http://laigw.name</link>
	<description>Keep it simple, stupid. Simplicity is beauty.</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:14:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>＜＜Thinking in Java＞＞ 3th Edition 读书笔记</title>
		<link>http://laigw.name/post/16.html</link>
		<comments>http://laigw.name/post/16.html#comments</comments>
		<pubDate>Fri, 14 Nov 2008 12:13:35 +0000</pubDate>
		<dc:creator>Gavin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Thinking]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.laigw.name/?p=16</guid>
		<description><![CDATA[一、第一章 对象导论
1、Alan Kay总结了面向对象的五个特性：
1) 万物皆为对象
2) 程序是对象的集合，它们通过发送消息来告知彼此所要做的
3) 每个对象都有自己的由其他对象所构成的存储
4) 每个对象都有其类型
5) 某一特定类型的所有对象都可以接收同样的消息
Booch的描述：对象具有状态、行为和标识。

2、UML：Unified Modelling Language, 统一建模语言。

3、通过继承而产生的类型具有等价性，即：导出类与基类具有相同的类型。
4、使基类与导出类产生差异的两种方法：
1) 直接在导出类中添加新方法(is-like-a)
2) 改变现有基类的方法的行为－－覆盖(overriding)，这叫替代原则，即“纯粹替代”(is-a)
5、多态使用了“后期绑定”的概念，它通过“向上转型”(upcasting)来实现。
6、抽象方法(abstract)只能在抽象类内部创建，当该类被继承时，抽象方法必须被实现，否则继承类仍然是一个抽象类。
7、Java完全采用在被称为堆(heap)的内存池中动态地创建对象。每当想要创建新的对象时，就要使用new关键字来构建此对象的实例。与此不同的是，C++除了在堆中创建对象外，还可以在堆栈中创建对象。
8、Java的单根继承结构，使垃圾回收器的实现变得容易。
二、第二章 一切都是对象
1、存储数据的六个地方
1) 寄存器：编译器决定
2) 堆栈: 堆栈指针若向下移动，则分配新的内存；
若向上移动，则释放那些内存。
对象的引用而非对象存在此。
3) 堆：存放所有的Java对象；
4) 静态存储：RAM中固定的位置；
5) 常量存储：代码区内部；
6) 非RAM存储：如“流对象”和“持久化对象”。
2、虽然Java把一切都可视为对象，但基本类型却是一个特例，它与两种形式存活于Java中：基本类型和对象。

3、Java基本类型所占存储空间的大小具有不变性，即不随机器硬件架构的变化而变化。
4、两个高精度计算类：BigInteger和BigDecimal。
5、数组也具有数组对象和基本类型数组两种。
6、Java不支持类似C/C++将一个较大作用域的变量“隐藏”起来的做法。
7、当变量作为类的成员使用时，Java才确保给定其默认值，以确保那些是基本类型的成员变量得到初始化，防止产生程序错误。但该规则不适用于局部变量。所以使用一个局部变量前必须对其初始化，否则Java会在编译时返回一个错误。
8、对于static方法，不能简单地通过调用其他非static成员或方法而没有指定某个命名对象，来直接访问非static成员或方法(因为非static成员或方法必须与某一种特定对象关联)。
9、注释文档(javadoc): /** some comment */
(1) 使用javadoc的方式主要有两种：嵌入HTML和“文档标签”
(2) 文档标签：
独立文档标签：以&#8221;@&#8221;字符开头的命令，且要置于注释行的最前面(但是不算前导&#8221;*&#8221;之后的最前面)；
行内文档标签：以&#8221;@&#8221;字符开头，括在花括号内，可以出现在javadoc注释中的内任何地方。
(3) 三种类型的注释文档：
·位于类定义之前
·位于变量定义之前
·位于方法定义之前
(4) javadoc只能为&#8221;public&#8221;和&#8221;protected&#8221;成员进行文档注释。&#8221;private&#8221;和包内可访问成员的注释会被忽略掉。
(5) 不要在嵌入式HTML中使用标题标签，如&#60;hl&#62;或&#60;hr&#62;，因为javadoc会插入自己的标题，而你的标题可能同它们发生冲突。
(6) 一些标签示例
&#60;1&#62;@see: 引用其他类。格式：
@see classname
@see fully-qualified-classname
@see fully-qualified-classname # method -name
&#60;2&#62;{@link package.class#member label} 功能同@see
&#60;3&#62;{@docRoot} 产生到文档根目录的相对路径，用于文档树页面的文档注释中。
&#60;4&#62;@version:
@version version-information
&#60;5&#62;@author:
@author author-information
&#60;6&#62;@since 该标签允许你指定程序代码最早使用的版本
&#60;7&#62;@param 该标签用于方法文档中，形式如下：
@param parameter-name description
&#60;8&#62;@return
@return description
&#60;9&#62;@throws: 描述抛出的异常
@throws fully-qualified-class-name description
&#60;10&#62;@deprecated:该标签用于指出一些旧特性已由改进的新特性所取代。
三、第三章 控制程序流程
1、当关系操作符作用于对象时(&#60;,&#62;,&#60;=,&#62;=,==,!=)，关系比较的仅仅是对象的引用。
2、“与”、“或”、“非”操作只可应用于布尔值。不同于C/C++，不可将一个非布尔值当作布尔值在逻辑表达式中的使用。
3、移位操作符：
左移(&#60;&#60;)：将操作符左边的操作数向左移动操作符右侧指定的位数(在低位补0)
&#124;-“有符号”右移(&#62;&#62;)：将操作符左边的操作数向右移动操作符右侧指定的位数。
&#124; 　　　　　　“符号扩展”：若符号为正，则在高位插入0；
右移(&#62;&#62;):&#60; 　　　　　　　　　　若符号为负，则在高位插入1。
&#124;
&#124;-“无符号”右移(&#62;&#62;&#62;)：“零扩展”：无论正负，都在高位插0
左乘右除准则：　左移一位，相当于乘2^1
右移一位，相当于除2^1
4、非但变量、数值也可以进行类型转换
5、只有for循环才具备在控制表达式里定义变量的能力，其他任何条件语句或循环语句，都不可采用这种方法
6、break和continue语句的规则：
1)一般的continue会退回最内层循环的开头(顶部)，并继续执行；
2)带标签的continue会到达标签的位置，并重新进入紧接在那个标签后面的循环；
3)一般的break会中断并跳出当前循环
4)带标签的break会中断并跳出标签所指定的循环，抵达该循环的末尾处。
7、在Java里需要使用标签的唯一理由就是因为有循环嵌套，而且你想从多层嵌套中break或continue。此外，标签要刚好处于要跳转到的循环之前，如：
label1:
outer_iteration{
inner_iteration{
//&#8230;
break; [...]]]></description>
		<wfw:commentRss>http://laigw.name/post/16.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

