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


并且会保证把赋值给instance的内存初始化完毕,这样我们就不用担心上面的问题 。
同时该方法也只会在第一次调用的时候使用互斥机制 , 这样就解决了低性能问题
public?class?Singleton?{??
??
/*?私有构造方法,防止被实例化?*/??
private?Singleton(){
}
/*?此处使用一个内部类来维护单例?*/??
private?static?class?SingletonFactory?{??
private?static?Singleton?instance?=?new?Singleton();??
}
/*?获取实例?*/??
public?static?Singleton?getInstance()?{??
return?SingletonFactory.instance;??
}
/*?如果该对象被用于序列化,可以保证对象在序列化前后保持一致?*/??
public?Object?readResolve()?{??
return?getInstance();??
}
}
其实说它完美,也不一定,如果在构造函数中抛出异常,实例将永远得不到创建,也会出错????
第二种改进:
因为我们只需要在创建类的时候进行同步 , 所以只要将创建和getInstance()分开,
单独为创建加synchronized关键字,也是可以的
public class Singleton{
private static Singletoninstance=null;
private Singleton(){}
privatestatic synchronized void Init(){
if(instance==null)
instance=new Singletion();
}
public static Singleton getInstance(){
if(instance==null){
Init();
}
return instance;
}
}
3.登记式单例类
import java.util.HashMap;
import java.util.Map;
//登记式单例类.
//类似Spring里面的方法 , 将类名注册,下次从里面直接获取 。
public class Singleton3 {
private static MapString,Singleton3 map = new HashMapString,Singleton3();
static{
Singleton3 single = new Singleton3();
map.put(single.getClass().getName(), single);
}
//保护的默认构造子
protected Singleton3(){}
//静态工厂方法,返还此类惟一的实例
public static Singleton3 getInstance(String name) {
if(name == null) {
name = Singleton3.class.getName();
System.out.println("name == null"+"---name="+name);
}
if(map.get(name) == null) {
try {
map.put(name, (Singleton3) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(name);
}
//一个示意性的商业方法
public String about() {
return "Hello, I am RegSingleton.";
}
public static void main(String[] args) {
Singleton3 single3 = Singleton3.getInstance(null);
System.out.println(single3.about());
}
}
求Java代码使用循环结构java模式代码 , 通过Scanner类从控制台输入每个人java模式代码的捐款金额java模式代码,并累加每个人的捐款金额java模式代码,计算捐款总数和捐款人数 , 如果捐款总数达到10万元,则计算平均每人捐款金额 。
下面是通过输入进行统计,实际过程中还能是通过数据库进行操作,或者表格收集数据进行导入关系数据库进行统计 。还可以通过接入微信或者支付宝小程序收款实时统计 。
已经有人给过随机数示例,这里给出前端输入的示例java模式代码:
import java.util.Scanner;
public class CharityDonation {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = 0;// 捐款人数
int total = 0;// 募捐总数
int avg = 0;// 平均每人捐款金额
int donation;// 每个人的捐款金额
while (total100000num1000) {
System.out.print("请输入第" + (num + 1) + "个人的捐款金额:");

推荐阅读