#pragma css /css/2010.css <<BI>> = Введение, синтаксис = == Что такое Java? == Java широко известна как современный объектно-ориентированный язык, легкий в изучении и позволяющий создавать программы, которые могут исполняться на любой платформе без каких-либо доработок. Платформа Java Многоплатформенность Java достигается за счет использования виртуальной машины ''JVM'', которая является обычной программой, исполняемой операционной системой и предоставляющей ''Java''-приложениям все необходимые возможности. Поскольку все параметры ''JVM'' специфицированы, то остается единственная задача - реализовать виртуальные машины на всех существующих и используемых платформах. Исходный код любой программы на языке ''Java'' представляется обычными текстовыми файлами, которые могут быть созданы в любом текстовом редакторе или специализированном средстве разработки и имеют расширение .java. Эти файлы подаются на вход ''Java''-компилятора, который транслирует их в специальный ''Java байт-код'', который сохраняется в бинарных файлах с расширением .class. ''Java''-приложение, состоящее из таких файлов, подается на вход виртуальной машине, которая начинает их исполнять, или интерпретировать, так как сама является программой. Java является строго типизированным языком. Это означает, что любая переменная и любое выражение имеют известный тип еще на момент компиляции. Такое строгое правило позволяет выявлять многие ошибки уже во время компиляции. Компилятор, найдя ошибку, указывает точное место (строку) и причину ее возникновения, что позволяет избежать лишних запусков программы. Поэтому четкое понимание модели типов данных в Java очень помогает в написании программ. == Типы данных == Все типы данных разделяются на две группы: простые и объектные (про них будем говорить на сл. занятии). Первую составляют 8 ''простых'' (''примитивных'') типов данных. Они подразделяются на три подгруппы: * ''целочисленные'' (в основном мы будем использовать int) * byte * short * int * long (используется для работы со временем) * char (также является целочисленным типом, хотя используется для хранения символов) * ''дробные'' * float * double (используется, когда нужна высокая точность, например, для работы с очень маленькими числами) * ''булевский'' * boolean (принимает значения true или false) . !!! Нет простого типа для хранения строк. Для работы со строками используют класс String, который мы рассмотрим на другом занятии. '''Пособие 1 '''Простые типы данных ||<tablewidth="731px" tableheight="318px"#d8d8d8 width="100px">'''Название типа''' ||<#d8d8d8 width="96px">'''Длина (байты)''' ||<#d8d8d8 width="422px">'''Область значений''' || ||<#eaeaea width="100px">byte ||<#eaeaea width="96px">1 ||<#eaeaea width="422px">-128 .. 127 || ||<#eaeaea width="100px">short ||<#eaeaea width="96px">2 ||<#eaeaea width="422px">-32.768 .. 32.767 || ||<#eaeaea width="100px">int ||<#eaeaea width="96px">4 ||<#eaeaea width="422px">-2.147.483.648 .. 2.147.483.647 || ||<#eaeaea width="100px">long ||<#eaeaea width="96px">8 ||<#eaeaea width="422px">-9.223.372.036.854.775.808 .. 9.223.372.036.854.775.807 (примерно 10^19^) || ||<#eaeaea width="100px">float ||<#eaeaea width="96px">4 ||<#eaeaea width="422px">3.40282347e+38f ; 1.40239846e-45f || ||<#eaeaea width="100px">double ||<#eaeaea width="96px">8 ||<#eaeaea width="422px">1.79769313486231570e+308 ; 4.94065645841246544e-324 || Иллюстрировать логику работы с типами данных проще всего на примере переменных. Как мы создавали переменные в Python? При первом упоминании и присваивании: {{{#!python a=0 }}} При создании переменных в Java необходимо указывать их тип: {{{#!java int a; int b=0; }}} !!! теперь нельзя a=”Вася” == Операции == . В Java, также как и в Python, есть операции арифметические, сравнения, и логические. '''Пособие 2''' Операции. ||<tablewidth="815px" tableheight="616px" width="157px">||<width="158px">целые типы(byte, short, int, long)||<width="158px">дробные типы (float, double)||<width="158px">булевский тип (boolean)|| ||<width="157px">арифметические операции (+, -, *, /, %)||<width="158px">{{{int a=1+2;}}}||<width="158px">{{{double d = 0.9 + 1;}}} !!! будьте внимательны с делением double {{{d=1/2; double d=(double)1/2;}}}||<width="158px">- || ||<width="157px">инкремент и декремент: ++ и –||<width="158px">{{{i++; --j;}}}||<width="158px">-||<width="158px">-|| ||<width="157px">операции сравнения ==, != (возвращают boolean)||<width="158px">{{{int a; if (a==3){ ...} }}}||<width="158px">{{{float f, e; if (f!=e){...} }}}||<width="158px">{{{boolean b; if(b==true){...} }}}|| ||<width="157px">операции сравнения <,>,<=,>= (возвращают boolean)||<width="158px"> {{{int a = 2, b = 3; boolean b = (a > b); }}} ||<width="158px"> {{{float f, e; ... if(f>=e){...} }}} ||<width="158px">- || ||<width="157px">логические операции {{{(|, &&, ||)}}} ||<width="158px">- ||<width="158px">- ||<width="158px"> {{{int x = 1; int y = 2; boolean is_one = (x==1) ||(y==1);}}}|| == Преобразование типов == При передаче значения от менее емкой переменной к более емкой преобразования типа значения происходит автоматически. Например: {{{#!java byte a = 3; int b = a; double c = b; // Теперь в с находится число 3.0 }}} Но для обратного перехода необходимо делать это вручную, указывая в скобках перед значением новый тип данных: {{{#!java double c = 3.0; int b = (int)c; byte a = (byte)b; }}} Также автоматическое преобразование значений происходит при вычислении выражений. Если, например, вычисляется сумма над значениями разных типов, то меньший по размеру тип преобразуется к большему: {{{#!java int a = 1; double b = 2.0; double c = a*b; }}} == Массивы == Как мы объявляли массивы (на самом деле списки) в Python? {{{#!java int[] a; }}} При создании массива нужно указать его длину. int[] array=new int[5]; Обращение к элементу массива происходит по индексу. При обращении к элементу с несуществующим индексом программа выдаст ошибку!!! Пример: Найти сумму элементов массива {{{#!java int[] array = {1, 2, 3, 10}; int sum=0; for (int i = 0; i < array.length; i++){ sum += array[i]; } System.out.println("Sum=" + sum); }}} == Методы == Метод – это обособленная часть программы, которой можно передавать некоторые данные на вход и получать некоторые данные, полученные в результате работы метода. Как это было в Python? {{{#!python def cube(x): return x*x*x }}} и где-то в основной программе вызов: {{{#!python c= cube(3) }}} В Java указывается тип значения, которое возвращает метод, а также перечисляются входные параметры и их типы: {{{#!java int cube(int num){ return num*num*num; } }}} и где-то в основной программе вызов: {{{#!java int c =cube(2); }}} Вынесем пример с суммой массива в отдельный метод: {{{#!java int arraySum(int[] array){ int sum=0; for (int i = 0; i < array.length; i++){ sum += array[i]; } return sum; }}} В основной программе: {{{#!java int[] a = {3, 4, 5}; System.out.println(“Sum=” + sum(a)); }}}