随笔分类 -  Beginning Java 7

Learning the book Beginning Java 7
摘要:1. Throwable 类 阅读全文
posted @ 2013-12-29 08:26 davesuen 阅读(136) 评论(0) 推荐(0)
摘要:嵌套类分为四种:static member class 静态成员类nonstatic member class 非静态成员类anonymous class 匿名类local class 局部类 后三者统称为 inner class 内部类。还有一种嵌套的形式叫 interfaces within classes 类内部接口,我们在最后介绍。1. Static Member Class 静态成员类//外围类classEnclosingClass{privatestaticinti;//私有静态属性//私有静态方法m1privatestaticvoidm1(){System.out.printl. 阅读全文
posted @ 2013-12-28 09:14 davesuen 阅读(198) 评论(0) 推荐(0)
摘要:Java 垃圾回收机制原理: Java 语言使用 garbage collector 来进行垃圾回收。它是允许在后台的代码,间或地检查没有引用的对象(unreferenced object)。发现后,会在系统堆栈(heap)中清除来释放空间。 unreferenced object 是在程序中任何位置都不能被访问的对象,比如new Emplyee ("jack",32);当程序中把一个对象的所有引用都清除了的时候,这个对象就变成了 unreferenced object。 虽然 Java 有这样的自动的垃圾回收机制,它仍然有内存泄露的风险:比如我们持续的创建对象,而忘记清除 阅读全文
posted @ 2013-12-27 23:58 davesuen 阅读(223) 评论(0) 推荐(0)
摘要:1. 抽象类:为什么用抽象类: 一些 generic 的类本身并没有现实意义,所以不需要被实例化。比如动物,自然界没有动物这个物种,但却有无数的继承自动物的物种,那么动物本身可以是一个抽象类。抽象类使用规则:抽象类不可以被创建,不能有实例。抽象类不可以是 final 的,因为 final 类不能被继承,那么抽象类就没任何意义了。抽象类可以包含任意可见性的属性。可以包含非抽象方法,但非抽象方法必须实现(必须有函数体)。可以不包含抽象方法。抽象方法只能声明,不能实现。抽象方法在子类中必须被实现,除非子类本身也是抽象的。抽象方法不可以是 private 的,而是 public 或 protecte. 阅读全文
posted @ 2013-12-27 09:44 davesuen 阅读(280) 评论(0) 推荐(0)
摘要:public final class String implements Serializable, Comparable, CharSequence所以:1. String 一旦被创建不能被修改,因为 final2. String 不能调用 clone() 因为没有 implements CloneableString 类中含有一些对比字符串的方法,比如字典比较等等。String 的比较:1. == 用来比较是否是两个 String 是否是同一个引用。如:String s1 = "hello";String s2 = "hello";String s3 阅读全文
posted @ 2013-12-24 09:21 davesuen 阅读(159) 评论(0) 推荐(0)
摘要:哈希码和 equals() 都是用来比较的。1. 哈希码的作用是用来提高比较的效率。因为当比较的对象比较复杂时,equals() 可能很耗时,但哈希码只需要比较一个 int 。哈希码常用于集 (set) 中的检索。2. 规则:当我们 override 了 equals() 和 hashcode() 中的其中一个时,另一个也要重写。因为 Java 的正确规则是,如果 equals() 为真,hashcode() 必须相同,但反之可以不成立。需要尽量遵循此此规则。3. 一种合理的 hashcode() 的重写方式:public int hashcode() { int hash = 1; ... 阅读全文
posted @ 2013-12-24 08:49 davesuen 阅读(163) 评论(0) 推荐(0)
摘要:当我们想在系统进行垃圾回收时做一些特定的工作,我们就可以重写 finalze() 函数,因为 Object 的 此函数是空的。比如:protected void finalize() throws Throwable { try { //do something } finally { super.finalize(); }}但这种写法不是完美的,因为如果出现 Exception,finally 不会被调用。super.finalize() 将永远不会被执行。那么解决办法是,要处理 Exception,并在处理后调用 super.finali... 阅读全文
posted @ 2013-12-24 08:28 davesuen 阅读(177) 评论(0) 推荐(0)
摘要:== 用于判断是否为同一引用。比如对于 String:System.out.println("abc" == "abc"); // Output: trueSystem.out.println("abc" == "a"+"bc"); // Output: trueSystem.out.println("abc" == "Abc"); // Output: falseSystem.out.println("abc" != "de 阅读全文
posted @ 2013-12-24 08:19 davesuen 阅读(221) 评论(0) 推荐(0)
摘要:Cloning 分两类:影子克隆 shallow cloning 深度克隆 deep cloning* 调用 clone() 需要 implments Cloneable。此函数为 protected,如果在外部调用,需要把它重写为 public 的。Cloneable 接口本身其实是空的,也就是没有方法需要实现。所以 clone() 可以不重写。这种空的接口被称为 marker interface 标记接口 或 tagged interface 标签接口。1. 影子克隆是简单的克隆,对于一个对象,克隆后的对象和被克隆的对象可能有相同的属性的引用。比如:public class ... 阅读全文
posted @ 2013-12-24 08:04 davesuen 阅读(272) 评论(0) 推荐(0)
摘要:Initializer 分两类:class initializer 类初始化器 instance initializer 实例初始化器1. class initializer,在编译时运行,通过 () 函数。例:Class A { static int i; static { i = 10; }}初始化于static关键字中。2. instance initializer,在实例创建时运行,通过 () 函数,主要用于代替 constructor。Class A { double [] a; { a = new ... 阅读全文
posted @ 2013-12-24 05:39 davesuen 阅读(171) 评论(0) 推荐(0)