随笔分类 - Thinking in Java
详解Java HashMap
摘要:Map 接口package util;import java.util.Collection;import java.util.Set;public interface Map { int size(); boolean isEmpty(); boolean containsKey...
阅读全文
Java 泛型 (二)
摘要:Java与混型C++中存在一种叫混型的东西,他可以通过Template动态的构建继承链#include <string>#include <ctime>#include <iostream>using namespace std;template<class T> class TimeStamped : public T { long timeStamp;public: TimeStamped() { timeStamp = time(0); } long getStamp() { return timeStamp; }};template<
阅读全文
Java 泛型 (一)
摘要:泛型的分类1. 泛型类与接口2. 泛型方法package generic;import java.util.ArrayList;import java.util.List;/** * 泛型类及泛型方法 */public class GenericClass<E> { private E data; public E getData() { return data; } // 泛型方法 // 这个方法可以通过Class对象生成任意对象的List public <T> List<T> getT(Class<T> cls, int size)...
阅读全文
Java 动态代理
摘要:动态代理其实也是代理的一种,所谓动态在于我们的代理类可以适用于所有类型的被代理对象,这一点其实跟PHP的__call()方法是一样的。public interface Flyable { void fly();}public class Eagle implements Flyable { @Override public void fly() { System.out.println("I am eagle, I can fly in 100 km/h"); }}import java.lang.reflect.InvocationHandler;imp...
阅读全文
漫谈Java字符串
摘要:String, StringBuilder, StringBuffer通过一些例子说明String的运行机制,首先明确确定的字符串值会提前被放入1.最简单的常量赋值 public void test() { String test = "test"; }查看JVM字节码public void test(); Code: 0: ldc #2; //String test 2: astore_1 3: return解释:0: 从常量池获取常量#2(即"test")并将其压入栈顶2: 将栈顶字符串引用弹出并赋给本地变量 1 (即变量te...
阅读全文
浅谈Java内部类
摘要:Java的内部类可以获得其外围类的所有成员访问权限,可以很方便的对外围类进行操作。非static内部类都含有一个隐藏的外围类引用,这个引用可以通过 OuterClass.this 来获得使用。通常如果我们的一组操作需要遵循某些规范(例如接口,抽象类),就可以把这一组操作封装成一个内部类来供外部使用,而又不会脱离外围类。参见如下代码:public interface Selector<E> { boolean hasNext(); E next();}public class Sequence { private int[] seq; private Selector<I...
阅读全文
Java 变参函数的实现
摘要:Java的变参函数实现实际上参数是一个数组,其简单用法如下public class Test { private static void variableParam(Object... args) { for (Object v : args) { System.out.print(v.toString() + " "); } System.out.println(); } private static void variableParam2(int a, int... args) { System...
阅读全文
Java 静态(static)与非静态语句执行顺序
摘要:Java中的静态(static)关键字只能用于成员变量或语句块,不能用于局部变量static 语句的执行时机实在第一次加载类信息的时候(如调用类的静态方法,访问静态成员,或者调用构造函数), static 语句和 static 成员变量的初始化会先于其他语句执行,而且只会在加载类信息的时候执行一次,以后再访问该类或new新对象都不会执行而非 static 语句或成员变量,其执行顺序在static语句执行之后,而在构造方法执行之前,总的来说他们的顺序如下1. 父类的 static 语句和 static 成员变量2. 子类的static 语句和 static 成员变量3. 父类的 非 static
阅读全文
Java 的垃圾回收机制
摘要:先看一段转载,原文出自http://jefferent.iteye.com/blog/1123677虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。 年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。..
阅读全文
第二章 一切都是对象
摘要:1. Java数据的存储1) 寄存器: 位于CPU,不可直接控制2) 堆栈(The Stack): 位于内存,用于存储基本类型和对象引用。可以通过堆栈指针获得处理器支持,其速度仅次于寄存器,Java系统需要知道存储在堆栈中所有项的生命周期。3) 堆(The Heap): 位于内存,用于存储Java对象,他更灵活,不需要知道对象的生命周期,但是分配和清理堆需要更多的时间4) 静态存储区: 存放静态(static)成员5) 常量存储去: 存放常量(final)成员6) 非RAM存储: 存放流对象和持久化对象参见这里:http://zmesky.blog.163.com/blog/static/20
阅读全文