如上图所示(上图是通过Run Configurations打开的,实际也可以通过Debug Configurations打开Debug的配置界面)
Arguments下面有两个代码编辑区,Program arguments和VMarguments。这是干什么用的呢?让我们用一个例子来说明。
Program arguments中写:pro1pro2 pro3
VMarguments中写:-DsysProp1=sp1 -DsysProp2=sp2(注意加前面的-D)
然后写一个java文件
代码如下:
运行结果:
实际上program arguments中的值作为args[]的参数传入的,它通过主函数中的args来取值。
而VMArguments是设置的虚拟机的属性,要传给java虚拟机的。调用方法:System.getProperty("PropertyName")。它与下面这条语句有相同的功能:
java -DsysProp1=sp1 -DsysProp2=sp2 test.ArgsTest pro1 pro2pro3
System.getProperty("PropertyName"):根据参数返回一些系统信息。具体默认系统参数如下(当然我们可以再Run Configuration或者Debug Configuration中自定义getProperty中的key(即虚拟机参数key),通过 “-D” + PropertyName,譬如: -DprepertyName="hello world")
java.version | Java运行时环境版本 |
java.vendor | Java运行时环境供应商 |
java.vendor.url | Java供应商的 URL |
java.home | Java安装目录 |
java.vm.specification.version | Java虚拟机规范版本 |
java.vm.specification.vendor | Java虚拟机规范供应商 |
java.vm.specification.name | Java虚拟机规范名称 |
java.vm.version | Java虚拟机实现版本 |
java.vm.vendor | Java虚拟机实现供应商 |
java.vm.name | Java虚拟机实现名称 |
java.specification.version | Java运行时环境规范版本 |
java.specification.vendor | Java运行时环境规范供应商 |
java.specification.name | Java运行时环境规范名称 |
java.class.version | Java类格式版本号 |
java.class.path | Java类路径 |
java.library.path | 加载库时搜索的路径列表 |
java.io.tmpdir | 默认的临时文件路径 |
java.compiler | 要使用的 JIT 编译器的名称 |
java.ext.dirs | 一个或多个扩展目录的路径 |
os.name | 操作系统的名称 |
os.arch | 操作系统的架构 |
os.version | 操作系统的版本 |
file.separator | 文件分隔符(在 UNIX 系统中是“/”) |
path.separator | 路径分隔符(在 UNIX 系统中是“:”) |
line.separator | 行分隔符(在 UNIX 系统中是“/n”) |
user.name | 用户的账户名称 |
user.home | 用户的主目录 |
user.dir | 用户的当前工作目录 |
具体实例如下:
- public class SystemProperty {
- public static void main(String args[]) {
- System.out.println("java_vendor:" + System.getProperty("java.vendor"));
- System.out.println("java_vendor_url:"
- + System.getProperty("java.vendor.url"));
- System.out.println("java_home:" + System.getProperty("java.home"));
- System.out.println("java_class_version:"
- + System.getProperty("java.class.version"));
- System.out.println("java_class_path:"
- + System.getProperty("java.class.path"));
- System.out.println("os_name:" + System.getProperty("os.name"));
- System.out.println("os_arch:" + System.getProperty("os.arch"));
- System.out.println("os_version:" + System.getProperty("os.version"));
- System.out.println("user_name:" + System.getProperty("user.name"));
- System.out.println("user_home:" + System.getProperty("user.home"));
- System.out.println("user_dir:" + System.getProperty("user.dir"));
- System.out.println("java_vm_specification_version:"
- + System.getProperty("java.vm.specification.version"));
- System.out.println("java_vm_specification_vendor:"
- + System.getProperty("java.vm.specification.vendor"));
- System.out.println("java_vm_specification_name:"
- + System.getProperty("java.vm.specification.name"));
- System.out.println("java_vm_version:"
- + System.getProperty("java.vm.version"));
- System.out.println("java_vm_vendor:"
- + System.getProperty("java.vm.vendor"));
- System.out
- .println("java_vm_name:" + System.getProperty("java.vm.name"));
- System.out.println("java_ext_dirs:"
- + System.getProperty("java.ext.dirs"));
- System.out.println("file_separator:"
- + System.getProperty("file.separator"));
- System.out.println("path_separator:"
- + System.getProperty("path.separator"));
- System.out.println("line_separator:"
- + System.getProperty("line.separator"));
- }
其实还有种简单方法输出所有系统参数:
System.getProperties().list(System.out);
还有一个细节今天调代码时发现的,关于Boolean.getBoolean(name)方法,直接贴源码吧,很清晰:
- public static boolean getBoolean(String name) {
- boolean result = false;
- try {
- result = toBoolean(System.getProperty(name));
- } catch (IllegalArgumentException e) {
- } catch (NullPointerException e) {
- }
- return result;
- }