2013-08-28

Jre会优先读取环境变量classpath目录下的class文件,用命令行执行Java程序时,设置classpath可以提供很多方便。

读取规则如下

classpath=;c: 优先读取当前目录,再读取环境变量目录
classpath=c: 只读取环境变量目录
classpath=c:; 优先读取环境变量目录,再读取当前目录


2013-08-31

Java的单例设计模式

单例模式可以让类不论多少次实例化都只产生同一个对象。

饿汉式在类被加载时就会产生对象


单例模式编程的理解:利用了static的生存周期可以很方便的实现单例模式,让一个类的对象编程这个类的唯一对象,

public class Example{
	public static void main(String args[]) {
		Single ss=Single.getSingleton();
		Single ss2=Single.getSingleton();
		ss.addsi();
		ss.addsi();
		System.out.println(ss2.si);
	}
}

class Single{
	public int si=0;
	public void addsi(){
		si++;
	}
	private static Single sobj=new Single();
	private Single(){}
	public static Single getSingleton(){
		return sobj;
	}
}

懒汉式只有在函数被调用时才会产生对象

class Single{
	public int si=0;
	public void addsi(){
		si++;
	}
	//上面是普通的功能了函数,下面实现单例模式的函数
	private static Single sobj=null;//创建Single类型的变量,没有指向任何对象
	private Single(){}//不允许外部初始化类
	public static Single getSingleton(){
		if(sobj==null)//仅在第一次调用getSingleton时创建Single对象
			sobj=new Single;//sobj这是会指向一个Single对象
		return sobj;返回sobj的引用地址
	}
}



2013-09-01

继承关系的初始化顺序

父类的静态代码块执行>>子类的静态代码块执行>>父类的构造代码块执行>>父类构造函数执行>>子类的构造代码块执行>>类构造函数执行


2013-09-01


2013-09-06

Java的字符串无疑是个对象。 

起初用Java时我毫无悬念的用了这种方法

String s="asd";if(s=="asd");

在其他语言中这样做比较是没有问题,为什么Java却返回false。 

Java的String在实例化s时创建了s并指向String所开辟的内存空间 

可以写成String s = new String("asd"); 

if(s=="asd");可以写成if(s==new String("asd")) 

正所谓在Java里每个对象都是引用类型,双等号只是判断左右两边数组的引用是否一样。而非判断引用的内容。 

如果要准确的比较Java字符串请用String的equals方法。

if(s=="asd");应该写成if("asd".equals(s));才能得到准确的结果。