You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java跨文件导入类时报package does not exist包不存在错误

报错核心原因
  1. import语句语法完全错误
    import关键字后必须跟随包名.类名的全限定类名格式,你写的import firstclass.dep;把类firstclass当成了包名、把类中的成员方法dep()当成了要导入的类,编译器自然会去查找名为firstclass的包,找不到就直接抛出包不存在的错误。
  2. 包声明不匹配,默认包类无法被引用
    你的Main类声明在firstclass.dep命名包下,但firstclass类没有写任何package声明,属于默认无名包下的类。Java有硬性规则:默认包下的类无法被任何命名包下的代码导入、引用。
  3. 访问权限不符合要求
    你定义的firstclass类没有加public修饰符,就算包路径配置正确,跨包场景下非public类也无法被访问。
  4. 未遵循Java包路径与磁盘目录绑定的规则
    Java要求声明了package xxx.yyy;的类,必须存放在磁盘路径xxx/yyy/目录下,否则编译器和JVM都无法按路径找到对应的类文件。
Java跨文件/跨包引用类的正确实现

先明确几个基础规则:

  • 所有正式代码不要使用默认无名包,所有类都要声明归属到明确的命名包下
  • 类名必须遵循大驼峰命名规范(首字母大写),不要用小写开头的类名,避免和包名、变量名混淆
  • 被跨包引用的类必须声明为public
  • import语句仅支持两种格式:导入单个类import 包名.类名;、导入指定包下所有类import 包名.*;,不支持导入方法、变量级别内容

可运行的实现示例

1. 搭建匹配包结构的目录

Java的包结构必须和磁盘目录一一对应,项目结构如下:

项目根目录
└── firstclass
    └── dep
        ├── Main.java
        └── FirstClass.java

2. 编写被引用类代码

给FirstClass(原firstclass,修正类名命名规范)加上对应包声明和public修饰:

// FirstClass.java 路径:firstclass/dep/FirstClass.java
package firstclass.dep;

public class FirstClass {
    public void dep(){
        System.out.println("Hi");
    }
}

3. 编写主类代码

同包下的类不需要额外写import语句,直接实例化使用即可:

// Main.java 路径:firstclass/dep/Main.java
package firstclass.dep;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        final FirstClass abc = new FirstClass();
        abc.dep();
    }
}

4. 编译运行

在项目根目录下执行编译命令:

javac firstclass/dep/*.java

编译完成后执行主类(用全限定类名启动):

java firstclass.dep.Main

就能正常输出:

Hello world!
Hi

如果需要把类放在不同包下,只需要给被引用类配置对应包路径、加上public修饰,在主类顶部用正确的全限定类名写import语句即可,比如import firstclass.common.FirstClass;。


内容的提问来源于stack exchange,提问作者Shivi Singla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 03:54:33