<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Cheung]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Ahoob</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Ahoob]]></copyright><item><title><![CDATA[深入理解java对象的序列化]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/45337571</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/45337571</guid><author>Ahoob</author><pubDate>Tue, 28 Apr 2015 16:20:08 +0800</pubDate><description><![CDATA[注：在此声明此博客转自：http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html




关于Java序列化的文章早已是汗牛充栋了，本文是对我个人过往学习，理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理，以及多种方法对序列化形式进行定制。在撰写本文时，既参考了Thinking in ]]></description><category></category></item><item><title><![CDATA[java泛型-泛型的内部原理]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/45317271</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/45317271</guid><author>Ahoob</author><pubDate>Mon, 27 Apr 2015 21:52:00 +0800</pubDate><description><![CDATA[参考：java核心技术

一、Java泛型的实现方法：类型擦除

前面已经说了，Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢？因为，在编译期间，所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出（type erasure）。

Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参]]></description><category></category></item><item><title><![CDATA[java基础-接口]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44562955</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44562955</guid><author>Ahoob</author><pubDate>Mon, 23 Mar 2015 13:23:51 +0800</pubDate><description><![CDATA[接口（interface）：接口的地位等同于 class，接口中的所有方法都是抽象方法。 
在声明接口中的方法时，可以使用 abstract关键字，也可以不使用。 
通常情况下，都会省略掉 abstract关键字。可以将接口看作是特殊的抽象类 
（抽象类中可以有具体方法，也可以有抽象方法，而接口中只能有抽象方法，不能有具体方法）。一个类实现了某个接口，那么该类必须要实现接口中声明的所有方法。 
如果]]></description><category></category></item><item><title><![CDATA[java基础-抽象类与抽象方法]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44562893</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44562893</guid><author>Ahoob</author><pubDate>Mon, 23 Mar 2015 13:17:32 +0800</pubDate><description><![CDATA[抽象类（abstract class）：使用了 abstract关键字所修饰的 类叫做抽象类。 
抽象类无法实例化，也就是说，不能 new出来一个抽象类的对象（实例）。抽象方法（abstract method）(有声明无实现)：使用 abstract关键字所修饰的方法叫做抽象方法。 
抽象方法需要定义在抽象类中。相对于抽象方法，之前所定义的方法叫做具体方法（有声明，有实现）。如果一个类包含了抽象方法]]></description><category></category></item><item><title><![CDATA[二叉树遍历的6种遍历方法]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44540597</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44540597</guid><author>Ahoob</author><pubDate>Sun, 22 Mar 2015 19:48:50 +0800</pubDate><description><![CDATA[二叉树遍历的6种遍历方法（先序遍历，中序遍历，后序遍历分别用递归跟非递归实现）。主要代码如下：#include <stdlib.h>#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2typedef struct BiTNode
{
 int data]]></description><category></category></item><item><title><![CDATA[编译原理课程设计-PL/0编译器的扩充（C语言完整版）]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44519687</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44519687</guid><author>Ahoob</author><pubDate>Sat, 21 Mar 2015 19:05:00 +0800</pubDate><description><![CDATA[课程设计要求： 
1、基本内容（成绩范围：“中”、“及格”或“不及格”） 
（1）扩充赋值运算：*= 和 /= 
(2)扩充语句（Pascal的FOR语句）: 
①FOR <变量>:=<表达式> TO <表达式> DO <语句> 
②FOR <变量>:=<表达式> DOWNTO <表达式> DO <语句> 
    其中，语句①的循环变量的步长为1， 
语句②的循环变量的步长为-1。2、选做内容（成]]></description><category></category></item><item><title><![CDATA[java基础-继承]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44495531</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44495531</guid><author>Ahoob</author><pubDate>Fri, 20 Mar 2015 18:17:52 +0800</pubDate><description><![CDATA[当生成子类对象时，Java 默认首先调用父类的不带参数的构造方法，然后执行该构造方法，生成父类的对象。 
接下来，再去调用子类的构造方法，生成子类的对象。 
【要想生成子类的对象，首先需要生成父类的对象，没有父类对象就没有子类对象。比如说：没有父亲，就没有孩子】。也有解决办法：显式调用父类构造方法 
如果子类使用super()显式调用父类的某个构造方法，那么在 
执行的时候就会寻找与super()所]]></description><category></category></item><item><title><![CDATA[java基础-构造方法]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44495419</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44495419</guid><author>Ahoob</author><pubDate>Fri, 20 Mar 2015 18:09:11 +0800</pubDate><description><![CDATA[构造方法（Constructor）：构造方法用于完成对象属性的初始化工作，构造方法的特点：
构造方法的名字必须与类名完全一致（包含大小写）
构造方法没有返回值，连void也不能出现。
如果在定义一个类的时候，没有为类声明构造方法，那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法（默认的构造方法）
如果在定义一个类的时候，为类声明了构造方法，那么Java编译器就不会再为类添加构造方法]]></description><category></category></item><item><title><![CDATA[java基础-成员变量与局部变量的联系与区别]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44495197</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44495197</guid><author>Ahoob</author><pubDate>Fri, 20 Mar 2015 17:50:17 +0800</pubDate><description><![CDATA[成员变量与局部变量的联系与区别：
无论是成员变量还是局部变量，使用前都需要声明（定义）。
对于成员变量来说，使用前可以不初始化。如果没有初始化成员变量就开始使用，那么每个类型的成员变量都有一个默认的初始值
对于局部变量来说，使用前必须要初始化(不是说一定要初始化，只是暂时不能用，不然会报错，赋值之后就可以用了)  
  byte、short、int、long类型的初始值为0
  float、doub]]></description><category></category></item><item><title><![CDATA[java基础-final关键字]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44494989</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44494989</guid><author>Ahoob</author><pubDate>Fri, 20 Mar 2015 17:31:03 +0800</pubDate><description><![CDATA[final关键字：final可以修饰属性、方法、类。 
final修饰类：当一个类被 final所修饰时，表示该类是一个终态类，即不能被继承。 
final修饰方法：当一个方法被 final所修饰时，表示该方法是一个终态方法，即不能被重写（Override）。 
final修饰属性：当一个属性被 final所修饰时，表示该属性不能被改写。当 final修饰一个原生数据类型时，表示该原生数据类型的值不]]></description><category></category></item><item><title><![CDATA[java基础-static关键字]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44493809</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44493809</guid><author>Ahoob</author><pubDate>Fri, 20 Mar 2015 16:23:06 +0800</pubDate><description><![CDATA[static关键字：可以用于修饰属性，也可以用于修饰方法，还可以用于修饰类






static修饰属性：无论一个类生成了多少个对象，所有这些对象共同使用唯一一份静态的成员变量；
一个对象对该静态成员变量进行了修改，其他对象的该静态成员变量的值也会随之发生变化。
如果一个成员变量是 static的，那么我们可以通过类名.成员变量名的方式来使用它（推荐使用这种方式）。]]></description><category></category></item><item><title><![CDATA[SpringSecurity hideUserNotFoundExceptions]]></title><link>https://blog.youkuaiyun.com/Ahoob/article/details/44185829</link><guid>https://blog.youkuaiyun.com/Ahoob/article/details/44185829</guid><author>Ahoob</author><pubDate>Tue, 10 Mar 2015 23:58:38 +0800</pubDate><description><![CDATA[项目中，使用SpringSecurity用户登录验证时，密码错误能够正常抛出异常， 
但是用户不存在的情况却依然抛出密码错误的异常。。异常：总是抛出UsernameNotFoundException异常，打印出Badcredentials。原因：hideUserNotFoundExceptions属性默认为ture，会隐藏用户不存在的异常查看AbstractUserDetailsAuthentica]]></description><category></category></item></channel></rss>