классы какого пакета импортируются в приложение автоматически
Какие Java классов / пакетов автоматически импортируются?
В приведенном выше примере мы используем метод println без импорта его пакета. Поэтому я хочу знать: какие пакеты или классы включаются автоматически?
3 ответа
Я хотел бы знать количество встроенных классов и пакетов, доступных с Java 6. Пожалуйста, предоставьте мне url, откуда эта информация доступна. Спасибо
Запрограммировав в Groovy довольно много, я знаю, что классы в определенных пакетах автоматически импортируются. Что такое совок для 1) Java и 2) Groovy? Есть ли окончательный список тех, для которых вам не нужно указывать import для каждого из этих языков?
По умолчанию импортируются два пакета:
Код в блоке компиляции автоматически получает доступ ко всем типам, объявленным в его пакете, а также автоматически импортирует все общедоступные типы, объявленные в предопределенном пакете java.lang.
В настоящее время я использую эту строку для загрузки стороннего JAR и добавления его пакетов/классов в мою программу URL [] urls = new URL [] < http://. >; new URLClassLoader(urls); Проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что загружается весь JAR, то есть.
Я получил какой-то автоматически сгенерированный код Java. Я готов к автоматическому рефакторингу перед компиляцией. В основном это переименование классов и модификация пакетов. Существуют ли для этого какие-либо задачи gradle или ant?
Похожие вопросы:
Можно ли переименовать пакет java с помощью кода java? Мне нужно сделать много переименований, чтобы сделать демонстрационную версию системы (без каких-либо реальных имен пакетов и классов). Java не.
Что означает import классов и откуда они импортируются? Пример package game; import game.sprites.PlayerSprite; import java.applet.Applet; import java.awt.*; import java.io.*; import java.net.URL;.
Есть ли способ запустить правила очистки Eclipse для всего набора классов / пакетов вместо отдельных классов? (Предпочтения > Java > Стиль Кода > Очистка) Я щелкаю правой кнопкой мыши по классу и.
Я хотел бы знать количество встроенных классов и пакетов, доступных с Java 6. Пожалуйста, предоставьте мне url, откуда эта информация доступна. Спасибо
Запрограммировав в Groovy довольно много, я знаю, что классы в определенных пакетах автоматически импортируются. Что такое совок для 1) Java и 2) Groovy? Есть ли окончательный список тех, для.
В настоящее время я использую эту строку для загрузки стороннего JAR и добавления его пакетов/классов в мою программу URL [] urls = new URL [] < http://. >; new URLClassLoader(urls); Проблема, с.
Я получил какой-то автоматически сгенерированный код Java. Я готов к автоматическому рефакторингу перед компиляцией. В основном это переименование классов и модификация пакетов. Существуют ли для.
В рамках игры на базе java, которую я разрабатываю, я планирую встроить Groovy (или, возможно, какой-то другой) скриптовый язык, чтобы обеспечить поддержку модов более низкого уровня и способ для.
Пакеты классов, package
Пакет package позволяет логически объединить классы в наборы. Основные классы java входят в пакет java.lang. Различные вспомогательные классы располагаются в пакете в java.util. Классы для ввода и вывода входят в пакет java.io, а классы для работы в сети – в java.net. Некоторые их этих пакетов содержат подпакеты. Так, например, java.lang содержит два специализированных пакета java.lang.reflect и java.lang.ref, а java.util содержит подпакет java.util.zip, который включает классы для работы с ZIPархивами.
Каждый класс имеет как простое имя, данное ему в определении, так и полное имя, включающее имя пакета, в который он входит. Например, класс String является частью пакета java.lang, а его полное имя – java.lang.String.
Структура пакетов в точности отображает структуру файловой системы. Все файлы с исходными кодами (java-класс) и байт-кодами (расширением class), образующие один пакет, хранятся в одном каталоге файловой системы. Подпакеты образуют подкаталоги этого каталога. Каждый пакет создает единое пространство имен namespace. Это означает, что все имена классов и интерфейсов в пакете должны быть уникальны. Имена в разных пакетах могут совпадать, но это будут разные программные модули. Организация классов в виде пакетов позволяет избежать конфликта имен между классами. В пакете дублирование имен классов не допускается. Принадлежность класса к пакету позволяет гарантировать однозначность имен.
Чтобы указать, что класс принадлежит определенному пакету, следует использовать директиву package, после которой указывается наименование (путь) пакета :
В данном примере класс HelloWorld располагается в пакете company.common. Физически это директория «$
Можно package в классе не определять. В этом случае класс будет находиться в пакете по умолчанию, который не имеет имени «$
Наименование пакета может быть любым, но необходимо соблюдать его уникальность в проекте. Соглашение «Code Conventions» рекомендует записывать имена пакетов строчными буквами. Тогда они не будут совпадать с именами классов, которые, по соглашению, начинаются с прописной буквы.
Стандартная библиотека Java API включает сотни классов. Каждый программист в ходе работы создает десятки своих классов. Множество классов быстро увеличивается. Java позволяет отдельные классы, решающие определенную задачу (или несколько задач), объединять в библиотеки классов в виде архивов jar. Но эти библиотеки классов, кроме стандартных, не являются частью языка java.
Импорт пакетов и классов, import
Для использования класса в приложении, его следует подключить. Так расположенный в пакете java.util класс Scanner можно подключить следующим способом :
В этом примере при определении/создании нового объекта был указыван пакет (полный путь к файлу). Однако данный подход не всегда удобен, и в качестве альтернативы можно импортировать пакеты и классы в приложение с помощью директивы import, которая указывается после директивы package :
Директива import указывается в самом начале кода, после чего идет имя подключаемого класса (класс Scanner в примере).
В примере был подключен только один класс. Однако пакет java.util содержит большое количество разных классов. И чтобы не подключать по отдельности каждый класс, можно сразу подключить весь пакет :
Теперь можно использовать любой класс из пакета java.util.
Возможна ситуация, когда используется два класса с одинаковым наименованием, но из разных пакетов. Это относится, например, к классам Date, которые имеются в пакете java.util и в пакете java.sql, или классам List пакетов java.util и java.awt. И если необходимо одновременно использовать оба эти класса, то необходимо указывать полный путь к классам в пакете :
Следует сказать, что основные классы из пакета java.lang (например, String) подключаются автоматически и не требуют «импортирования».
Статический импорт классов, import static
В java можно использовать статический импорт. Для этого вместе с директивой import используется модификатор static :
В примере определяется статический импорт классов System и Math, которые имеют статические методы. Определение статического импорта позволяет использовать статические методы без названия класса. В примере статическая функция sqrt(20) (можно и Math.sqrt(20)), возвращает квадратный корень числа. То же самое относится и к классу System, в котором определен статический объект out, поэтому можно его использовать без указания класса, если выполнен статический импорт класса System.
Пример использования классов разных пакетов
Листинг базового класса, BaseClass.java
Базовый класс включает 2 поля (id, name) и методы get/set. В конструкторе значения полей инициализируется.
Переопределенная функция toString() возвращает наименование класса и значение полей.
Листинг наследника, Inheritor.java
Класс Inheritor.java наследует свойства базового класса BaseClass.java. Поскольку классы располаются в разных пакетах, то базовый класс необходимо импортировать.
Листинг основного класса, MainPackage.java
Основной класс включает статический метод main. Поскольку данный класс не «видит» наследника, то его приходится импортировать.
Результат выполнения данной программы выводится в консоль в следующем виде :
Как видно по результату выполнения программы наименование класса включает пакет.
Говоря о полном наименовании класса следует отметить, что оно включает не только наименование пакета и наименование класса, но также и класс-загрузчик classloader. Подробно о классах-загрузчиках можно почитать здесь.
Пакеты и интерфейсы
Пакеты
Оператор package
то и исходный код этого класса должен храниться в каталоге java/awt/image.
Замечание
Каталог, который транслятор Java будет рассматривать, как корневой для иерархии пакетов, можно задавать с помощью переменной окружения СLASSPATH. С помощью этой переменной можно задать несколько корневых каталогов для иерархии пакетов (через ; как в обычном PATH).
Трансляция классов в пакетах
При попытке поместить класс в пакет, вы сразу натолкнетесь на жесткое требование точного совпадения иерархии каталогов с иерархией пакетов. Вы не можете переименовать пакет, не переименовав каталог, в котором хранятся его классы. Эта трудность видна сразу, но есть и менее очевидная проблема.
Оператор import
После оператора package, но до любого определения классов в исходном Java-файле, может присутствовать список операторов import. Пакеты являются хорошим механизмом для отделения классов друг от друга, поэтому все встроенные в Java классы хранятся в пакетах. Общая форма оператора import такова:
Замечание
Но использовать без нужды форму записи оператора import с использованием звездочки не рекомендуется, т.к. это может значительно увеличить время трансляции кода (на скорость работы и размер программы это не влияет).
Все встроенные в Java классы, которые входят в комплект поставки, хранятся в пакете с именем java. Базовые функции языка хранятся во вложенном пакете java.lang. Весь этот пакет автоматически импортируется транслятором во все программы. Это эквивалентно размещению в начале каждой программы оператора
Если в двух пакетах, подключаемых с помощью формы оператора im-port со звездочкой, есть классы с одинаковыми именами, однако вы их не используете, транслятор не отреагирует. А вот при попытке использовать такой класс, вы сразу получите сообщение об ошибке, и вам придется переписать операторы import, чтобы явно указать, класс какого пакета вы имеете ввиду.
Ограничение доступа
Java предоставляет несколько уровней защиты, обеспечивающих возможность тонкой настройки области видимости данных и методов. Из-за наличия пакетов Java должна уметь работать еще с четырьмя категориями видимости между элементами классов :
В языке Java имеется три уровня доступа, определяемых ключевыми словами: private (закрытый), public (открытый) и protected (защищенный), которые употребляются в различных комбинациях. Содержимое ячеек таблицы определяет доступность переменной с данной комбинацией модификаторов (столбец) из указанного места (строка).
private | модификатор отсутствует | private protected | protected | public | |
тот же класс | да | да | Да | да | да |
подкласс в том же пакете | нет | да | Да | да | да |
независимый класс в том же пакете | нет | да | Нет | да | да |
подкласс в другом пакете | нет | нет | Да | да | да |
независимый класс в другом пакете | нет | нет | Нет | нет | да |
Интерфейсы
Оператор interface
Определение интерфейса сходно с определением класса, отличие состоит в том, что в интерфейсе отсутствуют объявления данных и конструкторов. Общая форма интерфейса приведена ниже:
Оператор implements
Если в классе реализуется несколько интерфейсов, то их имена разделяются запятыми. Ниже приведен пример класса, в котором реализуется определенный нами интерфейс:
Ниже приведен результат работы программы:
Переменные в интерфейсах
Интерфейсы можно использовать для импорта в различные классы совместно используемых констант. В том случае, когда вы реализуете в классе какойлибо интерфейс, все имена переменных этого интерфейса будут видимы в классе как константы. Это аналогично использованию файлов-заголовков для задания в С и C++ констант с помощью директив #define или ключевого слова const в Pascal / Delphi.
Если интерфейс не включает в себя методы, то любой класс, объявляемый реализацией этого интерфейса, может вообще ничего не реализовывать. Для импорта констант в пространство имен класса предпочтительнее использовать переменные с модификатором final. В приведенном ниже примере проиллюстрировано использование интерфейса для совместно используемых констант.
Блог только про Java
Учимся программировать на Java с нуля
Импортирование классов Java
Класс может использовать все классы из собственного пакета и все общедоступные классы из других пакетов. Доступ к классам их других пакетов можно получить двумя путями. Во первых, можно указывать полное имя пакета перед именем каждого класса. Например:
Очевидно, что этот способ слишком утомителен. Более простой и распространенный способ предусматривает применение ключевого слова import. В этом случае имя пакета перед именем класса записывать не обязательно. Импортировать можно как один конкретный класс, так и весь пакет. Операторы import следует поместить в начало исходного файла(после всех операторов package). Например, все классы из пакета java.util можно импортировать следующим образом:
После этого в строке кода, указанной ниже, имя пакета не указывается.
Можно также импортировать отдельный класс из пакета:
Импортировать все классы проще. На размер кода это не влияет. Однако если явным образом указать импортируемый класс, становится ясно, какие именно классы будут использованы в программе.
Работая с Eclipse, можно использовать пункт меню Source->Organize Imports(Исходный код->Импортирование). В результате выражения типа import java.util.*; будут автоматически преобразованы в последовательности строк, предназначенных для импортирования отдельных классов:
Эта возможность несколько упрощает работу программиста.
Однако следует заметить, что оператор import со звездочкой можно применять для импортирования только одного пакета. Нельзя использовать обозначение import java.* или import java.*.*, чтобы импортировать все пакеты, имена которых содержат префикс Java.
Пакеты
1. Добавление класса в пакет
Обычно проект содержит большое количество классов и держать их в одном каталоге крайне неудобно. Кроме того, может возникнуть ситуация, когда два программиста создали класс с одинаковым названием. Для решения этих проблем в Java существует такой механизм как пакеты. Пакеты по своей сути очень похожи на каталоги файловой системы и должны совпадать с ней.
Существуют также правила для наименования пакетов. Для коммерческих проектов пакет должен начинаться с com, потом следует имя организации и название проекта. Потом пакеты обычно именуются по какому-то функциональному признаку. В примере 2 наименование пакета соответствует этому правилу.
Кроме разделения пространств имен классов, пакеты также служат для управления доступностью объектов. В пакете можно определить классы, недоступные для кода за пределами этого пакета. В нем можно также определить члены класса, доступные только другим членам этого же пакета. Благодаря такому механизму классы могут располагать полными сведениями друг о друге, но не предоставлять эти сведения остальному миру.
2. Импорт пакетов
Хорошей практикой считается добавлять классы в пакеты. Но так как полное имя класса включает в себя имя пакета, в коде это может привести к достаточно длинным строкам, что крайне неудобно. Для решения этой проблемы в Java придуман такой механизм как импорт. Оператор import позволяет импортировать класс, после чего к нему можно обращаться просто по имени.
2.1. Использование класса из другого пакета
2.2. Использование оператора import
Перепишем класс first.Example1 используя оператор import :
Разные варианты написания import:
Существует один пакет, классы которого импортируются в код по умолчанию. Это пакет jаva.lang, в котором находятся наиболее часто используемые классы.