`
lvjun106
  • 浏览: 429737 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
JS决断浏览器
<script type="text/javascript">
        var Sys = {};
        var ua = navigator.userAgent.toLowerCase();
        var s;
        (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
        (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
        (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
        (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
        (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;

        //以下进行测试
        if (Sys.ie) document.write('IE: ' + Sys.ie);
        if (Sys.firefox) document.write('Firefox: ' + Sys.firefox);
        if (Sys.chrome) document.write('Chrome: ' + Sys.chrome);
        if (Sys.opera) document.write('Opera: ' + Sys.opera);
        if (Sys.safari) document.write('Safari: ' + Sys.safari);
    </script>
JAVA可变参数列表
public void print(String... args){
for(String s:args){
System.out.println(s);
}
}
public static  void main(String[] args){
print(args);
}
JAVASCRIPT CALL,APPLYA
<!-- 
foo.call(this,arg0,arg1,arg2) = foo.apply(this,arguments) = this.foo(arg0,arg1,arg2)
-->
<script>
function foo(a,b,c,d){
alert(a+b+c+d);
}
function test(a,b,c,d){
foo.call(this,a,b,c,d);
foo.apply(this,arguments);
foo(a,b,c,d);
}
</script>
javascript,jquery在JSP中为防止冲突而加上注释
<script type="text/javascript">
//<![CDATA[
js scripts
//]]>
</script>
单例类 设计模式
第一种:非延迟加载单例类(饿汉式)

 
Java代码  收藏代码

    package test;  
      
    public class Singleton {  
        private Singleton() {  
        }  
      
        private static final Singleton instance = new Singleton();  
      
        public static Singleton getInstance() {  
        return instance;  
        }  
    }  

第二种:同步延迟加载(懒汉式)

 
Java代码  收藏代码

    package test;  
      
    public class Singleton {  
        private static Singleton instance = null;  
      
        private Singleton() {  
        }  
      
        public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }  

 

饿汉式是在类装载时直接得到该类的实例,而懒汉式在等到真正使用的时候调用工厂方法进行创建实例。因此,前者速度快,后者速度慢。但后者可以加载其他的类,(也就是动态扩展)灵活性高。

第三种:双重检测同步延迟加载(JDK5.0以上版本支持)
Java代码  收藏代码

    package test;  
      
    public class Singleton {  
        private volatile static Singleton instance = null;  
      
        private Singleton() {  
        }  
      
        public static Singleton getInstance() {  
        if (instance == null) {  
            synchronized (Singleton.class) {  
            if (instance == null) {  
                instance = new Singleton();  
            }  
            }  
        }  
        return instance;  
        }  
    }  

 

 

双重检测同步延迟加载是为了解决非延迟加载方式过多的同步产生瓶颈问题。

第四种:使用ThreadLocal修复双重检测
Java代码  收藏代码

    package test;  
      
    public class Singleton {  
        private static final ThreadLocal perThreadInstance = new ThreadLocal();  
        private static Singleton singleton;  
      
        private Singleton() {  
        }  
      
        public static Singleton getInstance() {  
        if (perThreadInstance.get() == null) {  
            createInstance();  
        }  
        return singleton;  
        }  
      
        private static final void createInstance() {  
        synchronized (Singleton.class) {  
            if (singleton == null) {  
            singleton = new Singleton();  
            }  
        }  
        perThreadInstance.set(perThreadInstance);  
        }  
    }  

  

第五种:使用内部类实现延迟加载

 
Java代码  收藏代码

    package test;  
      
    public class Singleton {  
        private Singleton() {  
        }  
      
        public static class Holder {  
        static Singleton instance = new Singleton();  
        }  
      
        public static Singleton getInstance() {  
        return Holder.instance;  
        }  
    }  
克隆对象,对象没有实现Clonable接口 克隆, clone
public static Object cloneObject(Object obj) throws Exception {
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(byteOut);
    out.writeObject(obj);

    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
    ObjectInputStream in = new ObjectInputStream(byteIn);

    return in.readObject();
  }
Global site tag (gtag.js) - Google Analytics