Почему мне не нужно импортировать класс, который я только что создал, чтобы использовать его в моем основном классе? (Джава) - PullRequest
26 голосов
/ 27 мая 2011

В настоящее время я изучаю Java, используя книгу Дейтеля «Как программировать», 8-е издание (ранняя версия объектов).

Я нахожусь в главе о создании классов и методов.действительно запутался в приведенном там примере, потому что он состоит из двух отдельных файлов .java, и когда один из них использует метод из другого, он не импортирует класс.Он просто создал объект этого класса из другого файла .java без предварительного его импорта.

Как это работает?Почему мне не нужно его импортировать?

Вот код из книги (я удалил большинство комментариев, чтобы сэкономить место / время при наборе ...): .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 и его методы, и как он узнает, существует ли он вообще, если мы не импортируем этот класс?

Я много гуглял, но не нашел ответа.Я новичок в программировании, поэтому, пожалуйста, терпите мой вопрос новичка.

Заранее спасибо.

Ответы [ 9 ]

31 голосов
/ 27 мая 2011

Это потому, что оба находятся в одном пакете (папке).Они автоматически импортируются, для этого не нужно писать оператор импорта.

6 голосов
/ 27 мая 2011

Вам не нужно импортировать классы, которые находятся в том же пакете, что и текущий класс.

Также обратите внимание, что GradeBook.java - это имя файла. Простое имя класса - GradeBook. Каждый класс должен быть в упаковке. Если он находится в пакете com.foo.bar, имя класса - com.foo.bar.GradeBook, и это имя необходимо использовать при импорте этого класса.

Прочитайте http://download.oracle.com/javase/tutorial/java/package/packages.html, чтобы узнать больше о пакетах.

2 голосов
/ 27 мая 2011

Java не использует, как и C. Вместо этого Java использует концепцию, называемую classpath, список ресурсов, содержащих классы Java. JVM может обращаться к любому классу на пути к классам по имени, так что если вы можете расширять классы и ссылаться на типы, просто объявив их.

От: Включить один файл Java в другой файл Java

2 голосов
/ 27 мая 2011

Это все о пакетах. Вы пытаетесь использовать класс из пакета по умолчанию, который не требует явного импорта java-файла, т.е. GradeBook внутри GradeBookTest

Здесь вы можете начать с изучения пакетов:

Учебное пособие по пакету Java

и:

Создание и использование пакетов

1 голос
/ 27 мая 2011

Импорт предназначен для импорта классов, которые находятся в другом пакете.Поскольку вы не объявили пакет ни для одного из них, они оба помещаются в пакет по умолчанию.Компилятор может найти его, потому что класс находится в одном каталоге.

1 голос
/ 27 мая 2011

Классы, находящиеся в одном пакете, не нужно импортировать, так как они видны друг другу. Вы просто import класс, который находится в другой упаковке:

import java.util.ArrayList;

Обратите внимание, что вы импортируете не файл, а класс.

0 голосов
/ 27 мая 2011

Они в одной упаковке.Этот учебник сделает больше справедливости, чем я.

0 голосов
/ 27 мая 2011

Ну, классы в одном пакете импортируются автоматически.

0 голосов
/ 27 мая 2011

Вам не нужно импортировать классы, которые находятся в одном пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...