28
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Алгоритмические средства Java

Основы программирования на языке Java

  • Upload
    cardea

  • View
    80

  • Download
    0

Embed Size (px)

DESCRIPTION

Основы программирования на языке Java. Алгоритмические средства Java. Лексическая структура программы. Текст единицы компиляции состоит из символов Unicode (используется версия 2.1 www.unicode.org ) Первичная трансляция (обработка) исходного включает следующие этапы: - PowerPoint PPT Presentation

Citation preview

Page 1: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 1

Основы программирования на языке Java

Алгоритмические средства Java

Page 2: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 2

Лексическая структура программы Текст единицы компиляции состоит из символов

Unicode (используется версия 2.1 www.unicode.org) Первичная трансляция (обработка) исходного

включает следующие этапы:1) расширение escape-последовательностей вида \uXXXX, где

X – шестнадцатеричные символы

2) трансляция потока полученного на шаге 1 в последовательность входных символов и терминаторов строки (LF, CR)

3) трансляция потока полученного на шаге 2 в последовательность входных элементов, которая, после удаления комментариев и пробелов состоит из лексем и терминальных символов грамматики

Page 3: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 3

Escape последовательности unicode UnicodeInputCharacter:

UnicodeEscape RawInputCharacter

UnicodeEscape: \ UnicodeMarker HexDigit HexDigit HexDigit HexDigit

UnicodeMarker: u UnicodeMarker u

RawInputCharacter: any Unicode character

HexDigit: one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

Учитывается “четность” количества символов ‘\’, и номер прохода:

“\\u2297=\u2297” транслируется в “ \ u 2 2 9 7 = “

“\u005Cu005A” транслируется в “ \ u 0 0 5 A” , но не в “z”

Page 4: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 4

Специальные символыLineTerminator:

the ASCII LF character, also known as "newline" the ASCII CR character, also known as "return" the ASCII CR character followed by the ASCII LF character

InputCharacter: UnicodeInputCharacter but not CR or LF

WhiteSpace: the ASCII SP character, also known as "space" the ASCII HT character, also known as "horizontal tab"the ASCII FF character, also known as "form feed" LineTerminator

Page 5: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 5

Последовательность входных элементовInput:

InputElementsopt Subopt

InputElements: InputElement InputElements InputElement

InputElement: WhiteSpace Comment Token

Token: Identifier Keyword Literal Separator Operator

Sub: the ASCII SUB character, also known as "control-Z"

Page 6: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 6

Комментарии в тексте программы

/** многострочный документирующий комментарий java */

/* традиционный многострочный комментарий в стиле C */

// традиционный комментарий в стиле C++ Комментарии не могут быть вложенными. символы /* и */ не имеют специального значения в

комментариях, начинающихся с символов //. символы // не имеют специального значения в

комментариях, начинающихся с символов /* или /**.

/* Данный комментарий /* // /** оканчивается здесь: */

Page 7: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 7

Идентификаторы Identifier:

IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral

IdentifierChars: JavaLetter IdentifierChars JavaLetterOrDigit

JavaLetter: any Unicode character that is a Java letter

JavaLetterOrDigit: any Unicode character that is a Java letter-or-digit

Символы Java включают в себя ASCII символы A-Z (\u0041-\u005A), a-z (\u0061-\u007A), _ (\u005F), $ (\u0024)

Цифры Java включают цифры ASCII 0-9 (\u0030-\u0039)

Page 8: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 8

Идентификаторы Два идентификатора совпадают только если совпадают

Unicode коды всех символов из которых они состоят Символы в идентификаторе могут иметь одинаковое

начертание, но различаться по кодам: LATIN CAPITAL LETTER A (A, \u0041) и GREEK CAPITAL

LETTER ALPHA (A, \u0391) LATIN SMALL LETTER A (a, \u0061), and CYRILLIC SMALL

LETTER A (a, \u0430)

Примеры допустимых идентификаторов:

String i3 MAX_VALUE isLetterOrDigit

Page 9: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 9

Ключевые словаKeyword: one of

abstract default if private this boolean do implements protected throw break double import publicthrows byte else instanceof returntransient case extends int short

try

catch final interface static void char finally long strictfp volatile class float native super while

const for new switch continue goto package synchronized assert enumСлова goto и const зарезервированы.Ключевое слово assert введено в JDK 1.4, enum – в JDK 1.5 true, false и null технически являются литерными константами

Page 10: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 10

Литерные константы (literals)Literal:

IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral NullLiteral

литерные константы типа int (диапазон от –231 до 231): 0 2 0372 0xDadaCafe 1996 0x00FF00FF

литерные константы типа long (диапазон от –263 до 263): 0l 0777L 0x100000000L 2147483648L 0xC0B0L

Page 11: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 11

Литерные константылитерные константы типа float:

1e1f 2.f .3f 0f 3.14f 6.022137e+23f литерные константы типа double: 1e1 2. .3 0.0 3.14 1e-9d 1e137 символьные литерные константы:

'a' '%' '\t' '\\' '\'' '\u03a9' '\uFFFF' '\177' ' ' для LF и CR необходимо использовать ‘\n’ и ‘\r’

строковые литерные константы:"" // пустая строка "\"" // строка содержащая символ " "This is a string" // строка из 16 символов "This is a " + // константное выражение, сформированное"two-line string" // из двух строковых литералов

Page 12: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 12

Строковые литералы и объекты Stringpackage test;class Test { public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " "); System.out.print((Other.hello == hello) + " "); System.out.print((other.Other.hello == hello) + " "); System.out.print((hello == ("Hel"+"lo")) + " "); System.out.print((hello == ("Hel"+lo)) + " "); System.out.println(hello ==

("Hel"+lo).intern()); } }class Other { static final String hello = "Hello"; }

package other;

public class Other { public final static String hello = "Hello"; }

Page 13: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 13

Разделители и операторыSeparator: one of

( ) { } [ ] ; , .Operator: one of

= > < ! ~ ? : ==<= >= != && || ++ -- + -

*/ & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>=

n>>>s - right-shift s bit positions with zero-extension:

if (n >= 0) n>>>s == n>>s

if (n < 0) n>>>s == (n>>s)+(s<<~s),

причем ~s = 31-s для int и 63-s для long

также, отметим что: “bob” + true == “bob true”

Page 14: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 14

Типы и значения выраженийType:

PrimitiveTypeReferenceType

PrimitiveType: NumericType boolean

NumericType: IntegralType FloatingPointType

IntegralType: one of byte short int long char

FloatingPointType: one of float double

ReferenceType:

ClassOrInterfaceType ArrayType

ClassOrInterfaceType: ClassType InterfaceType

ClassType: TypeName

InterfaceType: TypeName

ArrayType: Type [ ]

Page 15: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 15

Диапазоны значений

Значения интегрального типа являются целыми числами следующих диапазонов:

Для byte, от -128 до 127, включительно Для short, от -32768 до 32767, включительно Для int, от -2147483648 до 2147483647, включительно Для long, от -9223372036854775808 до

9223372036854775807, включительно Для char, от '\u0000' до '\uffff' включтельно, т.е., от 0 до

65535Для типов с плавающей точкой диапазоны значений регулируются стандартом ANSI/IEEE Standard 754-1985.Существуют специальные значения Float.NaN и Double.NaN

Page 16: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 16

Типы значений в выражениях При вычислении выражений аргументы оператора

приводятся к одному типу, при этом более простой тип приводится к более сложному путем продвижения (byte-> short -> int ->long; float -> double; int->float или double):

short c = 456; double d = 3.f / 2 + (c + 100000); Будьте осторожны при вычислениях с плавающей

точкой:

double d = 31/5 + 6 * ( 1 / 5); // d == 6.0 !!!!!!

double d = ((double)31)/5 + 6 * (1. / 5); // d == 7.4 - Ok Будьте осторожны при вычислениях близких к границам

значений с плавающей точкой (positive and negative zero, positive and negative infinity)

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

Page 17: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 17

Потеря информации при преобразованиях Сужающие преобразования происходят при

необходимости присвоения переменной более узкого типа значения выражения более широкого типа: byte в char short в byte или char char в byte или short int в byte, short, или char long в byte, short, char, или int float в byte, short, char, int, или long double в byte, short, char, int, long, или float

short s = 1000 * 100; // > 32767 result:-31072int i = ((int) (1000000000L * 5)) / 100;

Page 18: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 18

Вызов методов

пусть задан класс:public class MyClass {

public static void staticMethodName() {…}

public void methodName() {…}

}

Вызов метода класса (статического):ClassName.staticMethodName();

Вызов метода экземпляра (объекта):ClassName obj = new ClassName(); // создание объекта

obj.methodName(); // вызов метода используя ссылку

У объекта можно вызвать статический метод:obj.staticMethodName(); //вызов статического метода

Page 19: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 19

Блоки кода Блоки кода служат для группировки нескольких

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

Начало и конец блока задается разделителями { } Блоки могут содержать:

объявления и инициализаторы локальных переменных объявления локальных типов (классов и интерфейсов) выражения и операторы языка вложенные блоки

Область видимости локальных переменных ограничена пределами блока

Page 20: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 20

Блоки (грамматика)Block:

{ BlockStatementsopt }

BlockStatements: BlockStatement BlockStatements BlockStatement

BlockStatement: LocalVariableDeclarationStatement ClassDeclaration Statement

LocalVariableDeclarationStatement:

LocalVariableDeclaration ;

LocalVariableDeclaration: finalopt Type VariableDeclarators

VariableDeclarators: VariableDeclarator VariableDeclarators , VariableDeclarator

VariableDeclarator: VariableDeclaratorId VariableDeclaratorId =VariableInitializer

VariableDeclaratorId: Identifier VariableDeclaratorId [ ]

VariableInitializer: Expression ArrayInitializer

Page 21: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 21

Оператор выбора if Служит для задания альтернативных веток исполнения

кода:public static int abs (int value) {

if (value >= 0)return value; //может стоять блок { }

elsereturn –value; //может стоять блок { }

} Условное выражение в скобках всегда должно иметь тип

boolean Вложенный оператор if:if (i == 10) {

if (j < 20) a = b;if (k >100) c = d; //этот оператор ifelse a = c; //связан с этим оператором else

}else a = d; //а этот else относится к if (i == 10)

Page 22: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 22

Цепочка if-else-ifif ( условие ) оператор;else if

(условие)оператор;

else if (условие)оператор;

.

.else

оператор;

int month = 4;

String season;

if (month==12 || month ==1 || month == 2)

season = “зимний”;

else if (month >=3 && month <=5 )

season = “весенний”;

else if (month > 5 && month < 9)

season = “летний”;

else if (month > 8 && month < 12)

season = “осенний”;

else season = “неправильно заданный”;

System.out.println(“Апрель - ”+season + “месяц.”);

Page 23: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 23

Оператор выбора switch switch лучшая альтернатива if-else-if если нужна

проверка на конкретные значенияswitch ( выражение ) {

case значение1:// последовательность операторовbreak;case значение2:

//последовательность операторовbreak;…case значениеN://последовательность операторовbreak;default://последовательность операторов по умолчанию

}

Page 24: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 24

Итерационный оператор while Используется для повторения действий пока выполняется условие Может быть прерван оператором break; Может быть продолжен оператором continue;

while (условие) {//тело цикла

}//пример:

int n = 10;

while ( n > 0)

{

n--;

System.out.println(“шаг ” + n);

if (n == 5) continue;

if (n == 3) break;

}

Page 25: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 25

Итерационный оператор do - while Если нужно выполнить тело цикла хотя бы раз вне

зависимости от результата проверки условия, то можно воспользоваться конструкцией do – while:

do {//последовательность операторов

} while (условие);

Page 26: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 26

Итерационный оператор for Используется для объединения условия, инициализации

и операции над переменными цикла

for (ининциализация; условие; итерация) {//тело цикла

}//пример:

for (int i = 0; i < 10; i++)

{

System.out.println(“шаг ”+i);

}

Как и любой другой цикл, цикл for можно прервать с помощью оператора break и продолжить с помощью continue

Page 27: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 27

Использование меток Метка имеет видимость только внутри

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

глубоко вложенных цикловvoid doSomething (){first: for(int i = 0; i < 10; i++) {

second: for (int j = 0; j < 10; j++) {if( j == 5 ) break

second;if( i == 6 ) break first;

}}

}

Page 28: Основы программирования на языке  Java

Новосибирск, 2004

(С) Всеволод Рылов, все права защищены 28

Последовательность исполнения Программа выполняется последовательно оператор за

оператором (statement) Операторы могут содержать в себе другие операторы, а

также выражения Операторы могут завершаться нормально, а могут быть

прерваны: break; break labelopt; - прерывание цикла или switch continue; continue labelopt; - продолжение цикла return; return valueopt; - возврат из метода throw … - явный выброс исключения а также выброс исключения в процессе вычисления

выражения или выполнения оператора