2016-12-22 34 views

回答

0

的类是在默认包。根据this answer,不可能从默认包中导入类。所以,他们必须被移动到另一个包,或者你必须使用反射。

+0

你是否指我的项目下的文件和包src不能直接使用,除非经过反射? –

+0

我不是指'src'目录,而是其中代表Java包的目录,也是在'java'文件的顶部声明的。必须有一个班级属于这样的包裹。如果不是,默认包将被隐式使用。 src'目录包含源代码。它不存在于源代码构建的jar文件中。 – mm759

0

您可以从类中调用方法,而不是从包中调用方法。
当您从属于它的类调用方法时,不需要指定jar。重要的是你的jar文件在类路径中
如果lib是类路径文件夹的一部分,那么在你的屏幕截图中,你可以在你的代码中导入并使用它。

在这里,你的jar的类使用默认的包(没有包名),这对第三方库来说似乎很奇怪。不建议使用默认包,因为它不允许从客户端代码自然引用和使用归档类。
我不确定你使用的jar版本是否正确。
看那个:

http://grepcode.com/snapshot/repo1.maven.org/maven2/com.googlecode.princeton-java-introduction/stdlib/1.0.1

这包含在edu.princeton.cs包中的类:

随着包,你可以声明如下:

例如:

你可以创建一个类像那样并使用BinaryIn那样的:

package main; 
import edu.princeton.cs.BinaryIn; 

public class MyClass(){ 
    public static void main(String args[]){ 
    BinaryIn in = new BinaryIn(); 
    } 
} 
+0

谢谢。我猜想当我在默认包中使用类时,我不需要导入默认包。因为在我的IDE中没有错误(intellij ideal14),它表示它是一个正确的声明,但是我失败了运行它。并感谢你的正确代码,但我仍然想知道它在我的编程中如何工作(下一次我将改变...) –

+0

当你运行rhe类时,这正是你的错误,你能发布课程? – davidxxx

+0

StdIn.class.getPackage()。getName();和控制台:线程“main”中的异常java.lang.NullPointerException.I可以理解StdIn可以找到,但它是有线的,我可以按Ctrl并点击“Stdln”来获取它的源代码。 –