自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沐青桦的专栏

怀具人生

  • 博客(37)
  • 资源 (2)
  • 收藏
  • 关注

原创 Effective Java 学习笔记(25)

<br />优先使用列表,而不是数组。<br /> <br />数组与泛型相比,有两个重要的不同点。1.数组的类型可以向上转型,即如果sub为super的子类型,那么数组类型的sub[]就是super[]的子类型,相反,泛型则是不可变的。<br />2.数组是会在运行时才知道并检查它们的元素类型约束,会抛运行时异常,而泛型只在编译时强化类型信息,并在运行时丢弃。从技术上说,泛型是不可具体化的,即运行时包含的信息比它编译时更少。<br /> <br />一般说来,数组和泛型不能很好地混合使用。如果得到编译时错

2010-07-26 00:08:00 424

原创 Effective Java 学习笔记(24)

<br />消除非受检警告<br /> <br />使用泛型编程时,会有许多编译器警告:非受检强制转化警告(unchecked cast warnings),非受检方法调用警告,非受检普通数组创建警告,以及非受检转换警告(unchecked conversion warnings)。<br /> <br />有些警告比较好消除,而有些难以削除。要尽可能的地消除每一个非受检警告。如果消除了所有警告,就可以确保代码是类型安全的,即不会在运行时出现ClassCastException异常。<br /> <br /

2010-07-22 23:50:00 447

原创 Effective Java 学习笔记(23)

<br />不要在新代码中使用原生态类型,而应该使用泛型。<br />泛型的优点:<br />1. 编译时就会进行类型检查。 当向一个容器中装入对象时,编译器会检查,插入的实例是不是前面声明的类型。而不用等到运行时才会发现,而抛出ClassCastException.<br /> <br />2.从集合中取元素不用再进行手工转换,编译器会替你进行隐式的转换。<br />尽量使用Set<Object>代替Set,  因为原生态不是类型安全的。<br />在必要时可以使用Set<?><br />// Unbou

2010-07-21 23:42:00 330

原创 Effective Java 学习笔记(22)

<br /> 嵌套类有四种,静态成员类(static member class),非静态成员类(nonstatic member class),匿名类(anonymous class)和局部类(local class)。我们应该优先考虑静态成员类。<br /> <br />静态成员可以看作是普通类,只是声明在另一个类中。它可能访问外围类的所有成员。使用静态成员类的场合是它作为公有类的辅助类,仅当与它的外部类一起使用时才起作用。<br /> <br />非静态成员类虽然看起来与静态类在语法上差不多,但实际上有

2010-07-20 23:15:00 358

原创 Effective Java 学习笔记(21)

<br />使用函数对象表示策略。 实际上就是以Java的方式来实现函数指针。<br /> <br />用Java的方式实现,首先可以定义一个泛型接口,<br /> <br /><br />// Strategy interface<br />public interface Comparator<T> {<br />public int compare(T t1, T t2);<br />}<br /> <br />然后用一个类来实现它。这个类最好的sington模式,因为它没有状态,没有成员变量。<br

2010-07-19 23:47:00 358

原创 Effective Java 学习笔记(20)

<br />类层次要优于标签类。<br /> <br />所谓标签类是指含有多个功能类,如下。<br /> <br />class Figure {<br />  enum Shape {<br />   RECTANGLE, CIRCLE<br />  };<br />  // Tag field - the shape of this figure<br />  final Shape shape;<br />  // These fields are used only if shape is REC

2010-07-17 22:51:00 295

原创 Effective Java 学习笔记(19)

<br />常量不应该定义在接口中,或者说不应该有纯常量的接口。<br /> <br />常量一般有以下几种方法:<br />1. 如果常量与某个类或接口相关,应该把常量加到这个类或接口中。<br />2.如果常量能被看成枚举类型,就定义为枚举。<br />3.否则请用不可实例化的工具类来导出这些常量。

2010-07-17 22:30:00 327

原创 Effective Java 学习笔记(18)

<br />接口要比抽象类要好。<br />原因有三点:<br />1.已经存在的类,不管有不有父类,都可以实现新的接口,而抽象类无法作到这一点,因为JAVA中不支持多重继承.<br />2.有时候,接口不用严格按照类层次结构来实现,即接口允许我们实现非层次结构的类型框架。<br />3.接口是定义mixin(混合类型)的理想选择。<br />由于接口不允许包含方法的实现,它不能提供一个默认的行为。但我们可以为每一个接口实现一个抽象的骨架(skeletal implementation),通常这种被称作Ab

2010-07-15 22:32:00 371

原创 Effective Java 学习笔记(17)

如果要使一个类可继承,则好的设计和文档必不可少。首先,必须在文档中说明可以重载的方法,对每一个公共的,或保护的类或构造器,文档必须说明调用的顺序及重载的顺序,按照惯例,在每个函数的后面都有一段声明,声明这个函数的实现细节,依赖等等。 要测试一个类是否能很好的被继承,唯一的最好办法就是写一个子类来测试。当然其中一些子类应该是由其他人写。 写一个能被很好继承类的一个原则是:构造

2010-04-01 23:34:00 373

原创 Effective Java 学习笔记(16)

继承是比较有效的代码复用的手段,但实际上它并不是最好的,不合当的使用会导致软件错误。当然如果子类与父类在同一个包中,并且它们都是由同一个程序员写的. 与方法调用不同,继承会破坏封装。 例1: public class InstrumentedHashSet extends HashSet {         // The number of attempted elemen

2010-02-26 23:07:00 337

原创 Effective Java 学习笔记(15)

一个不可改变(immutable)的类,顾名思义,就是其实例不能改变,即里面所有的信息在创建时就赋值,在其生命周期中其值不变。使用不可改变的类的优点在于,设计简单,易于实现和使用,具体来讲,它的状态机很简单,只有一个状态。它是线程安全,能够自由的被共享,能够通过静态工厂模式尽可能复用已经创建出来的对象,也不用为它写clone或是拷贝构造函数,不可改变的类也便于维护,是系统的良性基石。其唯一

2010-02-18 00:46:00 331

原创 Effective Java 学习笔记(14)

在公共类,使用getter & setter,而不是直接访问字段。当然,如果是不可改变的字段,那么其不利因素要小一些,对于私有类或是包可访问的类,在有些条件是可允许直接访问。

2010-02-15 13:43:00 263

原创 巧用javascript获得下载地址

突然间想去下首fire in the hole的铃声,于是用soso找了一下,进入了手机乐园 (http://download.shouji.com.cn/do/wave?html=&inputname=wave&wname=Fire+in+the+hole+&thsubmit=%E6%90%9C%E7%B4%A2),选择fire in the hole,弹出个窗口,提示让输入手机号码。晕死,不就

2010-02-15 13:42:00 455

原创 Effective Java 学习笔记(13)

影响模块设计好与坏的一个重要因素就是这个模块是否隐藏它的内部数据和其他一些实现细节。信息隐藏的好处:方便独立开发,测试,优化,使用,理解和修改。能够提高系统开发速(因为各模块可以并行开发),也能易于维护和调试,也能减少系统构建的风险。要设计良好的模块,规则很简单,就一句话:使每个类或接口尽量不可访问。1.对于top-level的类和接口(与文件名相同的类或接口),只有两种访问权限:包可

2010-02-15 13:42:00 295

原创 Effective Java 学习笔记 (12)

与其它类不同,compareTo方法并不是Ojbect中的方法,它是Comparable接口中唯一的方法。通过实现Comparable接口,可以它能够自然排序。排序,Arrays.sort(a); 就OK了。书上提了一个巧妙的方法,用来消除重复的字符串。它用了一个Set集合来过滤重复的字段。public class WordList {          public static v

2010-02-15 13:41:00 278

原创 Effective Java 学习笔记 (10)

java.lang.Object 提供了一个toString()的方法,但实际上这个方法返回的往往不是我们需要的,它返回的是类名加上“@”加上十六进制的hash值。这显然不是我们想要的,所以必须重载toString函数。很简单的例子,如下System.out.println("Failed to connect: " + phoneNumber);如果不重载,则有Failed to

2010-02-15 13:40:00 295

原创 Effective Java 学习笔记 (11)

Clone这个方法很鸡肋,原因是因为它是受保护的(protected),其二Clone这个方法是可选的,即有可能类没有提供这个方法。clone没有调用构造函数,而且如果父类没有实现clone的话,子类永远也不可能正确实现clone.总之,clone是个很头痛的函数,如果要正确实现,必须考虑到深考贝的情况,否则被克隆出来的对象就不是独立的,如,要写一个堆栈类的克隆函数,正确的实现方法是:

2010-02-15 13:40:00 294

原创 Effective Java 学习笔记(9)

通常,有一类问题的产生都是由于没有重载hashCode这个方法. 当你重载equals后,hashCode必须重载,否则在使用HashMap, HashSet, Hashtable的时候,会出错.对于hashCode有几个原则.1. 不管什么时候调用hashCode,如果同一个对象与hashCode相关的字段没有修改的话,这个方法的返回值必须相同. 但不必和另一个应用程序中的值相等.2

2010-02-15 13:38:00 263

原创 Effective Java 学习笔记(14)

在公共类,使用getter & setter,而不是直接访问字段。当然,如果是不可改变的字段,那么其不利因素要小一些,对于私有类或是包可访问的类,在有些条件是可允许直接访问。

2010-02-15 13:36:00 265

原创 Effective Java 学习笔记(13)

影响模块设计好与坏的一个重要因素就是这个模块是否隐藏它的内部数据和其他一些实现细节。信息隐藏的好处:方便独立开发,测试,优化,使用,理解和修改。能够提高系统开发速(因为各模块可以并行开发),也能易于维护和调试,也能减少系统构建的风险。 要设计良好的模块,规则很简单,就一句话:使每个类或接口尽量不可访问。 1.对于top-level的类和接口(与文件名相同的类或接口),只有两种访

2010-02-05 11:51:00 374

原创 巧用javascript获得下载地址

突然间想去下首fire in the hole的铃声,于是用soso找了一下,进入了手机乐园 (http://download.shouji.com.cn/do/wave?html=&inputname=wave&wname=Fire+in+the+hole+&thsubmit=%E6%90%9C%E7%B4%A2),选择fire in the hole,弹出个窗口,提示让输入手机号码。晕死,

2010-02-01 16:48:00 1100

原创 Effective Java 学习笔记 (12)

与其它类不同,compareTo方法并不是Ojbect中的方法,它是Comparable接口中唯一的方法。通过实现Comparable接口,可以它能够自然排序。 排序,Arrays.sort(a); 就OK了。 书上提了一个巧妙的方法,用来消除重复的字符串。它用了一个Set集合来过滤重复的字段。 public class WordList {          public static

2010-01-29 20:56:00 485

原创 Effective Java 学习笔记 (11)

Clone这个方法很鸡肋,原因是因为它是受保护的(protected),其二Clone这个方法是可选的,即有可能类没有提供这个方法。clone没有调用构造函数,而且如果父类没有实现clone的话,子类永远也不可能正确实现clone.总之,clone是个很头痛的函数,如果要正确实现,必须考虑到深考贝的情况,否则被克隆出来的对象就不是独立的,如,要写一个堆栈类的克隆函数,正确的实现方法是:

2010-01-29 17:01:00 480

原创 Effective Java 学习笔记 (10)

java.lang.Object 提供了一个toString()的方法,但实际上这个方法返回的往往不是我们需要的,它返回的是类名加上“@”加上十六进制的hash值。这显然不是我们想要的,所以必须重载toString函数。 很简单的例子,如下 System.out.println("Failed to connect: " + phoneNumber); 如果不重载,则有 Failed to

2010-01-28 17:42:00 361

原创 Effective Java 学习笔记(9)

通常,有一类问题的产生都是由于没有重载hashCode这个方法. 当你重载equals后,hashCode必须重载,否则在使用HashMap, HashSet, Hashtable的时候,会出错.对于hashCode有几个原则.1. 不管什么时候调用hashCode,如果同一个对象与hashCode相关的字段没有修改的话,这个方法的返回值必须相同. 但不必和另一个应用程序中的值相等.2

2010-01-24 17:44:00 394

原创 Effective Java 学习笔记(8)

当重载equals方法时,遵循惯例. equals不是每个类都必须重载,当以下几个条件满足,可以不重载equals. 1. 类的实例只有同一个才被判为相等. 如Thread类. 2. 不用关心两个对象是否逻辑相等的时候,或是说比较对象没有意义. 3.父类已经重载了equals,而且父类的equals也适用于子类,子类就不用重载equals. 4.这是一个私有类或是包内访问,你确定equa

2010-01-23 15:56:00 468

原创 Effective Java 学习笔记 (7)

Finalizer 不可计划的,也是危险的,一般也是不必要的. 不能在finalizer中放任何与依赖时间相关的操作,因为你不知道它什么时候被执行. 比如在finalizer中关闭文件的做法就是错误的, 根据JVM的实现方式不同,有可能导致打开的文件数过多而无法再打开文件. 也不能在finalizer中改变状态,如给数据库解锁等. finalizer还能带来严重的性能问题, 显示的调用的终

2010-01-23 14:56:00 752 1

原创 Effective Java 学习笔记 (6)

及时消除不使用的对象的引用, 理论上, 带有内存管理的语言是不存在内存泄漏的, 但是如果对对象的操作不当,也是可能会造成内存泄漏. 如有一个stack, 其pop函数如下. public Object pop() {                if( Element.length() == 0) return null;                return Element[s

2010-01-23 00:24:00 437

原创 Effective Java 学习笔记(5)

尽量复用对象,而不是创建新的对象,特别是当一个对象是immutable(不可改变)的时候。 如String对象, String s= new String(“String”);   千万不要这样做,因为这里实际上创建了两个对象。 要避免出现这样的情况, 1是可以用静态工厂函数,来解决,如类库中的Boolean.valueOf(“true”),这种方式要优于new Boolean(“true

2010-01-21 12:24:00 349

原创 Effective Java 学习笔记(4)

这个原则很简单,就是使用私有构造函数防止类被实例化。 有时,我们会写一些工具类,如java.lang.Math 或是 java.util.Arrays, 这些类中都是静态函数,在设计的时候,这些类并不是用来被实例化的。这个时候,就很有必要把构造函数私有化。 public class UtilityClass { private UtilityClass() { throw n

2010-01-18 10:25:00 271

原创 Effective Java 学习笔记(3)

在实现singleton模式时,我们有以下几种方法。 1. public static final 字段加上private 的构造函数。 public class Singleton{             public static final Singleton INSTANCE = new Singleton();             private Singleton(

2010-01-16 14:11:00 370

原创 Eclipse 中 运行 J2me 程序出现ClassNotFound的异常

有时,在运行一个J2me程序, 编译时一切正常,但是模拟器在起启后一会儿就自动退出, 然后控制台抛出 TestMidlet   ClassNotFound 的错误, 或是抛出一大堆内存或是栈上的数据, 这是由于我们的环境包含了多个Perverification程序, 模拟器有一个, WTK有一个,Eclipseme有一个,因此,只要我们选择适当的perverification程序就可以了. 选

2010-01-15 23:06:00 1249 2

原创 Effective Java 学习笔记(2)

 有时,我们在写一个构造函数时,经常因为它包含众多的参数而苦恼,这时可以考虑用Builder模式来创建对象。 如,我们要设计一个营养成份的类,包含能量,蛋白质,脂肪,钙,铁,锌,维生素A, 维生素B1 ... 等,但在构造的时候,不一定每次都需要这些参数,如钙,铁,锌和维生素等是可选的,为了适应多种可能的搭配,比较原始的办法就是采用telescoping constructor模式,例子如

2010-01-15 14:58:00 408

原创 Java 中的内部静态类

Java 中内部动态类(没有static)关键字和内部静态类的就在于内部动态类不能定义静态变量或是静态方法,如果要在内部类中使用静态成员,必须将类声明为静态类. 内部类中的静态方法可以访问外部类的静态方法和本类中的静态方法或成员, 非静态方法可以访问其他所有的方法或成员

2010-01-13 23:59:00 483

原创 Http协议之Referer

Http协议头中的Referer主要用来让服务器判断来源页面, 即用户是从哪个页面来的,通常被网站用来统计用户来源,是从搜索页面来的,还是从其他网站链接过来,或是从书签等访问,以便网站合理定位. Referer有时也被用作防盗链, 即下载时判断来源地址是不是在网站域名之内, 否则就不能下载或显示,很多网站,如天涯就是通过Referer页面来判断用户是否能够下载图片. 当然,对于某些恶意用户,也

2010-01-13 23:36:00 12659 1

原创 Effective Java 学习笔记(1)

通常情况下,我们在写一个类时,一般会赋予它一个或几个public的构造函数,让外部程序能够创建对象. 然而,在effective java 中,从另一个角度告诫我们在使用public的构造函数前,先考虑用public 的静态函数来创建对象.  其优点如下: 1. 一个静态的工厂函数,可以取不同的名字. 而构造函数的名字只能与类同名.    一个API的设计中,一个好懂的名字

2010-01-12 23:49:00 758

原创 WML中 PostField中数据提交编码

在实现表单提交时,对于Post方法,理论上是根据字段中所带的标志来说明代码对数据的处理方式。  $(keyword:escape):指示微浏览器将非文本数字的字符替换成十六进制代码;如 + 被转成 %2B 空格 被转成%20,字母数字不动,按照URL的编码标准处理。 $(keyword:unesc):指示微浏览器用相应的字符替换十六进制代码;反过来,把%2B 替换成+  $(key

2010-01-12 19:36:00 1101 1

Addison Wesley Professional - Rootkits, Subverting The Windows Kernel

2403846-Addison Wesley Professional - Rootkits, Subverting The Windows Kernel (Jul 2005 Ebook)

2009-03-30

Windows环境下32位汇编语言程序设计

Windows环境下32位汇编语言程序设计 Windows环境下32位汇编语言程序设计

2009-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除