03-JavaHome&临时环境变量&classpath环境变量

1.配置java_home、临时环境变量信息

PATH环境信息:

D:;

D:\JDK\JDK\bin;

D:\eclipse4.3\adt-bundle-windows-x86-20131030\adt-bundle-windows-x86-20131030\sdk\platform-tools;

C:\Program Files\Intel\iCLS Client;

%SystemRoot%\system32;

%SystemRoot%;

%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\OpenCL SDK\2.0\bin\x86;D:\mysql\bin;C:\Program Files\TortoiseSVN\bin;D:\firfox\quicktime\QTSystem\

目前path环境变量除了保存了我们自己配置的信息以外,还有系统自带的信息,如果一旦不不小心删除了path环境变量信息,那么就可能导致系统部分功能无法使用。

尽量避免修改的path环境变量信息。

如果我们需要频繁的更换jdk的版本,那么就需要频繁的去修改path环境变量内容了,就容易出错。

那么为了尽量避免频繁修改path环境变量,如何做?

解决办法:新建一个环境变量保存jdk安装目录会发生变化的部分,然后在path环境变量上引用新环境变量所保存的信息。

即使用java_home,当然这个环境变量不叫java_home也行,但是一般都起名为java_home。

img

img

当jdk版本有变动的时候,去修改JAVA_HOME的值即可了。path环境变量就不用动了。

有的时候,某个jdk版本只用一次,那么可以使用临时配置环境变量即可。

需求: 在现实开发中有时候jdk版本的信息有时候只会使用一次或者几次就不再使用了,那么如果是这种需求,我们一般都是通过set命令配置临时环境变量。

临时环境变量就是仅对于当前控制台窗口起作用,窗口一旦关闭,那么配置的临时环境变量信息会发生消失。

set命令的用法:

​ set 查看所有的环境变量信息。

​ set 环境变量的名字 查看指定的环境变量信息。

​ set 环境变量名字 = 路径信息 设置指定的环境变量信息。

​ set 环境变量名字 = 清空指定的环境变量信息。

set 环境变量名字 = 新路径;%环境变量名字% 在原有的基础上添加新的路径信息。

注意: 以后大家但凡看到是set命令设置的环境变量信息,都是临时环境变量信息。

helloworld的小细节

\1. 缺少main方法

出现提示:缺少一个名称为main的方法。

img

\2. 源文件中的大小写要注意。初学者请牢记,第一个hello例子中只有 String和System中两个字符是大写的,其他的都小写。

\3. 配置path和classpath时,里面的路径是所有查找的目标的父目录, 而不是目标自己。

\4. A.java.txt

​ 文本文件默认是txt结尾的,注意要把隐藏已知文件类型扩展名去掉。

img

\5. 大小写

只有类名Demo,String和System中三个个首字母是大写的。

public class Demo{ public static void main(String[] args) { System.out.println("hello java"); } }

\6. path

看path环境变量配置 ,里面的路径是所有查找的目标的父目录,而不是目标自己。

img

7. 写错类名, 源文件名不存在或者写错,或者当前路径错误。

类文件名写错,或者类文件不在当前路径下,或者不在classpath指定 路径下。

img

java命令加载的是类,而不是class文件的。因此,如果人为的将class文件的文件名改成别的,那么java命令加载的时候,仍然需要写里面的类名,而不应该写class文件的文件名。

\8. javac 生成的.class 文件的名称取决于类名,跟.java名没有关系。

javac编译源文件,生成的class文件的文件名默认就是类名。

第一个hello world例子常见 的问题:

​ \1. 找不到对应的文件

​ 原因:

​ 1 隐藏了后缀名,你的不是java文件是txt文件。

​ 2.编译 的时候写错了文件名。

​ \2. 找不到或无法加载主类 Demo1

​ 原因: 运行的时候写错了类名. 注意: class文件的文件名是对应的类名的。不是对应的java文件名的。

​ \3. java的代码是严格区分大小写的。

​ \4. 'javac' 不是内部或外部命令

​ 原因: 没有配置path环境变量信息,或者是配置错误了。

2.classpath环境变量信息

JVM查找类文件的顺序:

如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件。

如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件。

值的结尾处如果加上分号,那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下在查找一次。

值的结尾出如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行。

建议:配置classpath环境变量时,值的结尾处不要加分号,如果需要访问当前目录可以用 “.”表示。

classpath 环境变量:

​ 设置了classpath环境变量的时候,启动jvm(java虚拟机)的时候,那么java虚拟机就会 根据classpath环境变量所保存路径信息下去寻找对应的class文件。

​ 设置classpath环境变量信息的有分号与没有分号的区别:

​ \1. 如果配置classpath环境变量信息没有加上分号,那么java虚拟机仅会在classpath所保存的路径下去搜索对应的class文件,不会在当前路径下去搜索了。

​ \2. 如果配置classpath环境变量信息加上分号,那么java虚拟机除了会在classpath所保存的路径下去搜索对应 的class文件之外,如果能找到对应的class文件那么就马上指定对应的class文件,否则还会去 当前路径下去搜索。

注意,分号;,就相当于是当前目录,就是那个点.。

img

img

现在E盘和F盘都有同名的Demo1.java文件,并且类名也相同,都是Demo1。

img

当前F盘编译了Demo1.java,有对应的class文件。

此时由于设置了classpath,因此,首先会在classpath设置的目录去搜索Demo1的class文件的。

img

如果将F盘的class文件删除了。

那么在classpath里面指定的f盘里找不到class文件,就在当前目录E盘下找。

img

img

分号放前面了。分号,就相当于是当前路径。

img

注意,不建议将classpath配置成永久环境变量的。

以前的书籍,都让配置classpath问永久环境变量。

jdk5官方也不建议配置classpath为永久环境变量了。

img

如果这里配置了,然后最后又没有加上分号。

然后自己可能忘记了。

img

在F盘执行,想要执行的是F盘的Demo1的,结果却执行了E盘的,原因就是上面配置了classpath导致的。因此,就会产生误解。

img

将E盘的class文件删了。

img

这就是由于配置了classpath=E:\的原因。

因此,不推荐配置classpath为永久环境变量的。

img

在jdk5.0之前,是必须要配置classpath的。原因是当时的jvm没有那么智能。

jre=jvm+核心类库。也就是jvm的运行要依赖核心类库的。

jdk5.0之前,安装完的jdk之后,jvm不知道核心类库的位置。

img

核心类库在这个目录下的。

因此,jdk5.0之前的jvm需要这些核心类库支持才能运行,但是又不能够智能的找到它们,因此,就强制要求必须要配置classpath环境变量,指向到这些核心类库的jar包。

img

即要求要这样来配置。

而在jdk5.0之后的jvm比较智能了,能够自动的找到这些核心类库的jar包了,因此,不需要配置classpath指向到这些核心类库的jar包了。

注意,配置classpath的作用,它对jvm有作用,同时它对编译的时候,也会产生作用的,因为编译的时候,遇到import导包的时候,就需要参考classpath指定的路径去找对应的包下的类的class文件。

classpath环境变量

\1. classpath的作用: 作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,一旦配置了classpath路径信息的时候,jvm(java运行命令)与java编译器都会根据classpath指定的路径去寻找class文件。

\2. 如何设置当前目录(.)

set classpath=.;设置路径 与 set classpath=设置路径;.有什么区别?

“.”在前面的时候,java虚拟机会先从当前路径去寻找class文件,然后再到指定的路径去需找。如果”.”在后面,java虚拟机则会先寻找指定好的路径,然后再在当前的路径去寻找。

设置classpath的时候要加上 ; 就会在当前目录下查找。因为分号就相当于是当前路径。

\1. 简述对JVM,JRE,JDK的理解。

JVM: JAVA虚拟机

Jre: java运行环境 jre = java虚拟机+ 核心类库

Jdk : java开发工具集。 Jdk = jre + java开发工具。

\2. 简述环境变量path和java_home \ classpath的作用?

Path: 为了让控制台在任意路径下都可以找到java的开发工具。

Java_home : 避免频繁修改path 环境变量信息。

Classpath : 设置class文件所在的路径信息。

\3. 独立编写hello world程序,编译并运行。

\4. java语言是否区分大小写? class的作用,javac,java的作用?

是, class的作用定义一个该类 的关键字,

java : 启动java虚拟机解释并执行对应的class文件。

javac: 启动java编译器对指定的java源文件进行编译

\5. 简述main方法(是什么,什么特点,怎么用,何时用?)

​ 程序的主入口,代码是从住方法上开始执行的。

​ 写法是固定的。

​ 定义一个类中使用。

​ 如果一个类需要独立运行的时候,就需要main方法。


posted @ 2022-12-09 20:06  Leo101018  阅读(503)  评论(0编辑  收藏  举报
返回顶部