境变量分为系统环境变量和用户环境变量。
所说的环境变量是指系统环境变量,对所有用户起作用,而用户环境变量只对当前用户起作用。
例如要用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等环境变量。
环境变量设置命令
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变量可分为两类:
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用户是#,对于普通用户是$
在java应用程序运行时,特别是需要在跨平台工作环境中运行时,需要确定操作系统的类型、用户JDK版本、用户工作目录等随工作平台变化的信息,以确保程序正确运行。这些程序的运行环境信息为java平台的自身配置,被称为java的系统属性。系统属性与操作系统的环境变量类似,可以认为是JVM虚拟机的环境变量。(其实JVM本身就相当于一个计算机,自然它本身也需要一些自己的环境变量 ,JVM中称为系统属性)
系统属性与环境变量都是名称与值之间的映射。两种机制都可以将用户定义的信息传递给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.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 | 文件编码 |
...... | ....... |