【问题标题】:How to Call a class within same package and same directory in java?如何在java中调用同一包和同一目录中的类?
【发布时间】:2017-06-13 12:39:22
【问题描述】:

基本上我有:

package duck.reg.pack;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public Test() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
        DBConnect DB = new DBConnect();
    }
}

在 Test.java 中调用的类:

package duck.reg.pack;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DBConnect {
    private Connection con;
    private Statement st;

    public DBConnect(){
        System.out.println("Hi there!");
        return;
    }
}

两个文件目录位置:

C:\classes\duck\reg\pack\Test.java  +  DBConnect.java

问题是当我用命令编译程序时:

C:\classes\duck\reg\pack>javac -cp "C:\Users\Unknown\JavaEEWorkspace\lib\*" Test.java

抛出此错误:

Test.java:16:错误:找不到符号 DBConnect 连接 = 新的 DBConnect();

我用谷歌搜索了一下,发现我可以在编译时从 Test 中删除 .java 扩展名,然后我就这样做了,但后来出现了这个错误:

错误:类名“Test”仅在明确请求注释处理时才被接受 1 个错误

非常感谢所有回复:)

【问题讨论】:

  • 你需要告诉编译器所有相关的文件。它没有找到 DBConnect.java 文件。

标签: java


【解决方案1】:

您需要从顶层包(位于文件系统树的根目录)运行编译器。所以cd到

cd C:\classes

然后运行

javac -cp "C:\Users\Unknown\JavaEEWorkspace\lib\*" duck\reg\pack\*.java

【讨论】:

  • 您不需要从顶层目录运行程序。这就是我们有类路径选项的原因。为什么不使用类路径和源路径显示正确的技术?
  • 而“top”包(你是说default包吗?)不是// 是一个目录,而不是一个包。
【解决方案2】:

我们需要使用 -cp(或 -classpath)选项来指定包 com.yyy 的基目录,以便定位 DBConnect。

javac -cp "d:\lib\*" d:\myJavaProject\pkg\*.java

【讨论】:

  • 只要 DBConnect.java 没有被编译,这将无济于事。更糟糕的是,如果 DBConnect.java 自上次编译后发生了更改,这可能会导致开发人员无法预料到的效果。
【解决方案3】:

写在顶部

import duck.reg.pack.DBConnect;

在您要导入的类中。

你为什么不使用 IntelliJ,它会为你做这件事?

【讨论】:

  • 同一个包中的类不需要导入。他没有将 BDConnect.java 文件指定给编译器。
猜你喜欢
  • 2014-03-07
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多