Java系统属性和环境变量

1 什么是环境变量

       境变量分为系统环境变量和用户环境变量。
  所说的环境变量是指系统环境变量,对所有用户起作用,而用户环境变量只对当前用户起作用。

  例如要用java,那么把java的bin目录加入到path变量下面,那么它就是系统环境变量,所用用户登陆,在命令行输入java都会有java的帮助信息出来。而如果在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当以其他用户登陆时这个变量就和不存在一样。

  这个问题在linux下面就相对好理解一些,系统变量都在/etc/profile文件里面,而用户的变量则在~/.bash_profile(如果用的是bash的话),每个用户的用户目录对其他用户不可见。假设有a,b,c三个用户,在a的变量文件中写入语句在屏幕上述出a,在b的输出b,c的什么都不输出,系统文件输出sys,那么当用a用户登陆时,输出a;用户b登陆输出b,用户c则输出sys.

  在windows下面用到少设置环境变量的时候很少,例如想只用jdk而不想用jbuilder,那么就得自己设置jdk的path,classpath等环境变量。

     环境变量设置命令 

     win7/win10:

    1.set命令

     set用于设置临时环境变量。只在当前命令行窗口中有效。

    1.1 cmd终端

​
1.查看所有环境变量:set

2.设置环境变量:set MyEnvTest=D:\res

3.set查看某个或某类环境变量:set MyEnvTest
  
 输出结果:MyEnvTest=D:\res

4.echo查看某个环境变量:echo %MyEnvTest%
  
 输出结果:D:\res

5.修改环境变量值:set MyEnvTest=%MyEnvTest%;D:\apk

6.删除某个环境变量:set MyEnvTest=

​

1.2 gitbash终端

# 设置 CLASSPATH
$ export CLASSPATH="/d/program/JavaTrainning/src"
# 查看 CLASSPATH
$ echo $CLASSPATH
# 输出
$ /d/program/JavaTrainning/sr

 2 setx

用于设置用户环境变量和系统环境变量。默认设置是本地环境,通过选项 /m 设置系统环境变量。

# 永久设置 GIT_HOME 变量为 abc
$ setx /m GIT_HOME abc

# 将 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 追加到 PATH 变量
$ setx -m PATH "%PATH%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin"

可以通过高级系统设置——>环境变量,设置系统或用户级别的环境变量。

 

 linux下设置和查看环境变量

Linux的变量种类

按变量的生存周期来划分,Linux变量可分为两类: 
1 永久的:需要修改配置文件,变量永久生效。 
2 临时的:使用export命令声明即可,变量在关闭shell时失效。

设置变量的三种方法

1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】 
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 
例如:编辑/etc/profile文件,添加CLASSPATH变量 
# vi /etc/profile 
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】 
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。 
例如:编辑guok用户目录(/home/guok)下的.bash_profile 
vi/home/guok/.bash.profile添加如下内容:exportCLASSPATH=./JAVAHOME/lib;vi/home/guok/.bash.profile添加如下内容:exportCLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib 
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,

该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,

shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

环境变量的查看

1 使用echo命令查看单个环境变量。例如: 
echo $PATH 
2 使用env查看所有环境变量。例如: 
env 
3 使用set查看所有本地定义的环境变量。

使用unset删除指定的环境变量

set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下: 
export TEST="Test..." #增加一个环境变量TESTexport TEST="Test..." #增加一个环境变量TEST env|grep TEST #此命令有输入,证明环境变量TEST已经存在了 
TEST=Test... 
unset  TEST #删除环境变量TEST 
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经删除

常用的环境变量

PATH 决定了shell将到哪些目录中寻找命令或程序 
HOME 当前用户主目录 
HISTSIZE 历史记录数 
LOGNAME 当前用户的登录名 
HOSTNAME 指主机的名称 
SHELL 当前用户Shell类型 
LANGUGE  语言相关的环境变量,多语言可以修改此环境变量 
MAIL 当前用户的邮件存放目录 
PS1 基本提示符,对于root用户是#,对于普通用户是$

 

2 什么是java的系统属性

      在java应用程序运行时,特别是需要在跨平台工作环境中运行时,需要确定操作系统的类型、用户JDK版本、用户工作目录等随工作平台变化的信息,以确保程序正确运行。这些程序的运行环境信息为java平台的自身配置,被称为java的系统属性。系统属性与操作系统的环境变量类似,可以认为是JVM虚拟机的环境变量。(其实JVM本身就相当于一个计算机,自然它本身也需要一些自己的环境变量 ,JVM中称为系统属性)
     系统属性与环境变量都是名称与值之间的映射。两种机制都可以将用户定义的信息传递给java进程。全局变量产生的更多的是全局效应,他们不仅对java子进程可见,而且对于定义它们的所有子进程都是可见的。程序中尽可能使用系统属性,而环境变量应该在全局范围需要时才使用。

如何查看java的系统属性

方法一、jvisualvm工具

%JAVA_HOEM%/bin/jvisulavm,打开java visualVM软件,本地---Visual VM ---概述---系统属性

方法二、System.getProperty,System.getProperties方法获取

System.getProperties() : 获取所有系统属性
System.getProperty(String name) :获取指定的系统属性
System.getProperty(String name, String def) :获取指定的系统属性,如果不存在该属性,则返回默认值def。
此外,System模块提供了获取环境变量的方法:
System.getenv() : 获取所有的环境变量
System.getenv(String name) : 获取指定名称的环境变量值

System方法查看系统属性和环境变量示例

System.out.println(System.getProperty("sun.arch.data.model"));//获取java运行时的数据位数

执行结果:(依赖程序运行的环境)
 64

System.getProperties().list(System.out);// 获取所有的系统属性

执行结果这里不展示。

System.out.println(System.getenv("OS"));//获取操作系统类型

执行结果:(依赖程序运行的环境)
 Windows_NT

设置系统属性

System类中提供设置系统属性的方法setProperty,使用方法如下:

System.setProperty("NU_HOME","E:\\nucleon";
System.out.println(System.getProperty("NU_HOME"));

执行结果:
  E:\nucleon

常见的系统变量

含义
OS 操作系统类型
COMPUTERNAME 计算机名
Windir 系统安装目录
SystemRoot 系统启动目录
USERNAME 用户名
USERPROFILE 用户目录
USERDOMAIN 用户域的名称
PATHEXT 可执行文件后缀
TEMP 用户临时文件目录
TEMP 用户临时文件目录
TMP 临时目录
PATH path环境变量
...... ......

常见的系统属性

含义
java.runtime.name java运行时名称
sun.boot.library.path jre的bin路径
java.vm.version java虚拟机版本
java.vm.vendor java虚拟机供应商
java.vendor.url java供应商网址
java.vm.name java虚拟机名称
user.country 国家编码
user.home 当前程序根目录
user.timezone 计算机当前所在时区
user.name 当前计算机用户名称
file.separator 文件路径分隔符
file.encoding 文件编码
...... .......

你可能感兴趣的:(Java)