为啥我不必导入我刚刚制作的类以在我的主类中使用它? (爪哇)

Posted

技术标签:

【中文标题】为啥我不必导入我刚刚制作的类以在我的主类中使用它? (爪哇)【英文标题】:Why don't I have to import a class I just made to use it in my main class? (Java)为什么我不必导入我刚刚制作的类以在我的主类中使用它? (爪哇) 【发布时间】:2011-09-03 09:24:42 【问题描述】:

我目前正在使用 Deitel 的 Java How to Program 第 8 版(早期对象版本)一书学习 Java。

我正在讨论创建类和方法的章节。

但是,我对那里提供的示例感到非常困惑,因为它由两个单独的 .java 文件组成,当其中一个使用另一个方法时,它没有导入类。它只是从另一个 .java 文件创建了该类的一个对象,而没有先导入它。

它是如何工作的?为什么我不需要导入它?

这是书中的代码(我删除了大多数 cmets,以节省打字空间/时间......): .java 类:

//GradeBook.java

public class GradeBook

    public void displayMessage()
    
        System.out.printf( "Welcome to the grade book!" );
    

主 .java 文件:

//GradeBookTest.java

public class GradeBookTest

    public static void main( String[] args)
    
        GradeBook myGradeBook = new GradeBook();
        myGradeBook.displayMessage(); 
    

我想我必须写

import GradeBook.java;

或类似的东西。 编译器如何知道 GradeBook 类及其方法在哪里找到?如果我们不导入该类,它又如何知道它是否存在?

我做了很多谷歌搜索,但没有找到答案。 我是编程新手,所以请容忍我的新手问题。

提前谢谢你。

【问题讨论】:

【参考方案1】:

您不必导入与当前类在同一个包中的类。

另外,请注意 GradeBook.java 是文件的名称。类的(简单)名称是 GradeBook。每个类都应该在一个包中。如果在com.foo.bar包中,类名是com.foo.bar.GradeBook,这个是你在导入这个类时必须使用的名字。

阅读http://download.oracle.com/javase/tutorial/java/package/packages.html 以了解有关软件包的更多信息。

【讨论】:

【参考方案2】:

这是因为两者都在同一个包(文件夹)中。它们会自动导入,无需为此编写导入语句。

【讨论】:

【参考方案3】:

不必导入位于同一包中的类,因为它们彼此可见。你只需 import 一个在另一个包中的类:

import java.util.ArrayList;

请注意,您导入的不是文件,而是类。

【讨论】:

【参考方案4】:

您不必导入同一个包中的类。

【讨论】:

【参考方案5】:

这都是关于包的。您正在尝试使用不需要显式导入 java 文件的默认包中的类,即 GradeBookTest 中的 GradeBook

您可以从这里开始学习包:

Java Package Tutorial

和:

Creating and Using Packages

【讨论】:

【参考方案6】:

嗯,同一个包中的类是自动导入的。

【讨论】:

【参考方案7】:

Imports 用于导入不同包中的类。由于您没有为任何一个声明包,因此它们都放在默认包中。编译器可以找到它,因为该类位于同一目录中。

【讨论】:

【参考方案8】:

它们在同一个包中。这个tutorial 会比我更公正。

【讨论】:

【参考方案9】:

Java 不像 C 那样使用包含。相反,java 使用了一个名为 classpath 的概念,一个包含 java 类的资源列表。 JVM 可以通过名称访问类路径上的任何类,因此如果您可以扩展类并通过声明它们来引用类型。

发件人:Include one java file in another java file

【讨论】:

以上是关于为啥我不必导入我刚刚制作的类以在我的主类中使用它? (爪哇)的主要内容,如果未能解决你的问题,请参考以下文章

使用“实例”?不止一次

如何获取导入的类以更改 main.py 标签样式表的属性 [关闭]

为啥我不能在另一个类中调用公共方法?

C#将类导入另一个类不起作用

为啥我不能在我的类中内联函数? [复制]

正确导出 node.js 中的类以在其他所需文件中扩展它们[重复]