从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解

从CMD窗口运行Java程序出现的程序包XXX不存在、找不到或无法加载主类XXX问题详解

Java源文件所在目录

文件一:E:\com\test\Test.java

package com.test;

import com.packageaccess.*;

public class Test {
    public static void main(String[] args) {
		PackageAccess PA = new PackageAccess();
    }
}

文件二:E:\com\packageaccess

package com.packageaccess;

public class PackageAccess {
		public PackageAccess(){
			System.out.println("This is com.packageaccess.PackageAccess Class!");
		}
}

在这里插入图片描述

问题一:程序包XXX不存在

在test目录下通过cmd命令窗口编译Test.java文件复现该问题,如图:
在这里插入图片描述
解决办法:在com目录的父目录中通过cmd窗口执行javac com\test\Test.java,如图:
在这里插入图片描述

问题二:找不到或无法加载主类XXX

在test目录下通过cmd命令窗口编译Test.java文件复现该问题,如图:
在这里插入图片描述
解决办法:在com目录的父目录中通过cmd窗口执行java com.test.Test,如图:
在这里插入图片描述

问题分析

Java中完整的类名应该是包名+类名,本文中的两个Java源程序的包的公共路径都为com,当我们在test目录下编译Test.java文件时,虚拟机会认为我们Test.java文件的位置为:test\com\test\Test.java,然后以此去查找com.packageaccess包,当然查找失败!

同理,当我们在test目录下通过java命令运行Test时,虚拟机默认在test\com\test下去查找Test.class文件,当然查找不到!

此问题的原因可归结到环境变量CPASSPATH的设置上,在CLASSPATH中,“.”表示当前目录。
在这里插入图片描述
Java解释器的运行过程:首先,找出环境变量CLASSPATH(可以通过操作系统来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径(例如,package com.test就变成为com\test或com/test或其他,这将取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的根目录路径相连接以获得一个完整的目录路径,解释器就在这些目录中查找与你所需要的类名称相同的.class文件(此外,解释器还会去查找某些涉及Java解释器所在位置的标准目录)。所以在这里Java寻找的就是CLASSPATH+package名。

参考链接:
https://blog.csdn.net/ncc1995/article/details/84932759
https://blog.csdn.net/weixin_45655555/article/details/106469076

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值