#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));
}}}