java模式代码 java 代码简洁( 三 )


* skip the space character
*/
public void write(int b) throws IOException{
if(b!= ){
super write(b);
}
}
}
它从FilterOutputStream继承 并且重写了它的write(int b)方法 在write(int b)方法中首先对输入字符进行了检查 如果不是空格 则输出
以下是一个测试程序
以下是代码片段
import java io BufferedInputStream;
import java io DataInputStream;
import java io DataOutputStream;
import java io IOException;
import java io InputStream;
import java io OutputStream;
/**
* Test the SkipSpaceOutputStream
* @author Magic
*
*/
public class Test {
public static void main(String[] args){
byte[] buffer = new byte[ ];
/**
* Create input stream from the standard input
*/
InputStream in = new BufferedInputStream(new DataInputStream(System in));
/**
* write to the standard output
*/
OutputStream out = new SkipSpaceOutputStream(new DataOutputStream(System out));
try {
System out println( Please input your words: );
int n = in read(buffer buffer length);
for(int i= ;i〈n;i++){
out write(buffer[i]);
}
} catch (IOException e) {
e printStackTrace();
}
}
}
执行以上测试程序 将要求用户在console窗口中输入信息 程序将过滤掉信息中的空格 并将最后的结果输出到console窗口 比如
以下是引用片段
Please input your words:
a b c d e f
abcdef
总 结
lishixinzhi/Article/program/Java/gj/201311/27433
急求java设计模式,要求用到两种设计模式 求详细代码.饿汉式单例类
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造子
private Singleton1() {}
//已经自行实例化
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
2.懒汉式单例类
//懒汉式单例类.在第一次调用的时候实例化
public class Singleton2 {
//私有的默认构造子
private Singleton2() {}
//注意,这里没有final
private static Singleton2 single=null;
//静态工厂方法
public synchronizedstatic Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
//对懒汉式单例的改进(错误的改进)
//实际上,只有在第一次创建对象的时候需要加锁 , 之后就不需要了,这样可以提升性能
public synchronizedstatic Singleton2 getInstance() {
if (instance == null) {
synchronized(instance){ //锁住当前实例对象
if(instance == null){
instance = new Singleton2();
}
}
}
return instance;
}
错误原因:
aA、B线程同时进入了第一个if判断
bA首先进入synchronized块,由于instance为null,所以它执行instance = new Singleton();
c由于JVM内部的优化机制 , JVM先画出了一些分配给Singleton实例的空白内存,并赋值给instance成员(注意此时JVM没有开始初始化这个实例),然后A离开了synchronized块 。
dB进入synchronized块,由于instance此时不是null,因此它马上离开了synchronized块并将结果返回给调用该方法的程序 。
e此时B线程打算使用Singleton实例,却发现它没有被初始化,于是错误发生了 。
正确改进(使用内部类):
JVM内部的机制能够保证当一个类被加载的时候 , 这个类的加载过程是线程互斥的,JVM能够帮我们保证instance只被创建一次,

推荐阅读