首页 > 技术文章 > JAVA单例模式的使用和实现

ymcs 2021-09-07 10:09 原文

class NumberValidationRule : ValidationRule { public override ValidationResult Validate(object value,
CultureInfo cultureInfo) { if(int.TryParse(value.ToString(), out int defaultVal)) { return new ValidationResult(true, null); }
else { //第二个参数是错误描述信息 return new ValidationResult(false, "Invalid Number");
public class Test {
public static void main(String[] args) throws Exception {

Runtime runtime = Runtime.getRuntime();
runtime.gc();
//jvm的堆内存总量
System.out.println("堆内存总量" + runtime.totalMemory()/1024/1024 + "MB");
//jvm视图使用的最大堆内存
System.out.println("最大堆内存" + runtime.maxMemory()/1024/1024 + "MB");
//jvm剩余可用的内存
System.out.println("可用的内存" +runtime.freeMemory()/1024/1024 + "MB");

Runtime runtime1 = Runtime.getRuntime();

System.out.println(runtime == runtime1)
public class Test {
public static void main(String[] args) throws Exception {

Class<?> clazz = Runtime.class;
Constructor constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
Object o1 = constructor.newInstance();
Object o2 = Runtime.getRuntime();
System.out.println(o1.getClass().getSimpleName());
System.out.println(o2.getClass().getSimpleName());
System.out.println(o1 == o2);
public enum EnumSingleton {

INSTANCE;
class MyRuntime{

public void hello(){
System.out.println("hello");
}
}

private MyRuntime myRuntime;

EnumSingleton(){
myRuntime = new MyRuntime();
}

public MyRuntime getData(){
return myRuntime;
}

public static EnumSingleton getInstance(){
return INSTANCE;
public class Test {
public static void main(String[] args) throws Exception {

EnumSingleton.MyRuntime myRuntime = EnumSingleton.INSTANCE.getData();
myRuntime.hello();
EnumSingleton.MyRuntime myRuntime1 = EnumSingleton.getInstance().getData();
System.out.println(myRuntime == myRuntime1);
public class LazyInnerClassSingleton {

static {
System.out.println("加载静态代码块");
}

private LazyInnerClassSingleton(){

System.out.println("创建对象成功");

}

public static void hello(){
System.out.println("hello");
}
/*
在调用getInstance方法时InnerLazy类被加载的才会初始化对象
*/
public static LazyInnerClassSingleton getInstance(){
return InnerLazy.LAZY;
}

private static class InnerLazy{

private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
public class Test {

public static void main(String[] args) throws Exception {

LazyInnerClassSingleton.hello();
System.out.println("开始创建对象实例");
LazyInnerClassSingleton.getInstance();

 

推荐阅读