- •Java - объектно-ориентированный язык
- •Виртуальная Java-машина.
- •Алфавит языка Java
- •Типы данных
- •Числа высокой точности
- •Переменные в Java
- •Объявление переменной
- •Область действия и время жизни переменной
- •Операции в Java
- •Арифметические операции
- •Логические операции
- •Побитовые операции
- •Операции сдвига
- •Тернарный оператор ?:
- •Оператор запятая
- •Одномерные массивы
- •Многомерные массивы
- •Функции
- •Класс Поля и методы
- •Модификаторы доступа
- •Инициализация и очистка
- •Перегрузка методов
- •Ключевое слово this
- •Вызов конструктора из конструктора
- •Использование объектов в качестве параметров
- •Ключевое слово static
- •Спецификатор final
- •Вложенные и внутренние классы
- •Сборщик «мусора»
- •Как работает сборщик мусора
- •Наследование
- •Основы наследования
- •Использование ключевого слова super
- •Использование super для вызова конструктора суперкласса
- •Использование super для доступа к скрытым членам суперкласса
- •Конструкторы при наследовании
- •Динамическая диспетчеризация методов
- •Абстрактные классы
- •Использование final с наследованием
- •Использование final для отказа от переопределения
- •Использование final для отмены наследования
- •Класс Object
- •Пакеты и интерфейсы Пакеты
- •Оператор package
- •Оператор import
- •Уровни доступа.
- •Интерфейсы
- •Оператор implements
- •Частичные реализации
- •“Множественное” наследование в Java
- •Конфликты имен при комбинировании интерфейсов
- •Расширение интерфейса
- •Группировка констант
- •Инициализирование полей в интерфейсах
- •Вложенные интерфейсы
- •Стандартный ввод/вывод
- •Чтение из стандартного ввода
- •Замена System.Out на PrintWriter
- •Первое приложение Java
- •Исключительные ситуации. Обработка исключений
- •Типы исключений
Ключевое слово static
Методы и поля, описанные в объявлении класса, становятся доступными только при создании объекта этого класса. В то же время может быть необходимо в классе иметь доступными поля и методы, независимо от того, сколько объектов создано, или созданы ли объекты этого класса вообще. Либо требуется описать метод, не ассоциируемый с объектом определенного класса (аналог глобального метода). Достигается это использованием ключевого слова static по отношению к полям и методам. Это означает, они не привязаны к определенному экземпляру объекта класса. И статический метод может быть вызван, либо обеспечен доступ к статическому полю, даже если нет объектов данного класса. Статические методы, не требующие создания объекта до их использования, не могут получить прямой доступ к не статическим полям или методам простым обращением к ним без указания имени объекта, так как они не получают ссылки this.
Поле или метод класса является статическим, если при его определении перед ним указывается ключевое слово static:
class StaticDemo {
static int n1 = 1;
int n2;
static void metod1() { StaticDemo.n1++; }
void metod2() { n2++; }
}
В этом случае даже при создании нескольких объектов StaticDemo, все они будут иметь общее поле StaticDemo.n1.
StaticDemo obj1 = new StaticDemo();
StaticDemo obj2 = new StaticDemo();
При этом obj1.n1, и obj2.n1 имеют одно и то же значение 1, так как они ссылаются на одну и ту же область памяти.
Ссылаться на статические компоненты класса можно как через объект, так и прямо через имя класса(например, StaticDemo.n1), что невозможно с не статическими членами.
Добавление атрибута static к полю класса изменяет путь его создания (одни для всего класса против не статического: один для каждого объекта). Атрибут static примененный к методу класса позволит вызывать этот метод без создания объекта.
Считается, что static методы не являются объектно-ориентированными, так как они имеют семантику глобальных функций; с помощью static метода не посылается сообщение объекту. Если в программе используется достаточно много статических методов, вероятно, нужно изменить свою стратегию.
Спецификатор final
Спецификатор final (аналогично const в С++) используется для предотвращения изменения значения переменной с которой она объявлена.Например:
final int GOD = 2008;
final char SIMVOL = 'a';
объявленные т.о. переменные не могут быть изменены. Идентификаторы соответствующие им принято набирать заглавными буквами.
Вложенные и внутренние классы
В Java имеется возможность определять один класс внутри другого. Такие классы называются вложенными. Вложенный класс имеет доступ ко всем компонентам включающего класса. Обратное утверждение не верно.
Существует два вида вложенных классов – статический и нестатический. При объявлении статического класса используется ключевое слово static. Этот класс не может прямо обращаться к членам включающего класса, а должен это делать через объект. В связи с этим используется редко.
Другой тип вложенного класса это внутренний нестатический класс. Этот класс находится полностью в области видимости включающего класса и может обращаться ко всем его компонентам. Приводимая ниже программа демонстрирует этот тип вложенности.
class Ext // внешний класс Ext
{
int a=4; // объявление и явная инициализация
public int b; // объявление и инициализация 0
void fun_Ext()
{ In ob= new In();
ob.fun_In();
System.out.println("vneshnyi class " + a+ b);
}
class In // вложенный класс In
{
int aa;
public int bb;
void fun_In()
{ System.out.println("vlogenyi class "+ a+ b);
}
}
}
public class start
{
public static void main(String[] args)
{ Ext ob=new Ext();
ob.fun_Ext();
}
}
Класс In известен только в пределах видимости класса Ext, следовательно попытка создать объект класса In, например, в функции main приведет к ошибке.
Вложенные классы могут быть объявлены не только в области влючающего класса, но и так же в пределах любого его блока – методы, циклы и т.д.
Вложенные классы наиболее полезны при обработке событий в апплетах.
Вложенные классы так же могут быть анонимными, не имеющими имен.