Лекции (989962), страница 52
Текст из файла (страница 52)
Блоки{ } используются в программах на Java для обозначения начала и конца любой конструкции или участкакода (например, конструкции IF..ELSE, цикла FOR и т.д.). Каждый оператор программы на Java внутрискобок { }, т.е. внутри описания класса или метода должна заканчиваться на точку с запятой ";".Конструкция /* */ означает начало и конец комментариев. Комментарии могут добавляться и при помощисимволов // , которые означают, что, начиная с этого места и до конца строки, идет комментарий.Необходимо также помнить, что в Java различаются маленькие и большие буквы, так что MyPlan – это не тоже самое, что и myPlan.Значение модификаторов доступа класса приведено ниже:ЗначениеОписаниене указано Класс доступен только для объектов, находящихся в том же пакете.publicКласс доступен для всех объектов.
Класс public должен обязательно содержаться в файле,имеющем такое же название, что и имя класса.Спецификаторы класса могут быть следующими:ЗначениеОписаниеfinalЗапрещено создание подклассов, на основании этого класса. Используется по соображениямбезопасности, чтобы, например, нельзя было подменить менеджер безопасности, создав на егооснове собственный объект и переопределив методы объекта.abstractАбстрактный класс (хотя бы один метод объявлен, но не описан).* Спецификаторы final и abstract несовместимы, т.е. класс не может быть одновременно final и abstract.Описание класса – это просто описание свойств и методов объекта.
Для того, чтобы объектом можно былопользоваться, необходимо создать экземпляр класса, т.е. создать объект, на основании имеющегося описания. Об этом будет сказано ниже, а сейчас рассмотрим, как описываются свойства и методы класса.8.2. Типы данных, свойства класса, модификаторы доступа свойств и методов, массивы.В Java используются следующие типы данных:ТипОписаниеbooleanbyteshortcharintlongfloatdoubleИмеет значения true или false (ИСТИНА или ЛОЖЬ).8-бит целое число со знаком в диапазоне от -128 до 12716-бит целое число со знаком в диапазоне от –32 768 до 32 76716-бит Unicode-символы или цифровые значения от 0 до 65535.32-бит целое число со знаком в диапазоне от –2 147 483 648 до 2 147 483 64764-бит целое число в диапазоне от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807,причем такая точность сохраняется на любом компьютере, независимо от платформы.32-бит число с плавающей точкой обычной точности (≈±1039)64-бит число с плавающей точкой двойной точности (≈±10317 )StringСтроковая константа.
После объявления строки ее содержимое нельзя изменять.StringBufferСтроковый буфер. Позволяет изменять содержимое строки.* Внимание! Регистр символов ВАЖЕН. Неверно: "Int", "string". Верно: "int", "String". Ляхевич А.Г., 2000 - 2002 годОписание свойства (переменной) происходит следующим образом:Синтаксис:модификатор_доступа спецификаторы тип_данных имя_свойства = первоначальное_значение ;Примеры:1) public int primer = 100;// Создается public свойство с именем primer, типа int, и значением 100.2) private static byte primer2, primer3, primer4; // Описаны три свойства, типа byte.Модификаторы доступа свойства совпадают с модификаторами доступа методов и означаютследующее (версия языка Java2):В рамках одного пакетаИз других пакетовМодификатордоступанаследованиедоступнаследованиедоступне указандаданетнетpublicдадададаprotectedдададанетprivateнетнетнетнетЗдесь "наследование" означает возможность порождать от этого класса другие классы, наследуя егосвойства и методы (в порожденных классах их не надо заново описывать), а "доступ" означает возможностьсоздавать экземпляр класса, на основании этого класса.Одновременно с модификаторами доступа, возможно использование спецификаторов свойств:ЗначениеОписаниеfinalЗадает константу (значение переменной не меняется в процессе выполнения программы).Первоначальные значения всех свойств final необходимо определить при их объявлении:final int Primer = 5;staticМодификатор static делает свойство (переменную) класса статическим.
Статическое свойство –это свойство, принадлежащее не экземплярам класса, а самому классу. При создании экземпляров класса, каждый экземпляр получает свою "независимую копию" всех не статических свойстви методов. В разных экземплярах класса, не статические свойства и методы могут иметь разныезначения. Статические свойства и методы принадлежат не экземплярам класса, а самому классу,поэтому, при создании экземпляров класса, экземпляры не получают "копии" статическихсвойств и методов, а, следовательно, значения статических свойств будут одинаковы для всехэкземпляров класса. Доступ к статическим свойствам происходит либо через имя экземпляровкласса (изменение статического свойства в любом экземпляре класса приведет к его синхронному изменению для остальных экземпляров класса), либо через имя самого класса (можнополучить доступ к статическим свойствам, не создавая ни одного экземпляра класса).
Пояснимсказанное на примере. Пусть существует класс "Лифт", в котором описаны два свойства:"напряжение" и "этаж", причем свойство "напряжение" имеет модификатор static. Пусть наосновании класса "Лифт", создано два экземпляра класса (два объекта): "Левый_лифт" и"Правый_лифт". Теперь, если перерубить силовой кабель, то оба лифта будут одновременнообесточены, но остановятся на разных этажах: Лифт.напряжение = 0, Левый_лифт.напряжение= 0, Правый_лифт.напряжение = 0 – общее статическое свойство для всех лифтов, однакосвойства Левый_лифт.этаж и Правый_лифт.этаж будут различаться.* Переменная может быть одновременно static и final.Свойство может быть описано, как на уровне класса (глобальная переменная), так и на уровне метода.Свойство уровня класса описывается вне тела методов и существует, пока существует экземпляр класса. Всеметоды класса могут обращаться к такому свойству.
Свойство уровня метода описывается внутри самогометода и существует только пока выполняется метод. Обращаться к нему из других методов нельзя. Нижеприведен пример, в котором свойство bigBrother описано на уровне класса, а свойство smallBrother описанона уровне метода, с именем Metod. Пример:Class Primer {long bigBrother;// Свойство описано на уровне классаvoid Metod ( ) {short smallBrother;/* Свойство описано на уровне метода */ } }Массивы:Индексация в массиве начинается с 0. Индекс имеет тип "int". Таким образом, команда Massiv [ 3 ] [ 3 ] = 4;присваивает значение элементу массива, находящемся в 4-ой строке и 4-ом столбце.Объявление массива с заданием первоначальных значений:Синтаксис: модификатор_доступа тип_данных имя_массива [ ] = {значение1, значение2, значениеN};Пример:int Massiv [ ] = {123,17,29,15 };// одномерный массив Ляхевич А.Г., 2000 - 2002 годpublic long Massiv [ ] [ ] = { {123,17,29,15 }, {17, 12, 3} }; // двумерный массивОбъявление массива, с последующим его созданием:Синтаксис: модификатор_доступа тип_данных имя_массива [ ];имя_массива = new тип_данных [ число_элементов ];Пример:private int Massiv [ ];// одномерный массивMassiv = new int [ 4 ];long Massiv [ ] [ ];// двумерный массивMassiv = new long [ 4 ] [ 3 ];Объявление массива, одновременно с его созданием:Синтаксис: модификатор_доступа тип_данных имя_массива [ ] = new тип_данных [ число_элементов ];Пример:int Massiv [ ] = new int [ 4 ];// одномерный массивprivate protected long Massiv [ ] [ ] = new long [ 4 ] [ 3 ];// двумерный массив8.3.
Методы класса, методы доступа в классах, конструкторы и деструкторы класса.Объявление методаСинтаксис:модификатор_доступа спецификаторы тип_возвращаемого_значения имя__метода (параметры) throwsсписок_исключений_которые_вызывает_класс{ /* операторы */return возращаемое_значение ; }Пример:1) public static long Metod (int x, byte y) throws IOException { /*операторы*/ return 5; }2) void Metod ( ) { /*операторы*/ return; /*операторы*/}* Во втором примере тип_возвращаемого_значения = void. Тип void – это "пустой" тип, что означает, чтометод не возвращает значений. При указании типа void, ключевое слово return указывается без параметров(или вообще не используется) и просто означает преждевременный выход из метода.Модификаторы доступа методов (нет, public, protected, private) – см.
модификаторы доступа свойств.Спецификаторы методов:ЗначениеОписаниеstaticЗадает статический метод. Подробнее объяснения см. в спецификаторе static для свойств.abstractАбстрактные методы просто объявляются, но не реализуются в данном классе. Тело методадолжно быть описано в подклассах текущего класса. Ни static-методы, ни конструкторыклассов не могут объявляться как abstract. Более того, абстрактные методы нельзя определятькак final, поскольку в этом случае их нельзя будет переопределить.finalЛюбые подклассы текущего класса не смогут переопределить данный метод (о переопределении методов см. ниже).
Эта возможность увеличивает защищенность ваших классов игарантирует, что операции, определенные в данном методе, никак нельзя будет изменить.nativeМетоды, написанные не на языке Java, а на других языках программирования. Обычно такиеметоды пишутся на C++ для ускорения работы критических участков программы. Дляопределения этих методов нужно поместить спецификатор native в начале объявления методаи вместо тела метода поставить точку с запятой. Пример: native void toggleStatus();synchronized Позволяет защитить данные, которые могут быть разрушены в том случае, если два метода,из разных потоков, пытаются одновременно обратиться к одним и тем же данным. Syncronized-метод не может начать работать со свойствами, пока их не освободит другой метод.Методы доступа в классах.Свойства класса можно создавать, описывая на уровне класса, public - переменные.