Некоторые особенности логических операторов.


Конкатенация.

Беззнаковый сдвиг.

Операторы.

Подавляющее большинство операторов в языках C и Java полностью совпадают, однако некоторые операторы в Java имеют специальное назначение.

Если в языке C результат действия оператора << строго определён, то этого нельзя сказать об операторе >>. В одних версиях языка C операция >> трактуется как беззна­ковый сдвиг, в других — как сдвиг числа со знаком. В первом случае при сдвиге впра­во старшие разряды заполняются нулями, во втором случае в них записывается значе­ние знакового разряда.

В Java данная неоднозначность устранена. При выполнении оператора >> учитыва­ется знак числа. Для обозначения беззнакового сдвига вправо введен новый оператор >>>. Он выполняет сдвиг вправо на указанное число разрядов; освободившиеся стар­шие разряды заполняются нулями.

byte i = -2;

i = i >>> 3;

Кроме оператора >>>, в Java определён оператор >>>=. Так, команду сдвига, приведенную в предыдущем примере, можно запи­сать следующим образом:

i >>>= 3;

В языке Java широко используются строковые значения. Не удивительно, что для упрощения работы со строками в Java поддерживается операция конкатенации. Для обозначения данной операции используется оператор +.

Как же отличить конкатенацию от обычного сложения? Если операция + выполняет­ся над числами, данный оператор обозначает сложение. Если же оператором + связаны два объекта String, это означает, что должна быть выполнена конкатенация строк.

Оператор & выполняет побитовое логиче­ское умножение, а оператор && — ту же операцию над логическими значениями.

Благодаря тому что в языке Java был реализован тип данных boolean, появилась возможность расширить набор логических операций. В логических выражениях может быть использован как односимвольный (&), так и двухсимвольный оператор умножения (&&). Оператор & реализует вычисления по полной схеме, а && — по сокращённой схеме. Рассмотрим простой пример.

if ((a != 0) && (b++ < 10))

{

}

Очевидно, что, если a равно 0 и всё выражение равно false, вычислять второе ло­гическое значение не имеет смысла. Однако в этом случае инкрементирование пере­менной b не будет выполнено. В языке C работа программ, включающих подобные выражения, зависела от реализации компилятора. В Java появилась возможность ис­ключить неоднозначность.

Оператор && указывает на то, что вычисление значения логического выражения может производиться по сокращённой схеме. В нашем примере это означает, что если переменная a равна 0, то второе выражение вычисляться не будет.

При использовании оператора & вычисления выполняются по полной схеме.

В этом случае выражение, находящееся справа от оператора &, вычисляется неза­висимо от значения переменной a.

Очевидно, что все вышесказанное справедливо не только для &, но и для | и дру­гих логических операторов.

Классы.

Функции, входящие в состав класса (в C++ их принято называть функциями-членами), в языке Java называются методами.

Переменные, входящие в состав класса, называют свойствами, или же более при­вычным термином переменные.

В языке Java дочерний класс принято называть подклассом, я родительский класс — суперклассом.

Иногда суперклассами называют все классы, находящиеся в иерархии выше данного класса. Чтобы различать «предков» различного уровня, класс, из которого порождён данный класс, иногда называют непосредственным суперклассом.

 

 


Говоря о наследовании, следует упомянуть одну важную деталь, отличающую Java от C: в языке Java для каждого класса существует лишь один непосредственный су­перкласс. Если при определении класса суперкласс не указан, считается, что данный класс является подклассом класса Object. Таким образом, класс Object является супер­классом для всех классов, используемых в любой Java-программе.

Объявление класса.

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

[модификаторы] class имя_класса [extends имя_суперкласса] [implements имя_интерфейса]

{

тело_класса

}

Рассмотрим подробнее составные части данного выражения.

Единственные компоненты, которые обязательно должны присутствовать в объяв­лении класса, — это ключевое слово class и имя класса. По соглашениям Java, имя класса должно начинаться с прописной буквы. Со строчных букв начинаются имена методов и переменных.

Ключевому слову class может предшествовать один или несколько модификато­ров. Допустимые значения модификаторов перечислены ниже

· abstract — определяет абстрактный класс, т. е. класс, экземпляр которого не может быть создан. Чтобы обеспечить доступ к переменным и методам, содер­жащимся в таком классе, надо объявить его подкласс, определить недостающие методы и создать экземпляр подкласса.

· final — указывает на то, что подкласс объявляемого класса не может быть соз­дан. Разрабатывая свои первые программы на языке Java, вы вряд ли будете ис­пользовать данный модификатор, однако знать о его существовании необходи­мо. Очевидно, что в объявлении класса не могут одновременно присутст­вовать модификаторы abstract и final.

· public — сообщает, что объявляемый класс должен быть доступен за пределами текущего пакета. Следует заметить, что в Java действует следующее правило: имя файла, содержащего public-класс, должно совпадать с именем этого класса. Другими словами, выражение public class MyApplet может присутствовать лишь в файле с именем MyApplet.java.

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

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