Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
33
Добавлен:
27.03.2015
Размер:
99.84 Кб
Скачать

Элементы объявления класса Поле (1)

[ accessSpecifier ] dataType variableName [= initialValue ] …;

accessSpecifier – ни одного, одно или несколько ключевых слов (рекомендуется указывать их именно в этом порядке):

[

private – поле, доступ к которому возможен только из методов этого класса;

нет (package: пакетный доступ) – поле, доступ к которому возможен из методов класса-наследника, объявленного в этом же пакете;

protected – поле, доступ к которому возможен из методов этого класса и его наследников, не обязательно прямых;

public – общедоступное поле;

]

static – это поле принадлежит классу в целом, а не экземпляру;

final – значение этого поля не может быть изменено (поле является константой);

transient – это поле не должно сериализоваться (сохраняться во внешней памяти в составе объекта);

volatile – это поле предназначено для организации взаимодействия несинхронизируеых потоков и операции с ним не подлежат какой-бы то ни было оптимизации (используется крайне редко).

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

Элементы объявления класса Поле (2)

[ accessSpecifier ] dataType variableName [= initialValue ] [ , … ];

dataType – имя примитивного или объектного типа данных, возможно – сопровождаемое модификатором массива: размерностью (размерностями) в квадратных скобках.

Если часть [= initialValue ] отсутствует, то:

-переменные типа boolean инициализируются значением false;

-остальные численные переменные инициализируются значением 0 (нуль);

-все объектные переменные инициализируются значением null.

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

Элементы объявления класса Поле (3) Примеры

public int eventCount;

//значение по умолчанию 0

private boolean hideFlag = false; //и по умолчанию false

protected char currentSymbol;

//по умолчанию \u0000

private byte шагСетки = 1;

 

static final float PACKAGE_VERSION = 2.01;

short[ ] arrayOfArrays[ ];

//эквивалентно short arrayOfArrays[ ][ ];

private transient float exchangeRate$; long resultNumber = -1;

protected volatile int семафорПотока = 0;

private double[ ] startCoordinates = { 1.0, 2.0, 3.0 }; public String className; //по умолчанию - null

Не рекомендуется объявлять переменные так: int i,a,j,x,k=0,l,m,n;

Элементы объявления класса Конструктор (1)

[ accessSpecifier ] [ typeParameters ] ClassName ( [ argumentsList ] ) [ throwsList ] {

operatorsList

}

accessSpecifier – одно (или ни одного) из ключевых слов: public, protected, private.

typeParameters – список имен типов, заключенных в угловые скобки, информация о которых должна использоваться при компиляции конструктора (эти элементы Java-generics будут подробно рассматриваться позже).

argumentsList – список типов и имен аргументов, используемых конструктором при создании экземпляра класса.

throwsList – список исключений, бросаемых конструктором. Исключения

– единственный способ не создавать объект при выполнении new.

operatorsList – последовательность операторов, образующая тело конструктора.

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

Элементы объявления класса Конструктор (2)

Конструктор имеется в байт-коде любого класса. Если ни одного

конструктора нет в исходном тексте, компилятор Java сам создаст конструктор по умолчанию (default constructor), который не делает ничего, кроме вызова конструктора суперкласса. Однако, если явно определен хотя бы один конструктор класса, то конструктор без аргументов неявно не создается, если нужно – его придется определять явно.

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

Конструктор не возвращает никакого значения.

Конструктор не является методом, он даже не считается членом класса. Поэтому его нельзя наследовать или переопределить в подклассе.

Элементы объявления класса Конструктор (3)

Тело конструктора может начинаться:

с вызова одного из конструкторов суперкласса, для этого записывается слово super() с параметрами в скобках, если они

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

с вызова другого конструктора того же класса, для этого записывается слово this() с параметрами в скобках, если они нужны (не должна образовываться циклическая цепочка вызовов конструкторов, при обнаружении таковой компилятор выдаст сообщение об ошибке);

внутри тела конструктора (после первой строки) вызовы конструктора суперкласса или другого конструктора этого же класса не допускаются (компилятор выдаст ошибку);

Элементы объявления класса Метод (1)

[ accessSpecifier ] [ typeParameters ] retValueDataType methodName ( [ argumentsList ] ) [ throwsList ] { operatorsList

}

accessSpecifier – ни одного, одно или несколько ключевых слов: [ public, protected, private, ] [ abstract, final, ] static, synchronized, native, strictfp .

typeParameters – список имен типов, заключенных в угловые скобки, информация о которых должна использоваться при компиляции метода (эти элементы Java-generics будут подробно рассматриваться позже).

Элементы объявления класса Метод (2)

retValueDataType – тип значения, возвращаемого методом, это может быть:

ключевое слово void,

один из примитивных типов данных (boolean, char, byte, short, int, long, float, double),

какой-либо ссылочный тип (имя класса),

массив значений примитивного либо ссылочного типа.

argumentsList – список типов и имен аргументов, обрабатываемых методом (начиная с Java5 метод может обрабатывать заранее неизвестное количество аргументов, специальный синтаксис таких списков будет рассмотрен позже). Если этот список пуст, то в отличие от C/C++ ключевое слово void не употребляется, пишется просто ( ) . Аргументы всегда передаются по значению. Перед типом аргумента может быть записано ключевое слово final, означающее запрет изменения значения этого аргумента в теле метода.

throwsList – список исключений, возбуждаемых (бросаемых) методом; исключения и их обработка будут рассматриваться отдельно.

operatorsList – последовательность операторов, образующая тело метода.

Элементы объявления класса Метод (3)

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

имени метода;

количества, порядка следования, и типов аргументов.

Имена аргументов и тип значения, возвращаемого методом, не входят в сигнатуру.

Контрактом метода называется сигнатура совместно с типом возвращаемого значения.

Класс может иметь несколько разных методов с одним и тем же именем (так называемая перегрузка или overloading методов).

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

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

Создание и инициализация объектов (1)

Любой объект (переменная ссылочного типа) объявляется точно так же, как и переменная примитивного типа:

<тип> <идентификатор> [ = начальное значение ];

Например:

String fileName; //начальное значение = null

Объекты создаются путем применения операции new (за исключением строк и объектов типа java.lang.Class, которые могут создаваться по другому):

String helloWorld = new String("Hello World");

String helloAgain = "HelloWorld";

//эквивалентно, но короче

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

Integer stackValue; Stack<Integer> myStack;

myStack = new Stack<Integer>( ); stackValue = new Integer( 13 ); myStack.push( stackValue );

myStack.push( new Integer( 127 ) ); //в Java6 и позже: myStack.push( 5 );

Соседние файлы в папке Презентации по Java