что такое поля в java

Классы, объекты, методы, поля… Понятно о Java (еще немного ООП)

А давайте-ка продолжим разбираться с основами языка. Разберемся с основными понятиями в Java. Как и во многих объектно-ориентированных языках, в Java присутствует понятие класса. При этом Java — полностью объектно-ориентированный язык. Это значит, что любая сущность которую вы создаете в свое программе — есть объект. Ну вот, у нас есть два понятия объект и класс. В чем между ними разница? А тут все очень просто: класс — это шаблон для создания объекта. Если взять чертеж какой-то детали и саму деталь, то в терминах ООП (объектно ориентированного программирования) сам чертеж будет классом, а деталь — объектом этого класса.

Предположим, что если мы описали класс «Человек», у каждого человека есть такие параметры как рост, вес, возраст, цвет волос и цвет глаз, и т.д. Все эти параметры становятся полями класса Человек. Ну а когда мы создадим конкретный экземпляр этого класса, то у каждого поля будут какие-то свои значения: один человек может быть низким и толстым, другой высоким и худым. Помимо этого, все люди могут выполнять какие-то действия, например любой человек может поднять руку, наклониться, побежать, или лечь. В терминах объектно-ориентированного программирования эти действия будут называться методами класса «Человек». Но понятно, что одни люди бегают быстро, а другие медленно в силу каких-то своих личных характеристик. Так и методы в объекте работают с данными самого этого объекта. Ну давай-те попробуем написать свой небольшой класс:

Здесь мы смоделировали человека как нечто обладающее двумя параметрами — это сила power и скорость speed. Теперь создадим экземпляры этого класса:

Получается, что мы создали два экземпляра класса man один из которых (man1) обладает силой 100 и скоростью 120, а у другого сила 80, зато скорость 180. Тогда если мы вызовем метод work (работать) для обоих объектов, то man1 за некоторое время выполнит больше работы чем man2 за то же время. Ну а если мы заставим их бежать одно и то же время, то man1 пробежит меньшее расстояние чем man2:

Вот здесь tutor_class.java можно взять полный код класса на Java. Если вы запустите такое приложение, то сразу поймете, о чем я говорю :-).

Надеюсь что достаточно просто объяснил все для новичков. Если есть вопросы или какие-то предложения, не стесняйтесь оставлять комменты! До встречи 🙂

Источник

Инициализация полей в Java (Java fields initialization)

Введение

Типы инициализации полей объектов и классов

Существуют следующие методы инициализации полей:

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

Далее мы рассмотрим каждый тип инициализации подробнее.

Инициализация статических полей в месте объявления

Здесь инициализируется статическое поле SIZE класса Integer. Сама инициализация произойдет во время загрузки класса. В этом легко убедиться выполнив следующий код:

В результате будет выведено:

Как видно из вывода переменная i инициализируется в результате загрузки класса. Попробуйте выполнить код, закомментировав строку, содержащую Class.forName(. ).

Инициализация в статическом блоке

Переменная alphabet инициализируется в статическом блоке. Инициализация происходит во время загрузки класса аналогично как и в предыдущем примере.

Инициализация статических полей в месте объявления и статические блоки выполняются в порядке их объявления в классе. Давайте выполним следующий код:

На консоль будет выведено:

Инициализация полей объекта

В отличии от полей класса, поля объекта инициализируются во время конструирования экземпляра класса. В Java существует 3 типа такой инициализации:

Инициализация полей объекта в месте объявления

Покажем на примере:

Инициализация поля posts будет произведена во время конструирования объекта Blog.

Инициализация полей объекта в нестатическом блоке

Использование инициализационных блоков является альтернативой предыдущему способу инициализации. Данный тип инициализации может использоваться, если:

Пример обработки проверяемого исключения:

Инициализация полей объекта в конструкторе

Часто инициализацию полей объекта имеет смысл проводить только с учетом значений параметров конструктора. В таких случаях ее производят в самом конструкторе. Пример:

Инициализация в конструкторе и наследование

Выполним следующий код:

В out будет выведено:

Вывод свидетельствует о том, что инициализация выполнялась следующим образом:

Порядок инициализации полей объекта

Давайте теперь проанализируем порядок выполнения инициализаторов полей объекта. Для этого выполним код, включающий все типы инициализаторов:

В результате выполнения получим:

Вывод свидельствует о том что:

Результат декомипляции предыдущего примера

Ну и напоследок давайте декомпилируем следующий код с помощью Jad:

Получился следующий листинг:

Интересно, что компилятор перенес всю нестатическую инициализацию объекта в конструктор класса. При этом статический инициализационный блок остался без изменений.

Выводы


Желаю удачи!
Дмитрий Пекар, июнь 2009

Если Вам понравилась статья, проголосуйте за нее

Голосов: 84 Голосовать что такое поля в java. Смотреть фото что такое поля в java. Смотреть картинку что такое поля в java. Картинка про что такое поля в java. Фото что такое поля в java

Источник

Классы, объекты, методы

Java является объектно-ориентированным языком, поэтому такие понятия как «класс» и «объект» играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.

Определение класса

Таким образом, в классе Book определены три переменных и один метод Info, который выводит значения этих переменных.

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

Класс Book имеет два конструктора. Первый конструктор без параметров присваивает «неопределенные» начальные значения полям. Второй конструктор присваивает полям класса значения, которые передаются через его параметры.

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

Вызов конструктора класса с двумя параметрами производится с помощью ключевого слова this, после которого в скобках указывается список параметров.

Создание объекта

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

После объявления переменной Book b; эта переменная еще не ссылается ни на какой объект и имеет значение null. Затем создаем непосредственно объект класса Book с помощью одного из конструкторов и ключевого слова new.

Инициализаторы

Кроме конструктора начальную инициализацию полей объекта можно проводить с помощью инициализатора объекта. Так можно заменить конструктор без параметров следующим блоком :

Методы класса

Метод класса в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-либо классу или объекту.

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

Различают простые методы и статические методы :

Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных.

Кроме имени и тела (кода) у метода есть ряд других характеристик:

Модификаторы метода определяют уровень доступа. В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:

Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию.

Для того чтобы создать статический метод, перед его именем надо указать модификатор static. Если этого не сделать, то метод можно будет вызывать только в приложении к конкретному объекту данного класса (будет нестатическим).

Класс может включать метод main, который должен иметь уровень доступа public; к нему обращается виртуальная машина Java, не являющаяся частью какого-либо пакета.

Абстрактный класс, abstract class

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Пример абстрактного класса, включающего две абстрактные функции.

Переопределение метода, Override

В реализации ReleasePrice, наследующего свойства класса Price, «реализуем» абстрактные методы и «переопределяем» метод с использованием аннотации @Override :

Теперь, если в родительском класса Price метод bonusPrice будет удален или переименован, то среда разработки должна выдать соответствующее сообщение. Компилятор также выдаст сообщение об ошибке.

Перегрузка методов, overload

Совокупность имени метода и набора формальных параметров называется сигнатурой метода. Java позволяет создавать несколько методов с одинаковыми именами, но разными сигнатурами. Создание метода с тем же именем, но с другим набором параметров называется перегрузкой. Какой из перегруженных методов должен выполняться при вызове, Java определяет на основе фактических параметров, передаваемых методу.

Пример класса Test с тремя перегруженными методами test :

Пример использования класса Test:

Java рекурсия

Рекурсией называется метод (функция), которая внутри своего тела вызывает сама себя.

Рассмотрим пример рекурсивного метода вычисления факториала. Для того чтобы вычислить n!, достаточно знать и перемножить между собой (n-1)! и n. Создадим метод, реализующий описанный способ.

Указанный рекурсивный метод вычисляет факториал натурального числа.

Рассмотрим пример, вычисляющий через рекурсию n-ое число Фибоначчи. Напомним, как выглядят первые элементы этого ряда: 1 1 2 3 5 8 13 …

Суперкласс Object

В Java есть специальный суперкласс Object и все классы являются его подклассами. Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса. Так как массивы являются тоже классами, то переменная класса Object может ссылаться и на любой массив.

У класса Object есть несколько важных методов:

МетодОписание
Object clone()Функция создания нового объекта, не отличающий от клонируемого
boolean equals(Object object)Функция определения равенства текущего объекта другому
void finalize()Процедура завершения работы объекта; вызывается перед удалением неиспользуемого объекта
Class getClass()Функция определения класса объекта во время выполнения
int hashCode()Функция получения хэш-кода объекта
void notify()Процедура возобновления выполнения потока, который ожидает вызывающего объекта
void notifyAll()Процедура возобновления выполнения всех потоков, которые ожидают вызывающего объекта
String toString()Функция возвращает строку описания объекта
void wait()Ожидание другого потока выполнения
void wait(long ms)Ожидание другого потока выполнения
void wait(long ms, int nano)Ожидание другого потока выполнения

Методы getClass(), notify(), notifyAll(), wait() являются «финальными» (final) и их нельзя переопределять.

Проверка принадлежности класса instanceof

Для проверки принадлежности класса какому-либо объекту необходимо использовать ключевого слова instanceof. Иногда требуется проверить, к какому классу принадлежит объект. Это можно сделать при помощи ключевого слова instanceof. Это логический оператор, и выражение foo instanceof Foo истинно, если объект foo принадлежит классу Foo или его наследнику, или реализует интерфейс Foo (или, в общем виде, наследует класс, который реализует интерфейс, который наследует Foo).

Пример с рыбками. Допустим имеется родительский класс Fish и у него есть унаследованные подклассы SaltwaterFish и FreshwaterFish. Необходимо протестировать, относится ли заданный объект к классу или подклассу по имени

Данная проверка удобна во многих случаях. Иногда приходится проверять принадлежность класса при помощи instanceof, чтобы можно было бы разделить логику кода:

Импорт класса import

Оператор import сообщает компилятору Java, где найти классы, на которые ссылается код. Любой сложный объект использует другие объекты для выполнения тех или иных функций, и оператор импорта позволяет сообщить о них компилятору Java. Оператор импорта обычно выглядит так:

За ключевым словом следуют класс, который нужно импортировать. Имя класса должно быть полным, то есть включать свой пакет. Чтобы импортировать все классы из пакета, после имени пакета можно поместить ‘.*;’

IDE Eclipse упрощает импорт. При написании кода в редакторе Eclipse можно ввести имя класса, а затем нажать Ctrl+Shift+O. Eclipse определяет, какие классы нужно импортировать, и добавляет их автоматически. Если Eclipse находит два класса с одним и тем же именем, он выводит диалоговое окно с запросом, какой именно класс вы хотите добавить.

Статический импорт

Существует ещё статический импорт, применяемый для импорта статических членов класса или интерфейса. Например, есть статические методы Math.pow(), Math.sqrt(). Для вычислений сложных формул с использованием математических методов, код становится перегружен. К примеру, вычислим гипотенузу.

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

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

Второй допустимый вариант, позволяющий сделать видимыми все статические методы класса:

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

Источник

Java шпаргалка. Часть 2. Объекты и классы

Основные понятия которые необходимо знать в JAVA в области объектов классов.

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

Данные в объекте — поля экземпляра, функции и процедуры, выполняющие операции над данными — методами.

Object — глобальный суперкласс. Все остальые классы расширяют его.

Наследование — расширение класса и получение на основе него нового. Новый класс содержит все свойства и методы расширяемого класса. Также в него добавляются новые методы и поля данных.

В объектно-ориентированном программировании сначала необходимо идентифицировать классы, а затем добавить методы в каждый класс.

Отношения между классами

Зависимость (использует — что-то). Например объекты типа Order должны иметь доступ к объектам типа Account, чтобы проверить количество денег на счету заказчика.
Агрегирование (содержит — что-то). Например объект типа Order (заказ) может содержить объекты типа Item (товары).
Наследование (является — чем-то).

что такое поля в java. Смотреть фото что такое поля в java. Смотреть картинку что такое поля в java. Картинка про что такое поля в java. Фото что такое поля в java

что такое поля в java. Смотреть фото что такое поля в java. Смотреть картинку что такое поля в java. Картинка про что такое поля в java. Фото что такое поля в java

Основные отношения UML

Объектная переменная не содержит никакого объекта. Она лишь ссылается на него. Значение любой объектной переменной в Java представляет собой ссылку на объект, размещенный в другом месте. Операция new также возвращает ссылку.

Date birthday = new Date();

Объектной переменной можно явно присвоить пустое значение null, чтобы указать на то, что она пока не ссылается ни на один из объектов:

Объектные переменные в Java следует считать аналогами указателей на объекты.

Date birthday; // Java

Все объекты в Java располагаются в динамической области памяти, иначе называемой «кучей». Если объект содержит другую объектную переменную, то она представляет собой всего лишь указатель на другой объект, расположенный в этой области памяти.

Пример простого класса

class Employee
<
private String name; // Private означает, что к данным полям имеют доступ только методы самого класса Employee. Ни один внешний метод не может читать или записывать данные в эти поля.
private double salary;
private Date hireDay;

public Employee(String n, double s, int year, int month, int day)
<
name = n;
salary = s;
hireDay = LocalDate.of(year, month, day);
>

public String getName()
<
return name;
>

Не следует объявлять поля экземпляра как public, так как любые компоненты и программы могут к ним обратиться и изменить их.

Внимание

class Employee
<
private Date hireDay;

public Date getHire()
<
return hireDay; //Так делать нельзя!
// Используйте return hireDay.clone(); если нужно скопировать изменямое поле данных.
>
>

Дело в том, что объекты типа Date, в отличие от LocalDate, имеют модифицирующие методы. Из-за этого нарушается принцип инкапсуляции.

Привилегии доступа к данным в классе

Метод имеет доступ к закрытым данным того объекта, для которого он вызывается. Но он также может обращаться к закрытым данным всех объектов своего класса.

Закрытые методы

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

Неизменяемые поля экземпляра

private final String name;

Такое поле должно инициализироваться при создании объекта, то есть необходимо гарантировать, что значение поля будет установлено по завершении каждого конструктора. После этого его значение изменить уже нельзя.
Модификатор final удобно применять при объявлении полей простых типов или полей, типы которых задаются неизменяемыми классами. Неизменяемым называется такой класс, методы которого не позволяют изменить состояние объекта. Например, неизменяемым является класс String. Если класс допускает изменения, то ключевое слово final может стать источником недоразумений.

Статические поля

Поле с модификатором доступа static существует в одном экземпляре для всего класса.

class Article
<
private int id;
private static int nextId = 1;

Даже если не создано ни одного объекта типа Article, статическое поле nextId все равно существует. Оно принадлежит классу, а не конкретному объекту.

Статические константы

Статические переменные используются достаточно редко, однако статические константы применяются намного чаще. Например:

public class Math
<
public static final double PI = 3.14;
>

Делать поля открытыми в коде не рекомендуется, но открытыми константами (т.е. полями, объявленными с final) можно пользоваться смело.

Статические методы

Статическими называют методы, которые не оперируют объектами. У них нет явного параметра this. Так как статические методы не оперируют объектами, из них нельзя получить доступ к полям экземпляра. Но статические методы имеют доступ к статическим полям класса.
Для вызова статических методов рекомендуется использовать имена их классов, а не объекты.

Статические методы следует применять в следующих случаях:
1. Когда методу не требуется доступ к данным о состоянии объекта, поскольку все необходимые параметры задаются явно (например, Math.pow()).
2. Когда методу требуется доступ лишь к статическим полям класса.

P.S. В C++ ключевое слово static обозначает переменные и методы, принадлежащие классу, но не принадлежащие ни одному из объектов этого класса. Именно этот смысл значения перебрался в Java.

Фабричные методы

Фабричные методы — еще одно применение статических методов.
Например:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

Метод main

Метод main не оперирует никакими объектами. При запуске программы еще нет никаких объектов. Статический метод main() выполняется и конструирует объекты, необходимые программе.

P.S. Каждый класс может содержать метод main(). С его помощью удобно организовать блочное тестирование классов. Причем если класс ClassWithMain с методом main является частью большого приложения ClassMainProgram, то при выполнении java ClassMainProgram метод main в ClassWithMain не выполнится.

Параметры методов

Вызов по значению — метод получает значение, переданное ему из вызывающей части программы.

Вызов по ссылке — метод получает из вызывающей части программы местоположение переменной. Таким образом, метод может модифицировать значение переменной, передаваемой по ссылке, но не переменной, передаваемой по значению.

В языке Java всегда используется только вызов по значению. Таким образом, метод получает копии значений всех своих параметров. Именно по этому метод не может видоизменять содержимое ни одной из переменных, передаваемых ему в качестве парметров.

Причем, методы не могут изменит параметры примитивных типов. Другое дело обстоит с объектами. Метод получает копию ссылки на объект, поэтому копия и оригинал ссылки указывают на один и тот же объект. Однако передача объектов в Java ведется не по ссылке. Если мы передаем объект в метод, то ссылка на этот объект копируется перед началом выполнения метода.

Таким образом, в Java для передачи объектов не применяется вызов по ссылке. Вместо этого ссылки на объекты передаются по значению.

Конструирование объектов

Перегрузка

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

Инициализация полей по умолчанию

Если значение поля в конструкторе явно не задано, то ему автоматически присваивается значение по умолчанию: числам — нули, логическим переменным — логическое значение false, ссылкам на объект — пустое значение null. Однако полагаться на действия по умолчанию не следует.

Конструктор без аргументов

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

Если в классе совсем не определены конструкторы, то автоматически создается конструктор без аргументов. В этом конструкторе всем полям экземпляра присваиваются их значения, предусмотренные по умолчанию.
Если же в классе есть хотя бы один конструктор и явно не определен конструктор без аргументов, то создавать объекты, не предоставляя аргументы нельзя.

Явная инициализация полей

private String name = «»;

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

class Building
<
private static int nextId;
private int /> ….
private static int assignId()
<
int r = nextId;
nextId++;
return r;
>
>

Имена параметров

Зачастую в качестве параметров служат отдельные буквы. Например:

public Building(String s, int h)
<
street = s;
house = h;
>

Однако при чтении программы невозможно понять, что же означают параметры s и h. Поэтому некоторые программисты добавляют к осмысленным именам параметров префикс «a».

public Building(String aStreet, int aHouse)
<
street = aStreet;
house = aHouse;
>

Есть еще один прием. Дело в том, что параметры скрывают поля экземпляра с такими же именами. Если вызвать метод с параметром house, то ссылка house будет делаться на параметр, а не на поле экземпляра. Доступ к полю экземпляра осуществляется с помощью выражения this.house.
this — обозначает неявный параметр, т.е. конструируемый объект.

public Building(String street, int house)
<
this.street = street;
this.house = house;
>

Вызов одного конструктора из другого

this обозначает неявный параметр метода. Однако у этого слова имеется еще одно значение.
Если первый оператор конструктора имеет вид this( … ), то вызывается другой конструктор этого же класса.

Блоки инициализации

Поле можно инициализировать следующими способами

Однако, есть еще и третий механизм — блок инициализации. Такой блок выполняется каждый раз, когда создается объект данного класса.

class Building
<
private static int nextId;
private int id;

Блок инициализации выполняется первым, вслед за ним — тело конструктора. Этот механизм обычно не применяется.

Действия, происходящие при вызове конструктора

Если для инициализации статических полей класса требуется сложный код, то удобнее использовать статический блок инициализации. Для этого необходимо разместить код в блоке инициализации и пометить его ключевым словом static.

// Статический блок инициализации
static
<
Random generator = new Random();
nextId = generator.nextInt(10000);
>

Статическая инициализация выполняется в том случае, если класс загружается впервые. Аналогично полям экземпляра, статические поля принимают значения 0, false и null.

Уничтожение объектов и метод finalize()

Так как некоторые объекты используют кроме памяти и другие ресурсы, например файлы или другие объекты, которые обращаются к системным ресурсам. Таким образом в данном случае очень важно, чтобы ресурсы освобождались вовремя. Для этого в любой класс можно ввести метод finalize(), который будет вызван перед тем, как система сборки мусора уничтожит объект.
Однако, если требуется возобновить ресурсы и сразу использовать их повторно, нельзя полагаться только на метод finalize(), так как неизвестно когда именно этот метод будет вызван.
Если ресурс должен быть освобожден сразу после его использования, то придется написать соответствующий код самому. Для этого следует предоставить метод close(), который занимается очисткой памяти. Его необходимо вызывать, когда какой-либо объект больше не нужен.

Пакеты

Java позволяет объединять классы в пакеты.
Например, java.lang, java.util являются пакетами.
Пакеты необходимы для того, чтобы обеспечить однозначность имен классов. Например, если в программе будут использованы два класса с одинаковыми именами, но они будут находиться в разных пакетах, то конфликт имен не возникнет.
Для обеспечение однозначности имени пакета используют доменное имя компании, написанно в обратном порядке. В составе пакета можно создавать подпакеты.

Например, в пакете ru.virand можно создать подпакет ru.virand.android
Подпакеты необходимы для гарантирования однозначности имен. С точки зрения компилятора пакет и его подпакет вообще никак не связаны друг с другом.

Импорт классов

В классе могут использоваться все классы из собственного пакета и все открытые классы из других пакетов. Доступ к классам из других пакетов можно получить двумя способами:

Статический импорт

import static java.lang.System.*;

Дана форма записи позволяет импортировать не только классы, но и статические методы и поля.
Это позволяет использовать статические методы и поля, определенные в классе System, не указывая имени класса:

out.println(«Hello, this is VIRAND 🙂 «); // С обычным import пришлось бы писать System.out
exit(0); // С обычным import пришлось бы писать System.exit

Ввод классов в пакеты

Для того, чтобы ввести класс в пакет, необходимо указать имя пакета в начале исходного файла перед определением класса.
Например:

public class MathGenerator
<
>

Если оператор package в исходном файле не указан, то классы, описанные в этом файле, вводятся в пакет по умолчанию, у которого нет имени.

Пакеты необходимо размещать в подкаталоге, путь к которому соотвтетсвует полному имени пакета: ru/virand/android

javac ru/virand/Payment.java
java ru.virand.Payment

Область действия пакетов

Открытые компоненты public могут использоваться любым классом.

Закрытые компоненты private могут использоваться только тем классом, в котором они были определены.

Если ни один из модификаторов доступа не указан, то компонент программы (метод, переменная или класс) доступен всем методам в том же самом пакете.

Переменные должны быть явно обозначены как private, иначе их область действия будет по умолчанию расширена до пределов пакета, а это нарушает принцип инкапсуляции.

Однако разработчики пакета java.awt нарушили этот принцип.

public class Window extends Container
<
String warningString;
>

Как видим у warningString отсутствует модификатор доступа private. Значит методы всех классов из java.awt могут обратиться к ней и изменить ее.

Путь к классам

Классы хранятся в подкаталогах файловой системы. Путь к классу должен совпадать с именем пакета.

Также можно установить переменную окружения CLASSPATH

export CLASSPATH=/home/user/classdir. /home/user/archives/archive.jar

Документирующие комментарии

Утилита javadoc — составляет документацию в формате HTML.

javadoc извлекает сведения о следующих компонентах программы:

Комментарии к методам

Документироват нужно лиш открытые поля. Они как парвило являются статическими константами.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *