Java语言怎么编写一个能够读取系统名称的工具?怎么获取当前的系统的名称,我要做出判断,实现的思路是什么
System.getProperty("os.name")
操作系统吗?可以参考这篇博客:https://blog.csdn.net/m0_47406832/article/details/127026978
不知道你这个问题是否已经解决, 如果还没有解决的话:enum Singleton5 {//枚举类的单例模式
INSTANCE;
public Singleton5 getInstance(){
return INSTANCE;
}
}
1、 私有化构造器并不保险,通过反射机制调用私有构造器。而枚举类不能被反射,所以可以防止反射攻击
//模拟反射攻击
class Singleton {//双重校验锁,性能佳线程安全
private static Singleton4 instance=null;
private Singleton4() {}
public static Singleton4 getInstance() {
if(instance==null) {
synchronized (Singleton4.class) {
if (instance==null) {
//new对象分为三个操作
//分配内存
//调用构造方法初始化
//赋值
instance=new Singleton4();
}
}
}
return instance;
}
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Singleton s=Singleton.getInstance();
Singleton sUsual=Singleton.getInstance();
Constructor<Singleton> constructor=Singleton.class.getDeclaredConstructor();
constructor.setAccessible(true);
Singleton sReflection=constructor.newInstance();
System.out.println(s+"\n"+sUsual+"\n"+sReflection);
System.out.println("正常情况下,实例化两个实例是否相同:"+(s==sUsual));
System.out.println("通过反射攻击单例模式情况下,实例化两个实例是否相同:"+(s==sReflection));
}
//com.lxp.pattern.singleton.Singleton@1540e19d
//com.lxp.pattern.singleton.Singleton@1540e19d
//.lxp.pattern.singleton.Singleton@677327b6
//正常情况下,实例化两个实例是否相同:true
//通过反射攻击单例模式情况下,实例化两个实例是否相同:false
2.避免序列化问题(任何一个readObject方法,不管是显式的还是默认的,它都会返回一个新建的实例,这个新建的实例不同于该类初始化时创建的实例)
要获取当前操作系统的名称,在Java中可以使用System.getProperty()
方法来实现。
public class SystemInfo {
public static void main(String[] args) {
// 使用System.getProperty()方法获取操作系统相关信息
String os = System.getProperty("os.name");
System.out.println("Operating System: " + os);
}
}
运行以上代码,即可获取到当前操作系统的名称。
参考资料: - 获取当前操作系统的名称