DexT3R |
Дата: Воскресенье, 03.11.2013, 13:45 | Сообщение # 1
|
(•̪●)=ε/̵͇̿̿/’̿’̿ ̿ ̿̿ ̿ ̿””
Сообщений: 1978
Статус: Offline
|
Файлы на компьютерах, располагаются в папках, что позволяет пользователю ориентироваться в них. Также классы в Java распределяют по пакетам. Обычно в один пакет кладут классы, которые взаимосвязаны или имеют одного и того же автора. Каждый пакет как и папка имеет свое имя, притом в Java реально создаются папки под ваши пакеты с совпадающим именем. Так как пакеты полностью ассоциируются с папками, то у них существует вложенность, она показывается с помощью точки, например "main.slave" будет означать, что пакет с именем slave находится в пакете main, тоже самое произойдет и с соответствующими папками. Все файлы которые вы создадите в пакете "main.slave" будут хранится в папке slave, очевидно, что классы из этого пакета будут иметь расширение ".java". Для того, чтобы класс находился в определенном пакете используется ключевое слово package. Давайте сначала создадим пакет ru в папочку scr для этого в среде нажмите правой кнопочкой и выберите Package после этого введите имя пакета. Все вы видите пакет с именем ru. Теперь создадим в нем пакет с именем cybern и наконец создадим в нем какой - нить класс: Код package ru.cybern; public class PackageTest { } Как вы могли заметить я не случайно создал пакеты с таким именем. В java принято именовать пакеты, которые вы разрабатываете, также как ваш личный сайт или сайт фирмы в которой вы работаете, записанный задом на перед, а дальше уже использовать специфичные имена типа util и прочее. Данная рекомендация присутствует для того, чтобы при подключении различных библиотек не произошел конфликт имен пакетов. Создадим еще один класс в паке ru.cybern: Код package ru.cybern; public class Test { public void test(){ PackageTest t = new PackageTest(); } } Как мы видим, что для того, чтобы обратиться к классу из того же пакета достаточно просто указать его имя, а теперь создадим класс в пакете ru: Код package ru; public class Test { public void test(){ ru.cybern.PackageTest t = new ru.cybern.PackageTest(); } } Для того, чтобы обратиться к классу из другого пакета необходимо указать полный путь до класса, как это продемонстрировано выше. Как вы могли заметить в разных пакетах могут хранится классы с одинаковыми именами. Если вы собираетесь часто обращаться к какому - то определенному классу, например к ru.cybern.PackageTest вы можете импортировать себе этот класс, тогда при обращении к нему достаточно будет использовать только его имя, например: Код package ru; import ru.cybern.PackageTest; public class Test { public void test() { PackageTest t = new PackageTest(); } } Также можно импортировать весь пакет, для этого после его названия используют *: Такой способ не очень рекомендуется, так как может вызывать конфликт имен. Например, если мы импортируем в любой класс, который находится в пакете ru пакет cybern, то у нас получатся два равноправных класса Test, что может привести к ошибкам.
Файловая структура Java проекта Давайте еще раз поговорим о структуре проекта. В папочке src располагаются все исходные коды программы. Внутри нее мы можем создавать пакеты, которые ассоциированы с папками. Пакеты могут быть любой вложенности. Любой пакет может содержать файлы кода. Каждый файл с расширением "java" может иметь только один публичный класс или интерфейс, который будет совпадать с названием файла. Очевидно, что все классы, которые не объявлены как public нельзя использовать за пределами пакета. Таким образом все классы и интерфейсы, которые вы собираетесь использовать вне пакета должны быть открытыми, а значит находится в отдельных файлах. Файл с расширением ".java" это обычный текстовый файл, которые можно открыть в любом редакторе. При компиляции приложения для каждого файла кода создается файл с расширением ".class". Они после компиляции будут находится в следующей папочке "имя_проекта\out\production\имя_проекта\". Для запуска проекта необходимо запустить класс, который содержит точку входа в программу (метод main).
Области видимости Области видимости классов - это такой участок программы, где можно создавать объекты данного класса и обращаться к его статичным членам. Internal (default) и public классы видны внутри своего пакета, а открытые классы видны и из других пакетов через точку или с помощью import. Если класс объявлен внутри другого класса, то он виден только внутри того класса в котором объявлен. Если класс объявлен внутри метода, то он виден только в нем. Анонимные классы видны только в пределах команды, в которой они создаются. Видимость членов класса - это возможность обращаться к методам и возможность смотреть и изменять поля класса. Public члены класса видны там же, где виден сам класс. Protected члены классы видны в потомках класса. Private члены видны только внутри класса. Переменные видны внутри блока, в котором они объявлены, т.е: Код { int x; //видна } //не видна Как вы помните нельзя создавать переменные с таким же именем, как те которые находятся в области видимости: Код int x; { int x;//ошибка } Например нельзя в методе создать переменную с именем, совпадающем с названием параметра: Код public void test(int t) { PackageTest t = new PackageTest();//ошибка } Конфликт имен возникает в программе, когда импортируется два пакета, которые содержат классы с одинаковым именем. Java разрешает эту проблему следующим образом: класс, который был импортирован первым получает возможность быть созданным без точки, а второй класс может быть вызван только с использованием его полного имени. Например, если импортировать в какой - то класс пакеты ru и ru.cybern, то в зависимости от порядка, мы сможем обратиться к тому или иному классу Test. Код import ru.Test; import ru.cybern.*; public class test {
public static void main(String[] args) { Test test1 = new Test();//ru.Test ru.cybern.Test test2 = new ru.cybern.Test(); } } Если конфликт имен переменных произошел между параметрами метода и полями класса, то для его разрешения используют ключевое слово this: Код public class TestClass { int key; public void setKey(int key){ this.key = key; } } На этом мы заканчиваем рассмотрение пакетов и областей видимости.
НИЧЕГО НЕ ПРОДАЮ В ТЕЛЕГРАММЕ И ВК!!
|
|
|
|
[WS]Grenhelgets |
Дата: Понедельник, 01.12.2014, 17:45 | Сообщение # 2
|
|
Добавь в скайп nicelse.ws предложение есть.
|
|
|
|
GlaroX |
Дата: Четверг, 24.11.2016, 03:05 | Сообщение # 3
|
Боец
Сообщений: 201
Статус: Offline
|
Отличный разбор немного изучаю!
|
|
|
|