Оператор import
в Java и директива #include
в C++ выглядят обманчиво похожими, но на самом деле очень разные. Оператор import
фактически не вызывает чтение файла Java (что выполняется как с помощью компиляции, так и с помощью пути к классам, то есть параметров, заданных для компилятора Java в командной строке); скорее, оператор import
- это просто синтаксический сахар, используемый для того, чтобы избежать использования полнофункциональных имен во всем коде (в противном случае для любого класса, не входящего в текущий пакет, требуется полное имя). В отличие от этого, #include
не только загружает файл, но делает это слепой подстановкой, независимо от того, был ли этот файл уже включен или нет (что является причиной того, что заголовки обычно включают #ifndef ... #endif
, включают защитные устройства, чтобы предотвратить содержимое заголовка из обрабатывается многократно, несмотря на то, что его содержимое многократно наклеивается).
Обозначение обратного URL, используемое в пакетах Java, - это соглашение, используемое для избежания столкновений между библиотеками разных авторов. Мысль здесь состоит в том, что для предотвращения коллизий имен между поставщиками/авторами вам потребуется некоторая централизованная регистрация; используя существующую систему регистрации доменных имен, позволяет Java разгрузить это предотвращение столкновения существующей системе, а не изобретать колесо. Однако это чисто конвенция.Не обязательно, чтобы пакет коррелировал с доменом; например, система впрыска зависимостей кинжалов использует package dagger
, а не package io.github.google.dagger
(хотя последнее - это имя пакета, которое будет использоваться, если следовать стандартным соглашениям об использовании обратного домена).
Обратите внимание: как на C++, так и на Java, использование абсолютных путей, по сути, считается плохой практикой. То есть, на C++, если вы делали #include "D:\Insert\Directory\Name\Here"
... это, по сути, не хорошая инженерная практика. В C++ лучше сделать #include "relative/path/to/headerfile.h"
и указать через командную строку компилятора, что "D:\Path\To\Directory"
является одним из корневых каталогов, в которых начинается поиск. То же самое относится к Java. То есть, в общем, пути относятся к различным корням вашего репозитория, а вызовы компилятора указывают расположение этих каталогов репозитория. Это гарантирует, что код является самодостаточным и герметичным, ссылаясь только на другой код в репозитории/проекте (а не на произвольный код/пути, которые находятся в системе). В Java этот механизм поиска называется «classpath»; в C++ это очень специфичный для компилятора, но с компилятором GNU C++ флаги -I и -L позволяют указать путь к каталогам include и каталогам lib, которые используются для определения заголовков и библиотек для ссылок.
Это своего рода широкая тема для сайта Q & A. Это основная концепция, которую вы изучаете при изучении языка. Например. из учебников Java: https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html. Было бы хорошо, если бы вы сделали некоторые фундаментальные исследования и вернулись с конкретным вопросом. –