接着上回说的InputStream(“标准”输入流)和PrintStream(“标准”输出流)之后,本期来说说“标准”的错误输出流和SecurityManager(安全管理器)。
“标准”错误输出流。此流已打开并准备接受输出数据。通常,此流对应于显示输出或主机环境或用户指定的另一个输出目的地。按照惯例,此输出流用于显示错误消息或其他应立即引起用户注意的信息,即使主要输出流(变量out的值)已被重定向到通常不受持续监控的文件或其他目标。
System.err.print("错误信息-不换行01");
System.err.print("错误信息-不换行02");
System.err.println("错误信息-换行01");
System.err.println("错误信息-换行02");
结果
思考一下:执行下面的代码和执行上面代码的差异。
System.err.println("错误信息-换行01");
System.err.println("错误信息-换行02");
System.err.print("错误信息-不换行01");
System.err.print("错误信息-不换行02");
对比PrintStream out的官方解释:“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示输出或主机环境或用户指定的另一个输出目的地。
除了基本的使用方式相似外,“标准”错误输出流的除了比“标准”输出流更能引起用户注意外,更具有实时性。因为目的是为了用户及时发现错误。与之相比 “标准”输出流优先级就不高,为了减少资源开支,会缓存在JVM和操作系统中,有时候会积攒到一定数量才会输出。可以运行下面代码,每次输出的结果可能不一样。
System.err.println("错误信息01");
System.err.println("错误信息02");
System.out.println("正常信息01");
System.out.println("正常信息02");
安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行可能不安全或敏感的操作之前,确定该操作是什么,以及是否在允许执行该操作的安全上下文中尝试该操作。应用程序可以允许或不允许该操作。
// 初始化
System.setSecurityManager(new SecurityManager());
SecurityManager sm = System.getSecurityManager();
// 校验
if (sm == null) {
System.out.println("Security manager couldn’t established");
return;
}else {
System.out.println("Security manager connection is established");
}
// 方便测试,直接获取本机的环境变量
Map<String,String> envs = System.getenv();
System.out.println("测试完成:"+envs.size());
正常结果
因为安全策略的限制,是不能直接获取的。有两种方式解决:
第一种修改安全策略文件,在打开jdk下面的java.policy。一般的路径是 jdk路径\jre\lib\security\
打开文件后添加下面语句后保存即可。
// 表示关闭所有安全策略
permission java.security.AllPermission;
再次执行,可以看到获取到了本机的65个环境变量。
第二种自定义安全策略(推荐)
import java.security.Permission;
public class MySecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm) {
// super.checkPermission(perm);
}
}
// 初始化 用自己定义的安全策略器
System.setSecurityManager(new MySecurityManager());
SecurityManager sm = System.getSecurityManager();
// 校验
if (sm == null) {
System.out.println("Security manager couldn’t established");
return;
}else {
System.out.println("Security manager connection is established");
}
// 获取环境变量
Map<String,String> envs = System.getenv();
System.out.println("测试完成:"+envs.size());
结果
以上就是本期内容,下期内容继续!
因篇幅问题不能全部显示,请点此查看更多更全内容
怀疑对方AI换脸可以让对方摁鼻子 真人摁下去鼻子会变形
女子野生动物园下车狼悄悄靠近 后车司机按喇叭提醒
睡前玩8分钟手机身体兴奋1小时 还可能让你“变丑”
惊蛰为啥吃梨?倒春寒来不来就看惊蛰
男子高速犯困开智能驾驶出事故 60万刚买的奔驰严重损毁