新兵上阵
- 注册时间
- 2022-9-23
- 金币
- 11 个
- 威望
- 0 个
- 荣誉
- 0 个
尚未签到
|
本帖最后由 JJF838 于 2022-9-25 01:31 编辑
在命令行模式下进入F:\test目录,然后运行编译命令javacF:\test\edu\main\A.java,可以成功编译生成A.class文件。(注意:如果不在此目录下执行编译命令的话,就要将f:\test加入到当前的classpath中为make工具提供B.java的位置信息)接下来就要运行这个class文件了,运行仍然在F:\test目录下执行(注意:如果不在此目录下执行运行命令的话,一定要把F:\test加入到当前的classpath中),命令为:javaedu.main.A,很显然,这里就是根据输入的package名称找到对应的class文件,并检验找到的class文件的与输入的包名是否匹配(例如:如果你在edu目录下新建一个test目录,将A.class文件拷贝进去,输入javaedu.test.A的话还是会报错:找不到class文件)。可能有人要问:为什么运行的时候又可以根据包名找到相应的class文件呢?因为运行的时候默认是从当前路径开始搜索的,如果当前路径找不到的话,就在系统的classpath中找,如果再找不到就会报错。由上面的分析我们可以得出:(1)在命令行模式下编译java文件时,如果cmd不在该java文件所在的目录下,就要直接指定文件的绝对路径(javacF:\test\edu\main\A.java),如果在java文件所在的目录下,可以不指定路径,但是要设置classpath让编译器的make工具找到其他import的类(2)运行的时候要指出包路径(javaedu.main.A),并且一定要在class文件名前带上完整的包名(edu.main.A),而且该包所在的文件夹(即edu所在的文件夹)一定要在classpath中,这样才能找到对应的class文件(在包所在的文件夹目录下运行cmd程序或者将该目录加入到classpath中均可)。(3)在命令行模式下非直接编译的java,编译器使用make工具根据java文件中的import信息间接找到引用的java文件,所以一定要注意文件的配置,以及相互之间的位置关系。当然也可以通过设置classpath提供给make工具,但是如果文件比较多而且相互之间的引用关系比较复杂的话会比较麻烦。(4)classpath只能供make工具以及运行class文件时使用,在直接编译的时候不使用classpath信息,必须在要编译的java文件前带上其绝对的路径名。
|
|