Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Алгоритмические средства Java."— Presentation transcript:

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

2 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 2 Лексическая структура программы  Текст единицы компиляции состоит из символов Unicode (используется версия 2.1 www.unicode.org)  Первичная трансляция (обработка) исходного включает следующие этапы: 1)расширение escape-последовательностей вида \uXXXX, где X – шестнадцатеричные символы 2)трансляция потока полученного на шаге 1 в последовательность входных символов и терминаторов строки (LF, CR) 3)трансляция потока полученного на шаге 2 в последовательность входных элементов, которая, после удаления комментариев и пробелов состоит из лексем и терминальных символов грамматики

3 Новосибирск, 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”

4 Новосибирск, 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

5 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 5 Последовательность входных элементов Input: InputElements opt Sub opt InputElements: InputElement InputElements InputElement InputElement: WhiteSpace Comment Token Token: Identifier Keyword Literal Separator Operator Sub: the ASCII SUB character, also known as "control-Z"

6 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 6 Комментарии в тексте программы /** многострочный документирующий комментарий java */ /* традиционный многострочный комментарий в стиле C */ // традиционный комментарий в стиле C++  Комментарии не могут быть вложенными.  символы /* и */ не имеют специального значения в комментариях, начинающихся с символов //.  символы // не имеют специального значения в комментариях, начинающихся с символов /* или /**. /* Данный комментарий /* // /** оканчивается здесь: */

7 Новосибирск, 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)

8 Новосибирск, 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

9 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 9 Ключевые слова Keyword: one of abstractdefaultifprivatethis boolean doimplementsprotectedthrow breakdouble importpublicthrows byteelseinstanceofreturntransient caseextendsintshort try catchfinalinterfacestaticvoid char finally longstrictfpvolatile class float native super while const for new switch continue goto package synchronizedassertenum Слова goto и const зарезервированы. Ключевое слово assert введено в JDK 1.4, enum – в JDK 1.5 true, false и null технически являются литерными константами

10 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 10 Литерные константы (literals) Literal: IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral NullLiteral литерные константы типа int (диапазон от –2 31 до 2 31 ): 0 2 0372 0xDadaCafe 1996 0x00FF00FF литерные константы типа long (диапазон от –2 63 до 2 63 ): 0l 0777L 0x100000000L 2147483648L 0xC0B0L

11 Новосибирск, 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" // из двух строковых литералов

12 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 12 Строковые литералы и объекты String package 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"; }

13 Новосибирск, 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 >>s == (n>>s)+(s<<~s), причем ~s = 31-s для int и 63-s для long также, отметим что: “bob” + true == “bob true”

14 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 14 Типы и значения выражений Type: PrimitiveType ReferenceType 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 [ ]

15 Новосибирск, 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

16 Новосибирск, 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.

17 Новосибирск, 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:-31072 int i = ((int) (1000000000L * 5)) / 100;

18 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 18 Вызов методов пусть задан класс: public class MyClass { public static void staticMethodName() {…} public void methodName() {…} }  Вызов метода класса (статического): ClassName.staticMethodName();  Вызов метода экземпляра (объекта): ClassName obj = new ClassName(); // создание объекта obj.methodName(); // вызов метода используя ссылку  У объекта можно вызвать статический метод: obj.staticMethodName(); //вызов статического метода

19 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 19 Блоки кода  Блоки кода служат для группировки нескольких операторов (statement) и используются для задания тел классов, методов, блоков статической и динамической инициализации, областей перехвата исключений, блоков синхронизации, а также для задания частей сложных операторов (ветвления, выбора, цикла)  Начало и конец блока задается разделителями { }  Блоки могут содержать:  объявления и инициализаторы локальных переменных  объявления локальных типов (классов и интерфейсов)  выражения и операторы языка  вложенные блоки  Область видимости локальных переменных ограничена пределами блока

20 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 20 Блоки (грамматика) Block: { BlockStatements opt } BlockStatements: BlockStatement BlockStatements BlockStatement BlockStatement: LocalVariableDeclarationStatement ClassDeclaration Statement LocalVariableDeclarationStatement: LocalVariableDeclaration ; LocalVariableDeclaration: final opt Type VariableDeclarators VariableDeclarators: VariableDeclarator VariableDeclarators, VariableDeclarator VariableDeclarator: VariableDeclaratorId VariableDeclaratorId =VariableInitializer VariableDeclaratorId: Identifier VariableDeclaratorId [ ] VariableInitializer: Expression ArrayInitializer

21 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 21 Оператор выбора if  Служит для задания альтернативных веток исполнения кода: public static int abs (int value) { if (value >= 0) return value; //может стоять блок { } else return –value; //может стоять блок { } }  Условное выражение в скобках всегда должно иметь тип boolean  Вложенный оператор if: if (i == 10) { if (j < 20) a = b; if (k >100) c = d; //этот оператор if else a = c; //связан с этим оператором else } else a = d; //а этот else относится к if (i == 10)

22 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 22 Цепочка if-else-if if ( условие ) оператор; 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 + “месяц.”);

23 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 23 Оператор выбора switch  switch лучшая альтернатива if-else-if если нужна проверка на конкретные значения switch ( выражение ) { case значение1: // последовательность операторов break; case значение2: //последовательность операторов break; … case значениеN: //последовательность операторов break; default: //последовательность операторов по умолчанию }

24 Новосибирск, 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; }

25 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 25 Итерационный оператор do - while  Если нужно выполнить тело цикла хотя бы раз вне зависимости от результата проверки условия, то можно воспользоваться конструкцией do – while: do { //последовательность операторов } while (условие);

26 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 26 Итерационный оператор for  Используется для объединения условия, инициализации и операции над переменными цикла for (ининциализация; условие; итерация) { //тело цикла } //пример: for (int i = 0; i < 10; i++) { System.out.println(“шаг ”+i); }  Как и любой другой цикл, цикл for можно прервать с помощью оператора break и продолжить с помощью continue

27 Новосибирск, 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; }

28 Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 28 Последовательность исполнения  Программа выполняется последовательно оператор за оператором (statement)  Операторы могут содержать в себе другие операторы, а также выражения  Операторы могут завершаться нормально, а могут быть прерваны:  break; break label opt ;- прерывание цикла или switch  continue; continue label opt ; - продолжение цикла  return; return value opt ; - возврат из метода  throw … - явный выброс исключения  а также выброс исключения в процессе вычисления выражения или выполнения оператора


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

Similar presentations


Ads by Google