技术改变世界 创新驱动发展
// 在自己内部定义自己一个实例,是不是很奇怪? private static Singleton instance = new Singleton(); // 注意这是private 只供内部调用 private Singleton() { } // 这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } }
(2)第二种形式-懒汉式单例类:第一次调用才初始化。 public class GoodSingleton { // 在自己内部定义自己一个实例,是不是很奇怪? private static GoodSingleton instance = null; // 注意这是private 只供内部调用 private GoodSingleton() { } //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率
public static synchronized GoodSingleton getInstance() { if(instance == null){ return new GoodSingleton(); }else{ return instance; } } }
//懒汉式的另一种改进
public class GoodSingleton { // 在自己内部定义自己一个实例,是不是很奇怪? private volatile static GoodSingleton instance; // 注意这是private 只供内部调用 private GoodSingleton() { } // 两次检查 public static GoodSingleton getInstance1() { if (instance == null) {
您的未来就是我们的未来
技术改变世界 创新驱动发展
synchronized (GoodSingleton.class) { if (instance == null) { instance = new GoodSingleton(); } } } return instance; } }
(3)登记式单例类:为了克服饿汉式和懒汉式单例类不可继承的缺点而设计的。 5、补足代码
packagelianxi; interface Interface { }
class Test{ }
public class Lianxi{ } 答案:
interface Interface { }
class Test{
void method();
//补上代码,通过匿名内部类
public static void main(String[] args) { }
Test.function().method();
void method();
public static Interface function() {
//补上代码,通过匿名内部类 return new Interface(){
public void method() {
System.out.println(\
您的未来就是我们的未来 技术改变世界 创新驱动发展
}
}
};
}
public class Lianxi{ }
public static void main(String[] args) { }
// 解析:读懂本句代码是解题关键 Test.function().method();
您的未来就是我们的未来