<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[C.W.WANG的博客]]></title><description><![CDATA[我的Java学习笔记]]></description><link>https://blog.youkuaiyun.com/WANG_Chaunwang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; WANG_Chaunwang]]></copyright><item><title><![CDATA[Head-First-Design-Pattern-学习笔记]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80277221</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80277221</guid><author>WANG_Chaunwang</author><pubDate>Fri, 11 May 2018 09:44:08 +0800</pubDate><description><![CDATA[

title: Head First Design Pattern - 学习笔记 
date: 2018-05-04 11:21:01 
categories: 
    - 设计模式 
tags: 
    - 学习笔记



    - Head First Design Pattern



工厂模式



分类


简单工厂模式（Simple Factory）
工厂方法模式（Factor...]]></description><category></category></item><item><title><![CDATA[TomCat与Servlet入门指南]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80229442</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80229442</guid><author>WANG_Chaunwang</author><pubDate>Mon, 07 May 2018 18:10:21 +0800</pubDate><description><![CDATA[TomCat下载安装

这是TomCat下载地址，选择你需要的版本安装。

我的是windows版，解压到任意位置即可（路径名尽量不要有中文）。

其中第4步CATALINA_HOME设置为解压路径。



完成后一直点击确定，就能保存配置信息。 
然后在任意位置打开命令行（windows系统下），输入startup 


打开浏览器，输入http://localhost:8080/，你会看到

...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （二十）注解]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80190781</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80190781</guid><author>WANG_Chaunwang</author><pubDate>Fri, 04 May 2018 09:53:16 +0800</pubDate><description><![CDATA[Java编程思想 - 第二十章 - 注解

注解（也被称为元数据）为我们在代码中添加信息提供了一种形式化的方法，使我们可以在稍后某个时刻非常方便地使用这些数据。



基本语法

@Target用来定义注解将用于什么地方（例如一个方法或者一个域）。@Rectetion定义该注解在哪一个级别可用，在源代码中（SOURCE）、类文件中（CLASS）或者运行时（RUNTIME）。



注解处理器

利...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （二十一）并发]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80165133</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80165133</guid><author>WANG_Chaunwang</author><pubDate>Thu, 03 May 2018 22:05:30 +0800</pubDate><description><![CDATA[并发的多面性

使用并发时需要解决的问题有多个，而实现并发的方式也有多种，并且在这两者之间没有明显的映射关系。 
用并发解决的问题大体上可以分为“速度”和“设计可管理性 
两种。

并发通常是提高运行在单处理器上的程序的性能。

这听起来有些违背直觉。在单处理器上运行的并发程序会增加上下文切换的代价。但阻塞使这个问题不同。


  程序中的某个任务因为该程序控制范围之外的某些条件（通常是I/O）而...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （二十）注解]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80148352</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80148352</guid><author>WANG_Chaunwang</author><pubDate>Wed, 02 May 2018 10:01:40 +0800</pubDate><description><![CDATA[Java编程思想 - 第二十章 - 注解

注解（也被称为元数据）为我们在代码中添加信息提供了一种形式化的方法，使我们可以在稍后某个时刻非常方便地使用这些数据。



基本语法

@Target用来定义注解将用于什么地方（例如一个方法或者一个域）。@Rectetion定义该注解在哪一个级别可用，在源代码中（SOURCE）、类文件中（CLASS）或者运行时（RUNTIME）。



注解处理器

利...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十八）Java I/O系统]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141939</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141939</guid><author>WANG_Chaunwang</author><pubDate>Sun, 29 Apr 2018 11:27:33 +0800</pubDate><description><![CDATA[Java编程思想 - 第十八章 - Java I/O系统

File类

它既能代表一个特定文件的名称，又能代表一个目录下的一组文件的名称。

输入和输出

Java类库中的I/O类分成输入和输出两部分。

nio

速度的提高来自于所使用的结构更接近于操作系统执行I/O的方式：通道和缓冲器。

对象序列化

Java的对象序列化将那些实现了Serializable接口的对象转换成一个字节序列，并...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十六）数组]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141577</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141577</guid><author>WANG_Chaunwang</author><pubDate>Sun, 29 Apr 2018 10:37:05 +0800</pubDate><description><![CDATA[Java编程思想 - 第十六章 - 数组

数组与其他各类的容器之间的区别有三方面：效率、类型和保存基本类型的能力。

在Java中，数组是一种效率最高的存储和随机访问对象引用序列的方式。但是为这种速度所付出的代价是数组对象的大小被固定，并且在其生命周期中不可改变。

通常，数组与泛型不能很好地结合。不能实体化具有参数化类型的数组

    Peel&amp;lt;Banana&amp;gt;[] peels =...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十五）泛型]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141419</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80141419</guid><author>WANG_Chaunwang</author><pubDate>Sun, 29 Apr 2018 10:14:23 +0800</pubDate><description><![CDATA[Java编程思想 - 第十五章 - 泛型

泛型实现了参数化类型的概念。“泛型”这个术语的意思是：“适用于许多许多的类型”。

泛型方法

无论何时，只要你能做到，你就应该尽量使用泛型方法。也就是说，如果使用泛型方法可以取代将整个类泛型化，那么就应该只使用泛型方法，因为它可以使事情更清楚明白。另外，对于一个static的方法而言，无法访问泛型类的类型参数，所以，如果static方法需要使用泛型能力...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十四）类型信息]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80104776</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80104776</guid><author>WANG_Chaunwang</author><pubDate>Fri, 27 Apr 2018 11:07:27 +0800</pubDate><description><![CDATA[Java编程思想 - 第十四章 - 类型信息

运行时类型信息（RTTI）使得你可以在程序运行时发现和使用类型信息。

它使你从只能在编译期执行面向类型的操作的禁锢中解脱了出来，并且可以使用某些非常强大的程序。 
Java让我们在运行时识别对象和类的信息的方式：


“传统的”RTTI，假定我们在编译时已经知道了所有的类型；
“反射”机制，允许我们在运行时发现和使用类的信息。


为什么需要RTT...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十三）字符串]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80076554</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80076554</guid><author>WANG_Chaunwang</author><pubDate>Wed, 25 Apr 2018 11:13:59 +0800</pubDate><description><![CDATA[Java编程思想 - 第十三章 - 字符串

可以证明，字符串是计算机程序设计中最常见的行为。

不可变String

String对象是不可变的。String类中每一个看起来会修改String值的方法，实际上都是创建了一个全新的String对象，以包含修改后的字符串内容。

重载“+”与StringBuilder

不可变性会带来一定的效率问题。为String对象重载的“操作符”就是一个例子。
...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十二）通过异常处理错误]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80048501</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80048501</guid><author>WANG_Chaunwang</author><pubDate>Mon, 23 Apr 2018 11:47:54 +0800</pubDate><description><![CDATA[Java编程思想 - 第十二章 - 通过异常处理错误

Java的基本理念是结构不佳的代码不能运行。

发现错误的理想时机是在编译阶段。有的错误必须在运行期间解决。 
改进的错误恢复机制是提供代码健壮性的最强有力的方式。

使用异常往往能够降低错误处理代码的复杂度。把“描述在正常执行过程中做什么事”的代码和”出了问题怎么办”的代码相分离。



基本异常

异常情形（exceptional con...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十一）持有对象]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80037280</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80037280</guid><author>WANG_Chaunwang</author><pubDate>Sun, 22 Apr 2018 11:22:17 +0800</pubDate><description><![CDATA[Java编程思想 - 第十一章 - 持有对象

如果一个程序只包含固定糖耐量的且其生命期都是书籍的对象，那么这是一个非常简单的程序。

通常，程序问题根据运行时才知道的某些条件支创建新对象。在此之前，不会知道所需对象的数量，甚至不知道确切的类型。

数组是保存一组对象的最有效的方式，但是数组具有固定的尺寸，而在更一般的情况中，你在写程序时并不知道将需要多少个对象，或者是否需要更复杂的方式来存储对象...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （十）内部类]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80027505</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80027505</guid><author>WANG_Chaunwang</author><pubDate>Sun, 22 Apr 2018 09:53:27 +0800</pubDate><description><![CDATA[Java编程思想 - 第十章 - 内部类

可以将一个类的定义放在另一个类的内部，这就是内部类。

内部类是一种非常有用的特性，因为它允许你把一些逻辑相关的类组织在一起，并控制位于内部的类的可视性。然而，内部类与组合是完全不同的概念。

链接到外部类

当生成一个内部类的对象时，与制造它的外围对象（enclosing object)之间就有了一种联系，所以它能访问其外围对象的所有成员，而不需要任何...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （九）接口]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80015761</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/80015761</guid><author>WANG_Chaunwang</author><pubDate>Fri, 20 Apr 2018 11:00:00 +0800</pubDate><description><![CDATA[Java编程思想 - 第九章 - 接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。

抽象类和抽象方法

Java提供一个叫做抽象方法（相当于C++的纯虚函数）的机制，这种方法是不完整的；仅有声明而没有方法体。



    abstract void f();

包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法，该类必须被限定为抽象的。（否则，编译器就会报错）...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （八）多态]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79986671</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79986671</guid><author>WANG_Chaunwang</author><pubDate>Wed, 18 Apr 2018 11:37:16 +0800</pubDate><description><![CDATA[Java编程思想 - 第八章 - 多态

在面向对象的程序设计语言中，多态是继数据抽象和继承之后的第三种基本特征。

多态通过分离做什么和怎么做，从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性，还能创建可扩展的程序——即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。


“封装”通过合并特征和行为来创建新的数据类型。“
实现隐藏”则通过将细节“私有化”把接...]]></description><category></category></item><item><title><![CDATA[leetcode心得 - 动态规划篇]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79983551</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79983551</guid><author>WANG_Chaunwang</author><pubDate>Wed, 18 Apr 2018 08:40:07 +0800</pubDate><description><![CDATA[动态规划（dynamic programming）



word-break



题目描述


  Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.  
...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - (七）复用类]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79958084</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79958084</guid><author>WANG_Chaunwang</author><pubDate>Mon, 16 Apr 2018 11:11:33 +0800</pubDate><description><![CDATA[Java编程思想 - 第七章 - 复用类

复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言，仅仅能够复制代码并对之加以改变是不够的，它还必须能够做更多的事情。


方法一，组合：在新的类中产生现有类的对象；
方法二，继承：采用现有类的形式并在其中添加新代码。


继承

继承并不只是复制基类的接口。当创建了一个导出类的对象时，该对象包含了一个基类的子对象。这个子对象与你用基类...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （六）访问权限控制]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79947951</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79947951</guid><author>WANG_Chaunwang</author><pubDate>Sun, 15 Apr 2018 11:50:22 +0800</pubDate><description><![CDATA[Java编程思想 - 第六章 - 访问权限控制

访问控制（或隐藏具体实现）与“最初的实现并不恰当”有关。

面向对象设计中需要考虑的基本问题：“如何把变动的事物与保持不变的事物区分开来”。这对类库（library）而言尤为重要。

为了解决这一问题，Java提供了访问权限修饰词，以供类库开发人员向客户端程序员指明哪些是可用的，哪些是不可用的。访问控制的等级，从最大到最小权限依次为：public、...]]></description><category></category></item><item><title><![CDATA[排序算法]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79945142</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79945142</guid><author>WANG_Chaunwang</author><pubDate>Sat, 14 Apr 2018 22:37:00 +0800</pubDate><description><![CDATA[排序算法 - Java实现



快速排序

最经典实现，worst case为O(n2)O(n2)O(n^2)。但随机化后最坏情况也能达到O(nlog(n))O(nlog⁡(n))O(n\log(n))。 
在这里提一下二叉搜索树（BST），它与快速排序有着民曲同工之妙。 
比如：对6，10，13，5，8，3，2进行排序 
快排，以6为key，小于6的放到左边，其他放到右边




  6
  ...]]></description><category></category></item><item><title><![CDATA[Thinking in Java - 学习笔记 - （五）初始化与清理]]></title><link>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79937743</link><guid>https://blog.youkuaiyun.com/WANG_Chaunwang/article/details/79937743</guid><author>WANG_Chaunwang</author><pubDate>Sat, 14 Apr 2018 11:36:45 +0800</pubDate><description><![CDATA[Java编程思想 - 第五章 - 初始化与清理



涉及基本类型的重载

如何重载：


常数值被当作int值处理。
如果传入的实际参数类型小于方法中声明的形式参数类型，实际数据类型就会被提升。如果无法找到恰好接受char参数的方法，就会把char超脱提升至int型。
如果传入的实际参数大于重载方法声明的形式参数，就要通过类型转换来执行窄化转换。




为什么不以返回值区分重载方法

有时并不...]]></description><category></category></item></channel></rss>