Какие интегрированные среды Java существуют на сегодняшний день. Java Runtime Environment(JRE) – минимальная реализация виртуальной машины,необходимая для исполнения Java – приложений, без компилятора и других средств разработки.Состоит из виртуальной машины – Java Virtual Machine и библиотеки Java-классов JRF распространяется свободно и для большинства платформ может быть загружена с сайта Oracle. Cредства разработки вместе с JRE входят в JDK. На сегодняшний день существуют три основные IDE для разработки на Java:Eclipse,NetBeans и Intellij IDEA.Выбрать для себя, как же именно среда разработки наиболее удобно – задача, отнюдь, не из простых. И выбор этот со временем может изменяться. Полный дитрибутив NetBeans из коробки поддерживает Java (SE,ME,EE,Card,FX), C/C++,Groovy, PHP,HTML5. Возможности этой IDE внушительны: сразу есть поддержка JavaEE, Spring Framework, Hibernate, OSGL, Maven, юнит-тестов,возможность разработки настольных приложений на платформе NetBeans и использования облачных сервисов. Отдельным плюсом стоит отметить то, что поддержка новых версий спецификаций, входящих в JavaEE, изначально появляется именно в NetBeans. Главноые достоинства Eclipse – ее расширяемость, огромное сообщество, разрабатывающее огромное же количество плагинов и расшириний, поддержка практически всех технологий, связанных с Java. По своей природе Eclipse очень тяжеловесная IDE,и комфортно работать с ней стало возможно начиная с версии Juno. Intellij IDEA. Самая известная коммерческая IDE для разработки на Java. В комплекте с IDE идет огромное количество расширений, добавляющих в нее поддержку практически всех распространенных Java- технологий и не только.
Принципы объектно-ориентированного программирования .Объектно-ориентированное программирование развивается уже более двадцати лет. Имеется несколько школ, каждая из которых предлагает свой набор принципов работы с объектами и по-своему излагает эти принципы. Но есть несколько общепринятых понятий. Перечислим их. Абстракция Мы должны абстрагироваться от некоторых конкретных деталей объекта. Очень важно выбрать правильную степень абстракции. Описывая поведение какого-либо объекта, например автомобиля, мы строим его модель. Описание каждой модели производится в виде одного или нескольких классов (classes). Класс можно считать проектом, слепком, чертежом, по которому затем будут создаваться конкретные объекты. Класс содержит описание переменных и констант, характеризующих объект. Они называются полями класса (class fields). Процедуры, описывающие поведение объекта, называются методами класса (class methods). Внутри класса можно описать и вложенные классы (nested classes) и вложенные интерфейсы. Поля, методы и вложенные классы первого уровня являются членами класса (class members). Разные школы объектно-ориентированного программирования предлагают разные термины, мы используем терминологию, принятую в технологии Java. Вот набросок описания автомобиля:
class Automobile{
int maxVelocity; // Поле, содержащее наибольшую скорость автомобиля
int speed; // Поле, содержащее текущую скорость автомобиля
int weight; // Поле, содержащее вес автомобиля
// Прочие поля...
void moveTo(int x, int у){ // Метод, моделирующий перемещение
// автомобиля. Параметры х и у — не поля
int а = 1; // Локальная переменная — не поле
// Тело метода. Здесь описывается закон
// перемещения автомобиля в точку (х, у)
}
// Прочие методы. . .
}
Иерархия .Иерархия объектов давно используете для их классификации. Особенно детально она проработана в биологии. Все знакомы с семействами, родами и видами. Мы можем сделать описание своих домашних животных (pets): кошек (cats), собак (dogs), коров (cows) и прочих следующим образом:
class Pet{ // Здесь описываем общие свойства всех домашних любимцев
Master person; // Хозяин животного
int weight, age, eatTimel]; // Вес, возраст, время кормления
int eat(int food, int drink, int time){ // Процесс кормления
// Начальные действия...
if (time == eatTimefi]) person.getFood(food, drink);
// Метод потребления пищи
}
void voice(); // Звуки, издаваемые животным
// Прочее...
}
Затем создаем классы, описывающие более конкретные объекты, связывая их с общим классом:
class Cat extends Pet{ // Описываются свойства, присущие только кошкам:
int mouseCatched; // число пойманных мышей
void toMouse(); // процесс ловли мышей
// Прочие свойства
}
class Dog extends Pet{ // Свойства собак:
void preserve(); // охранять
}
Заметьте, что мы не повторяем общие свойства, описанные в классе Pet. Они наследуются автоматически. Мы можем определить объект класса Dog и использовать в нем все свойства класса Pet так, как будто они описаны в классе Dog:
Dog tuzik = new Dog(), sharik = new Dog();
После этого определения можно будет написать
tuzik.age = 3;
int p = sharik.eat (30, 10, 12);
А классификацию продолжить так:
class Pointer extends Dog{ ... } // Свойства породы Пойнтер
class Setter extends Dog{ ... } // Свойства сеттеров
Ответственность .В нашем примере рассматривается только взаимодействие в процессе кормления, описываемое методом eat(). В этом методе животное обращается к хозяину, умоляя его применить метод getFood().Итак, объект sharik, выполняя свой метод eat (), посылает сообщение объекту, ссылка на который содержится в переменной person, с просьбой выдать ему определенное количество еды и питья. Сообщение записано в строке person.getFood(food, drink). Этим сообщением заключается контракт (contract) между объектами, суть которого в том, что объект sharik берет на себя ответственность (responsibility) задать правильные параметры в сообщении, а объект — текущее значение person — возлагает на себя ответственность применить метод кормления getFood() , каким бы он ни был. Для того чтобы правильно реализовать принцип ответственности, применяется четвертый принцип объектно-ориентированного программирования — модульность (modularity)
Модульность Этот принцип утверждает — каждый класс должен составлять отдельный модуль. Члены класса, к которым не планируется обращение извне, должны быть инкапсулированы. В языке Java инкапсуляция достигается добавлением модификатора private к описанию члена класса. Например:
private int mouseCatched;
private String name;
private void preserve();
Эти члены классов становятся закрытыми, ими могут пользоваться только экземпляры того же самого класса, например, tuzik может дать поручение sharik.preserve(). А если в классе Master мы напишем private void getFood(int food, int drink); то метод getFood() не будет найден, и несчастный sharik не сможет получить пищу. , В противоположность закрытости мы можем объявить некоторые члены класса открытыми, записав вместо слова private модификатор public, например: public void getFood(int food, int drink); К таким членам может обратиться любой объект любого класса.
5.
Как классифицируются типы данных языка Java 2. Объявление переменных.
В Java определено две категории данных:
примитивные типы (primitive types);
ссылочные типы (reference types).
Существует также специальный нулевой тип, тип выражения null, который не имеет имени.
Примитивные типы делятся на булевский тип (boolean) и числовые типы. В свою очередь, числовые типы – это целые типы (byte, short, int, long и char) вещественные типы (float и double). Ссылочные типы – это типы классов, интерфейсов и массивов.
Объявление переменных в Java имеет следующий вид:
имя-типа идентификатор-переменной;
например:
int x;
String string1;
Если несколько переменных имеют один и тот же тип, их можно объявить в одном предложении, перечислив идентификаторы переменных через запятую:
В соглашениях по кодированию рекомендуется начинать идентификатор-переменной с маленькой буквы. Если имя переменной состоит из нескольких слов, то все они пишутся слитно, причем каждое слово, кроме первого, начинается с большой буквы, например:
double inputValue;
Переменная является указанием места хранения значения переменной в памяти. Переменная примитивного типа всегда содержит значение переменной указанного типа (например, int), а переменная ссылочного типа хранит ссылку (адрес) объекта указанного типа.
Создавать новые переменные можно в любом месте программы.
6.
Логический тип и операции с ними (операции сравнения и присвоения, логические операции, сокращенные логические операции)
В JavaScript имеются следующие типы операций: Операция присвоения присваивает левому операнду значение на базе правого операнда. Базовой операцией присвоения является знак равенства (=), который присваивает левому операнду значение правого операнда. То есть, x = y присваивает значение y переменной x.
Сокращённое обозначение
Значение
x += y
x = x + y
x -= y
x = x – y
x *= y
x = x * y
x /= y
x = x / y
x %= y
x = x % y
x <<= y
x = x << y
x >>= y
x = x >> y
x >>>= y
x = x >>> y
x &= y
x = x & y
x ^= y
x = x ^ y
x |= y
x = x | y
Операция сравнения сравнивает операнды и возвращает логическое значение на базе верности сравнения. Операндами могут быть числа, строки, логические значения и объекты. Строки сравниваются на базе стандартного лексикографического порядка с использованием значений Unicode.
Операция
Описание
Примеры, возвращающие true
Равно (==)
Возвращает true, если операнды равны. Если операнды разных типов, JavaScript пытается конвертировать операнды до типа, пригодного для сравнения.
3 == var1 "3" == var1 3 == '3'
Не равно (!=)
Возвращает true, если операнды не равны. Если операнды разных типов, JavaScript пытается конвертировать операнды до типа, пригодного для сравнения.
var1 != 4 var2 != "3"
Строго равно (===)
Возвращает true, если операнды равны и одного типа.
3 === var1
Строго не равно (!==)
Возвращает true, если операнды не равны и/или не одного типа.
var1 !== "3" 3 !== '3'
Больше (>)
Возвращает true, если левый операнд больше правого.
var2 > var1
Больше или равно (>=)
Возвращает true, если левый операнд больше правого или равен ему.
var2 >= var1 var1 >= 3
Меньше (<)
Возвращает true, если левый операнд меньше правого.
var1 < var2
Меньше или равно (<=)
Возвращает true, если левый операнд меньше правого или равен ему.
Логические операции обычно используются с Boolean (булевыми/логическими) значениями; в этом случае возвращается Boolean-значение. Однако операции && и || реально возвращают значение одного из специфицированных операндов, поэтому, если эти операции используются с не-Boolean-значениями, они могут вернуть не-Boolean значение.
Операция
Использование
Описание
&&
expr1 && expr2
(Логическое И) Возвращает expr1, если оно может быть конвертировано в false; иначе возвращает expr2. Таким образом, при использовании с Boolean-значениями, && возвращает true, если оба операнда true; иначе возвращает false.
||
expr1 || expr2
(Логическое ИЛИ) Возвращает expr1, если оно может быть конвертировано в true; иначе возвращает expr2. Таким образом, при использовании с Boolean-значениями, || возвращает true, если хотя бы один из операндов true; если оба операнда false, возвращает false.
!
!expr
(Логическое НЕ) Возвращает false если её единственный операнд может быть конвертирован в true; иначе возвращает true.
Так как логические выражения вычисляются слева направо, они проверяются на возможность выполнения "сокращённого" вычисления по следующим правилам:
false && что-либо сокращённо вычисляется в false.
true || что-либо сокращённо вычисляется в true.
7.
Целые типы и операции с ними (арифметические, приведение типов, операции сравнения, побитовые операции, операции сдвигов).Арифметические операции принимают числовые значения (литералы или переменные) в качестве операндов и возвращают одиночное числовое значение. Стандартными арифметическими операциями являются сложение (+), вычитание (-), умножение (*) и деление (/).
Операция
Описание
Пример
% (Modulus)
Бинарная операция. Возвращает целочисленный остаток от деления двух операндов.
12 % 5 возвращает 2.
++ (Инкремент)
Унарная операция. Добавляет 1 к операнду. Если используется как префикс (++x), добавляет единицу и возвращает значение операнда; если используется как постфикс (x++), возвращает значение операнда и затем прибавляет единицу.
Если x равен 3, то ++x устанавливает x в 4 и возвращает 4; а x++ устанавливает x в 4 и возвращает 3.
-- (Декремент)
Унарная операция. Вычитает единицу из операнда. Возвращаемое значение аналогично значению для операции инкремента.
Если x равен 3, то --x устанавливает x в 2 и возвращает 2; а x-- устанавливает x в 2 и возвращает 3.
- (Унарное отрицание)
Унарная операция. Возвращает операнд с изменённым знаком.
Если x равен -3, то -x возвращает 3.
Побитовые операции рассматривают свои операнды как набор 32-битных двоичных чисел (нулей и единиц), а не как 10-ричные, 16-ричные или 8-ричные числа. Например, 10-ричное число 9 имеет бинарное представление 1001. Побитовые операции выполняются над такими двоичными представлениями, но возвращают стандартные числовые значения JavaScript.
Операция
Использование
Описание
Побитовое И
a & b
Возвращает 1 в каждой битовой позиции, где соответствующие биты обоих операндов равны 1.
Побитовое ИЛИ
a | b
Возвращает 1 в каждой битовой позиции, где соответствующие биты одного или обоих операндов равны 1.
Побитовое исключающее ИЛИ
a ^ b
Возвращает 1 в каждой битовой позиции, где соответствующие биты одного но не обоих операндов равны 1.
Побитовое НЕ
~ a
Инвертирует биты операнда.
Сдвиг влево
a << b
Сдвигает двоичное представление a на b битов влево, заполняя справа нулями.
Побитовые Логические Операции
Операнды конвертируются до 32-битных целых и выражаются серией битов (нулей и единиц).
Каждому биту первого операнда соответствует парный бит второго операнда: первый бит - первому, второй - второму, и так далее.
Операция выполняется для каждой пары битов, а результат конструируется побитно.Например, бинарное представление 9 это 1001, а бинарное представление 15 это 1111. Итак, если побитовая операция применяется к этим двум числам, результаты будут такими: 15 & 9 даёт 9 (1111 & 1001 = 1001)
15 | 9 даёт 15 (1111 | 1001 = 1111)
15 ^ 9 даёт 6 (1111 ^ 1001 = 0110) Побитовые операции сдвига принимают два операнда: первый операнд это сдвигаемое количество, а второй специфицирует количество битовых позиций, на которое сдвигается первый операнд. Направление сдвига контролируется применяемой операцией
8.
Вещественный тип данных и операции с ними. Вещественных типов в Java два: float и double. Они характеризуются разрядностью, диапазоном значений и точностью представления, отвечающим стандарту IEEE 754-1985 с некоторыми изменениями. К обычным вещественным числам добавляются еще три значения» 1. Положительная бесконечность, выражаемая константой POSITIVE_INFINITY и возникающая при переполнении положительного значения, например, в результате операции умножения 3.0*6е307. 2. Отрицательная бесконечность NEGATIVE_INFINITY. 3. "Не число", записываемое константой NaN (Not a Number) и возникающее при делении вещественного числа на нуль или умножении нуля на бесконечность. Примеры определения вещественных типов:
float х = 0.001, у = -34.789;
double 21 = -16.2305, z2;
Поскольку к вещественным типам применимы все арифметические операции и сравнения, целые и вещественные значения можно смешивать в операциях. При этом правило приведения типов дополняется такими условиями:
если в операции один операнд имеет тип double, то и другой приводится к типу double;
если один операнд имеет тип float, то и другой приводится к типу float;
в противном случае действует правило приведения целых значений.
9.
Операции присваивания. Условная операция. Простоя операция присваивания (simple assignment operator) записывается знаком равенства =, слева от которого стоит переменная, а справа выражение, совместимое с типом переменной: х = 3.5, у = 2 * (х - 0.567) / (х + 2), b = х < у, bb = х >= у && b. Операция присваивания действует так: выражение, стоящее после знака равенства, вычисляется и приводится к типу переменной, стоящей слева от знака равенства. Результатом операции будет приведенное значение правой части. Операция присваивания имеет еще одно, побочное, действие: переменная, стоящая слева, получает приведенное значение правой части, старое ее значение теряется. В операции присваивания левая и правая части неравноправны, нельзя написать 3.5 = х. После операции х = у изменится переменная х, став равной у, а после у = х изменится у. Кроме простой операции присваивания есть еще 11 составных операций присваивания (compound assignment operators): +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=; >>>=. Символы записываются без пробелов, нельзя переставлять их местами.
Все составные операции присваивания действуют по одной схеме:
х ор= а эквивалентно х = (тип х), т. е. (х ор а).
Напомним, что переменная ind типа short определена у нас со значением 1. Присваивание ind +=7.8 даст в результате число 8, то же значение получит и переменная ind. Эта операция эквивалентна простой операции присваивания ind = (short)(ind + 7.8).
Перед присваиванием, при необходимости, автоматически производится приведение типа. Поэтому:
byte b = 1;
b = b + 10; // Ошибка!
b += 10; // Правильно!
Перед сложением ь + 50 происходит повышение ь до типа int, результат сложения тоже будет типа int и, в первом случае, не может быть Присвоен переменной ь без явного приведения типа. Во втором случае перед присваиванием произойдет сужение результата сложения до типа byte.
Условная операция - единственная в JavaScript, принимающая три операнда. Она может дать одно или другое значение на базе условия. Синтаксис таков:
condition? val1 : val2 Если condition - true, операция имеет значение val1. Иначе - значение val2. Вы можете использовать условную операцию в любом месте, где может использоваться стандартная операция.
Например,
status = (age >= 18) ? "adult" : "minor"
Этот оператор присваивает значение "adult" переменной status, если age равен 19 или более. Иначе переменной status присваивается значение "minor".