首页编程java编程java里类加载路径指的什么?java运行中路径错误是怎么回事啊

java里类加载路径指的什么?java运行中路径错误是怎么回事啊

编程之家2023-10-11121次浏览

大家好,如果您还对java里类加载路径指的什么不太了解,没有关系,今天就由本站为大家分享java里类加载路径指的什么的知识,包括java运行中路径错误是怎么回事啊的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java里类加载路径指的什么?java运行中路径错误是怎么回事啊

java运行显示“找不到或无法加载主类”!

该如何解决呢?解决办法如下:

1.由于是在运行阶段出现的问题,那么可能是环境变量配置不当的问题,即可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:

.;%java_home%\lib;%java_home%\lib\tools.jar;(注意前面的.以及;缺一不可)

java里类加载路径指的什么?java运行中路径错误是怎么回事啊

其中.表示当前路径,;表示分隔符。

2.如果你试过了很多次,classpath也配置对了,依旧出现这个错误,注意你使用的测试代码,是否在某一个包名的下面;

比如说如下测试代码:

java里类加载路径指的什么?java运行中路径错误是怎么回事啊

在文件所在的当前目录下,运行javac TestPlusPlus.java编译成功,生成TestPlusPlus.class文件,这个时

候,你用javaTestPlusPlus想运行程序,总会出现”找不到或无法加载主类“的错误。这个时候要注意,

之所以找不到,是因为TestPlusPlus在HelloWorld包名的下面。

解决办法:

1.去掉”packageHelloWorld;“重新用javac编译TestPlusPlus.java,再运行javaTestPlusPlus就可以了。

2.新建一个包名一样的文件夹,在本例中,为建立一个HelloWorld的文件夹,把TestPlusPlus.java文件移到该目录下。

然后在HelloWorld文件夹的平级下,打开DOS命令窗口,运行javacHelloWorld/TestPlusPlus.java编译程序,

运行javaHelloWorld/TestPlusPlus(或者javaHelloWorld.TestPlusPlus也可以),则可以运行含有包名的java程序。

注意:包名不要含有'.'(点),''(空格)等特殊符号,这样的话命令行无法判断包名与java程序名的分割点在哪里,

从而还是找到或者无法加载主类。

原理说明:

java程序运行class文件,对于有包名的类,java把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。

java运行中路径错误是怎么回事啊

的.class文件不在当前目录下,这种情况下就需要在javac命令后面加上-classpath参数,通过使用以下三种类型的方法来指导编译器在编译的时候去指定的路径下查找引用类。(1).绝对路径:javac-classpath c:\junit3.8.1\junit.jar Xxx.java(2).相对路径:javac-classpath..\junit3.8.1\Junit.javr Xxx.java(3).系统变量:javac-classpath%CLASSPATH% Xxx.java(注意:%CLASSPATH%表示使用系统变量CLASSPATH的值进行查找,这里假设Junit.jar的路径就包含在CLASSPATH系统变量中) javac绝对路径的使用: javac:假设你要编译的类文件名叫:HelloWorld.java,其完全路径为:D:\java\HelloWorld.java。但你所在的当前目录是:C:\Documents and Settings\peng>。如果想在这里执行编译,会有什么结果呢?(1).C:\Documents and Settings\peng> javac HelloWorld.java这时编译器会给出如下的错误提示信息:error: cannot read: HelloWorld.java这是因为默认情况下javac是在当前目录下查找类文件,很明显这个路径不是我们存放类文件的地方,所以就会报错了(2).C:\Documents and Settings\peng>javac D:\java\HelloWorld.java这时编译成功。所以,只要你执行javac命令的目录不是类文件存放的目录,你就必须在javac命令中显式地指定类文件的路径。 java-classpath的使用: java:假设我们的CLASSPATH设置为:D:\peng\java\pro,在该目录下有三个文件:HelloWorld.java/ HelloWorldExtendsTestCase/ HelloWorldExtendsHelloWorld。这三个文件的类声明分别如下: HelloWorld.java:public class HelloWorld HelloWorldExtendsHelloWorld.java:public class HelloWorldExtendsHelloWorld extends HelloWorld HelloWorldExtendsTestCase.java:public class HelloWorldExtendsTestCase extends junit.framework.TestCase假设我们已经按照上面关于javac-classpath和javac绝对路径的使用,顺利地完成了三个文件地编译。现在我们在C:\Documents and Settings\peng>目录下执行这三个.class文件(1).C:\Documents and Settings\peng>java HelloWorld Hello World可以看到执行成功。为什么我们在 C:\Documents and Settings\peng>执行命令,JVM能够找到D:\peng\java\pro\HelloWorld.class文件呢?这是因为我们配置了系统变量CLASSPATH,并且指向了目录:D:\peng\java\pro。所以JVM会默认去该目录下加载类文件,而不需要指定.class文件的绝对路径了。(2).C:\Documents and Settings\peng>java HelloWorldExtendsHelloWorld Hello World可以看到执行成功了。HelloWorldExtendsHelloWorld继承了HelloWorld类,所以在执行时JVM会先查找在CLASSPATH下是否存在一个HelloWorld.class文件,因为我们已经成功编译了HelloWorld类了,所以可以成功执行HelloWorldExtendsHelloWorld.class(3).C:\Documents and Settings\peng>java HelloWorldExtendsTestCase Exception in thread"main" java.lang.NoClassDefFoundError: junit/framework/TestCase可以看到程序抛出异常了,提示找不到junit.framework.TestCase文件。为什么同样在D:\peng\java\pro下,HelloWorldExtendsHelloWorld.class就可以成功执行,而这个就不行了呢?这是因为:junit.framework.TestCase.class文件并不存在于当前目录下,所以为了能够让程序成功运行,我们必须通过指定CLASSPATH的方式,让JVM可以找到junit.framework.TestCase这个类,如(4):(4). C:\Documents and Settings\peng>java-classpath%CLASSPATH% HelloWorldExtendsTestCase Hello World总结:(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)

java中的包与类文件及原代码的位置关系

package taozhijiang.Test;

包应该是 package javasource;

在编译的时候

javac-d e:/javasource/javaclass Test.java

javac的命令语法是这样的:

javac<选项><源文件>

我们常用的情况是这样的:

javac-classpath<类路径><要编译的java源文件>

这里的类路径输入什么呢?这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在目录是:d:\mylib\com\util\MyDate.class,那么我们如何编译App这个类呢?我们的命令如下:

javac-classpath d:\mylib App.java

注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必须在com\util这个目录中,因为这个类定义了package为com.util。好了现在你对javac中的classpath明白了吗?

我们再来看java这个命令,这个命令的语法是这样的:

java [选项]类 [参数]

比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:\dev\myapp\com\app\App.class,那么我们该如何运行这个类呢?命令如下:

java-classpath d:\dev\myapp;d:\mylib com.app.App

从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候必须加上package。

好了,文章到此结束,希望可以帮助到大家。

java里ex.是什么意思(ty{}catch(Exception ex)什么意思)java技术栈是什么东西,java最常用的技术栈有哪些