
1.
Как выполняются программы написанные на языке Java .Java
объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируется в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) вне зависимости от компьютерной архитектуры. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия вызывают немедленное прерывание. В последнее время был внесен ряд усовершенствований, которые несколько увеличили скорость выполнения программ на Java:
применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде,
широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).
Основные возможности
унифицированный доступ к базам данных:
на уровне отдельных SQL-запросов — на основе JDBC, SQLJ;
на уровне концепции объектов, обладающих способностью к хранению в базе данных — на основе Java Data Objects (англ.) и Java Persistence API;
поддержка обобщений (начиная с версии 1.5);
параллельное выполнение программ.
Пример программы
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
2. Что входит в набор программ и классов jdk (Java Development Kit).
Процесс установки комплекса программ JDK. Набор программ и классов JDK содержит:
компилятор javac из исходного текста в байт-коды; интерпретатор java, содержащий реализацию JVM;
облегченный интерпретатор jre (в последних версиях отсутствует);
программу просмотра апплетов appietviewer, заменяющую браузер;
отладчик jdt>;
дизассемблер javap;
программу архивации и сжатия jar;
программу сбора документации javadoc;
программу javah генерации заголовочных файлов языка С;
программу javakey добавления электронной подписи;
программу native2ascii, преобразующую бинарные файлы в текстовые;
программы rmic и rmiregistry для работы с удаленными объектами;
программу seriaiver, определяющую номер версии класса;
библиотеки и заголовочные файлы "родных" методов;
библиотеку классов Java API (Application Programming Interface).
Запустите дистрибутив JDK. На экране появится окно мастера по установке программного комплекса. Для начала установки нажмите кнопку «Next», когда она станет активной. Далее мастер установки предложит Вам ознакомиться с лицензионным соглашением. Чтобы принять его нажмите кнопку «Accept».Затем мастер установки выведет окно для выбора параметров функционала программы и области установки ее. Для продолжения нажмите кнопку «Next». Процесс установки отобразится в окне мастера и может занять несколько минут.Затем мастер установки предложит установить программу JRE указав область установки. Для продолжения установки нажмите кнопку «Next». В окне отобразится процесс установки, который может занять несколько минут.Затем на экране появится окно завершения установки программного комплекса. Для завершения установки следует нажать кнопку «Finish».
3.
Что такое JRE (Java Runtime Environment)?
Какие интегрированные среды 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- технологий и не только.
4.
Принципы объектно-ориентированного программирования (абстракция, иерархия, ответственность, модульность)
Принципы объектно-ориентированного программирования .Объектно-ориентированное программирование развивается уже более двадцати лет. Имеется несколько школ, каждая из которых предлагает свой набор принципов работы с объектами и по-своему излагает эти принципы. Но есть несколько общепринятых понятий. Перечислим их. Абстракция Мы должны абстрагироваться от некоторых конкретных деталей объекта. Очень важно выбрать правильную степень абстракции. Описывая поведение какого-либо объекта, например автомобиля, мы строим его модель. Описание каждой модели производится в виде одного или нескольких классов (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;
Если несколько переменных имеют один и тот же тип, их можно объявить в одном предложении, перечислив идентификаторы переменных через запятую:
имя-типа идентификатор-переменной-1, идентификатор-переменной-2,…;
например:
int x1, x2, x3;
В соглашениях по кодированию рекомендуется начинать идентификатор-переменной с маленькой буквы. Если имя переменной состоит из нескольких слов, то все они пишутся слитно, причем каждое слово, кроме первого, начинается с большой буквы, например:
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".
10.
Какие операторы ветвления используются в языке Java 2?
Многовариантное ветвление — оператор switch.Конструкция if/else может оказаться неудобной, если вы стоите перед необходимостью сделать выбор из многих вариантов. В языке Java есть оператор switch, эквивалентный оператору switch из языков С и С++.Оператор ветвления применяется в случаях, когда выполнение или невыполнение некоторого набора команд должно зависеть от выполнения или невыполнения некоторого условия. Существует две основные формы условной инструкции, встречающиеся в реальных языках программирования: условный оператор (оператор if) и оператор многозначного выбора (переключатель, case, switch).
1)if (2 * 2 == 5)
{
editResult.setText("Дважды два равно пяти!);
}
Оператор switch обеспечивает ясный способ переключения между различными частями программного кода в зависимости от значения одной переменной или выражения. Общая форма этого оператора такова:
2)switch ( выражение ) { case значение1: break; case значение2: break; case значениеN: break; default: }
Результатом вычисления выражения может быть значение любого простого типа, при этом каждое из значений, указанных в операторах case, должно быть совместимо по типу с выражением в операторе switch.
11.
Какие виды конструкции операторов циклов используются в языке Java 2?
Операторами цикла Java 2 являются for, while и do-while. Эти операторы образуют конструкции, обычно называемые циклами.
Общая форма оператора for выглядит следующим образом:
for (инициализация; условие; повторение) {
// тело
}
Оператор while имеет следующую общую форму :
While (условие) {
// тело цикла
}
Поскольку цикл while вычисляет свое условное выражение в начале цикла, тело цикла не будет выполнено ни разу, если в самом начале условие оказывается ложным. Java 2 поддерживает такой цикл: do-while. Этот цикл всегда выполняет тело цикла хотя бы один раз, поскольку его условное выражение проверяется в конце цикла. Общая форма цикла do-while:
do {
// тело цикла
} while (условие) ;
При каждом повторении цикла do-while программа вначале выполняет тело цикла, а затем вычисляет условное выражение.
12.
Как работают операторы перехода break, continue, return?
В java оператор break находит три применения. Во первых, он завершает последовательность операторов в операторе switch. Bо вторых, eгo можно использовать для выхода из цикла. И, в третьих, eгo можно использовать в качестве "цивилизованной" формы оператора безусловноrо перехода ("goto"). Рассмотрим последние два применения.
Использование оператора break для выхода из цикла.
class BreakLoop {
public static void main (String args [ ] ) {
for(int i=0; i<100; i++) {
if (i == 10) break; // выход из цикла если i равно 10
System.out.println ("i: "+ i); }
Sуstеm.оut.рrintln ("Цикл завершен.");
} }
Использование оператора break в качестве цивилизованной формы оператора goto.
class Break {
public static void main(String args [ ] )
boolean t = true;
first: {
second: {
third: {
Sуstеm.оut.рrintln("Предшествует оператору break.");
if (t) break second; // выход из блока second
Sуstеm.оut.рrintln("Этот оператор не будет выполняться");
}
Sуstеm.оut.рrint1n("Этот оператор не будет выполняться");
Sуstеm.оut.рrint1n("Этот оператор следует за блоком second.");
} } }
Иногда требуется, чтобы повторение цикла осуществлялось с более раннего оператора его тела. Для выполнения этого действия служит оператор continue. В циклах while и do-while оператор continue вызывает передачу управления непосредственно управляющему условному выражению цикла. В цикли for управление передается вначале итерационной части цикла for, а потом условному выражению.
Демонстрация использования оператора continue :
Class Continue {
Public static void main (String args [ ] ) {
for (int i=0; i<10; i++) {
System.out. println ( i + “ “ ) ;
if (i%2 == 0) continue;
System.out. println ( “ “ ) ;
} } }
Последний из управляющих операторов – return. Его используют для выполнения явного возврата из метода.
Демонстрация использования оператора return:
Class Return {
Public static void main (String args [ ] ) {
Boolean t = true;
System.out. println ( “ До выполнения возврата.“ ) ;
if (t) return ; // возврат к вызывающему объекту
System.out. println ( “Этот оператор выполняться не будет. “ ) ;
} }
13.
Как объявляются одномерные массивы в языке Java 2? Одномерные массивы, по сути, представляют собой список однотипных переменных. Чтобы создать массив, вначале необходимо создать переменную массива требуемого типа. Общая форма объявления одномерного массива выглядит следующим образом:
тип имя переменной [ ] ;
Где тип — это тип элементов массива, а имя — уникальный (незанятый другими переменными или объектами в этой части программы) идентификатор, начинающийся с буквы.
int a[ ];
Как видно, сначала указывается базовый тип. Затем идет имя переменной, а пара квадратных скобок указывает, что используемый тип является именно массивом. Такжедопустимой записью является:
int[ ] a;
14.
Как можно присвоить начальные данные элементам массива. Переменная_ массива = new тип [размер]; тип определяет тип данных, для которых резервируется память, размер указывает количество элементов в массиве, а переменная массива переменная массива, связанная с массивом. То есть, чтобы использовать операцию new для распределения памяти, потребуется указать тип и количество элементов, для которых нужно зарезервировать память. Индекс начального элемента — 0, следующего за ним — 1 и т. д. Индекс последнего элемента в массиве — на единицу меньше, чем размер массива. Например:
int[] n = new int[5];
for(int i=0; i<5; i++)
{
n[i]=i;
}
15.
Архитектура многомерных массивов. Как объявляются нерегулярные массивы в языке Java 2?
Многомерные массивы – это массивы массивов.
Int mx[ ][ ] = new int[4][ ];
При распределемии памяти необходимо указать величину первого крайнего сверху. Измерение под остальные память можно распределять отдельно.
mx[0] = new int [5];
mx[1] = new int [4];
mx[2] = new int [2];
mx[3] = new int [9];
Для каждого массива количество может быть своим. Такие массивы называют нерегулярными или ступенчатыми. Это полезно при инициализации разряженных массивов (где используются не все элементы) При инициализации можно использовать константу и переменную.
int x = 10;
int i = 0;
int mx[ ][ ]= { {x*i++, x*i++}, {x*i++, x*i++}};
16.
Логические условия. Приведите пример.
Примерами выражений, которые могут быть конвертированы в false являются такие выражения, которые вычисляются в null, 0, пустую строку ("") или undefined.
Вот примеры операции && (логическое И):
a1=true && true // t && t возвращает true a2=true && false // t && f возвращает false a3=false && true // f && t возвращает false a4=false && (3 == 4) // f && f возвращает false a5="Cat" && "Dog" // t && t возвращает Dog a6=false && "Cat" // f && t возвращает false a7="Cat" && false // t && f возвращает false
Примеры операции || (логическое ИЛИ):
o1=true || true // t || t возвращает true o2=false || true // f || t возвращает true o3=true || false // t || f возвращает true o4=false || (3 == 4) // f || f возвращает false o5="Cat" || "Dog" // t || t возвращает Cat o6=false || "Cat" // f || t возвращает Cat o7="Cat" || false // t || f возвращает Cat Примеры операции ! (логическое НЕ):
n1=!true // !t возвращает false n2=!false // !f возвращает true n3=!"Cat" // !t возвращает false
У логических операторов следующий приоритет: отрицание, конъюнкция, дизъюнкция. Примеры:
boolean a = true; boolean b; b = a || true; // b истинно b = !b; // b ложно System.out.println(b); // выведет false a = a || b; // a истинно boolean c; c = a && (a||b); //с истинно System.out.println(c); // выведет true
В Java логический и числовые типы нельзя преобразовывать друг к другу.
17.
Примеры использования циклов.
Оператор for
Конструкция оператора for: for (Начальное значение переменной; Логическое выражение с переменной(условие выполнения цикла); Действие над переменной, вызываемое при выполнении условия) { Операторы, которые будет выполнять цикл при условии ЛогВыр - true; } Где chislo - переменная, объявленная в цикле (Её нужно обязательно объявлять в цикле), ЛогВыр - логическое выражение. Если оно равно true, цикл выполняется до тех пор, пока не станет false. Если вместо этого, вставить true, цикл будет выполняться вечно, если false, цикл не будет выполнен ни разу. Действие при выполнение условия - что будет предпринимать цикл, при выполнение оператора.
public class Цикл {
public static void main (String args []){
for (int i = 0; i < 4; ++i){
System.out.print ("mkm ");
}
}
}
Данный цикл выведет mkm mkm mkm mkm
Оператор while
Конструкция оператора while: while (Логическое выражение) {Тело цикла;} Где выражение в скобках определяет условие, пока(while) выполняется которое, будет выполнятся выражение в фигурных скобках.
public class Цикл {
public static void main (String args [ ]){
int i = 0;
while (i < 10){
System.out.print (i++);
}
}
}
Данный цикл выведет 0123456789.
Оператор do...while
Конструкция оператора do while: do {Тело цикла;} while (условие выполения) Отличие данного оператора от while только в том, что он является оператором постусловия (сначала выполнит, потом проверит).
public class Цикл {
public static void main (String args [ ]){
int i = 0;
do{
System.out.print (i++);
} while (i < 10)
}
}
Данный цикл выведет 012345678910.
18.
Есть ли в языке Java оператор goto? Как получить функциональность типа Goto в языке Java 2 ? В java нет оператора goto, однако существует версия оператора break с метками, который можно использовать для выхода из вложенного цикла. Как правило, оператор goto состоит из двух частей: собственно оператора и метки, указывающей целевую точку перехода в программе: goto метка. Метка, в зависимости от правил языка, может быть либо числом , либо идентификатором используемого языка программирования. Для меток-идентификаторов метка, как правило, ставится перед оператором, на который должен осуществляться переход, и отделяется от него двоеточием (метка:). Действие оператора перехода состоит в том, что после его исполнения следующими будут исполняться операторы программы, идущие в тексте непосредственно после метки (до следующего оператора перехода, ветвления или цикла)..
19.
Есть ли в Java 2 директивы препроцессора ? Что такое JIT динамическая компиляция ? Преимущества и недостатки. В Java отсутствует препроцессор. JIT-компиляция (англ. Just-in-time compilation, компиляция «на лету»), динамическая компиляция (англ. dynamic translation) — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код непосредственно во время работы программы. Принцип работы существенно отличается от статических компиляторов и для получения высокопроизводительного кода JVM использует другой набор методик компиляции. Существенный недостаток этого метода заключается в том, что время, потраченное на компиляцию метода, можно с таким же успехом потратить на интерпретацию байт-кода. Чтобы получить выигрыш в производительности, необходимо компенсировать время, потраченное на компиляцию, за счет более быстрого исполнения программы, которая теперь имеет вид не байт-кода, а машинных команд. Поэтому скорость компиляции имеет большое значение. При работе с длинными программами динамическая компиляция имеет серьезные преимущества перед статической. Статическая компиляция может оптимизироваться лишь для одного центрального процессора . В то же время динамическая компиляция позволит генерировать при каждом отдельном прогоне программы специализированный код.
20.
Почему в языке Java 2 обычные типы имеют определенный размер ? Язык Java является строго типизированным. Это значит, что каждая переменная и каждое выражение имеет свой определенный тип. Автоматического приведения типов попросту не существует. Всего в Java существует восемь простых типов данных, которые условно можно разделить на четыре группы: • Целые (Integers) – описывает целые числа с учетом знака. Включает в себя byte, short, int, long.
• Числа с плавающей запятой (Floating-point number) – описывает «дробные» числа. Их нельзя считать полноценными дробными, т.к. они имеют определенную погрешность. Это типы: float и double.
• Символьный тип (Characters) – это тип char, который предназначен для описания символов (буквы, цифры, математические знаки, и др.).
• Логический тип (Boolean) – это тип Boolean, описывающий переменные, которые могут принимать значение «правда» (true) или «ложь» (false).
21.
Программа рекурсивного вычисления факториала числа
package javaapplication23;
public class JavaApplication23 {
public static void main(String[] args) {
int n = 11;
int a = 1, b = 1;
System.out.print(a + " " + b);
int fib = 2, i = 2;
while (i < n) {
fib = a + b;
a = b;
b = fib;
System.out.print(" " + fib);
i++;
}
}
}
22.
Программа вычисления чисел Фиббоначи.
package javaapplication23;
// Простой пример рекурсии
class Factorial {
// это рекурсивный метод
int fact(int n) {
int result;
if(n==1) return 1;
result = fact(n-1) * n;
return result;}}
class Rekursiya {
public static void main(String[] args) {
Factorial f = new Factorial ();
for(int i=2;i<7;i++){
System.out.println("Факториал "+ i +" равен = " + f.fact(i));
}
}}
29.
Что такое JNI? Приведите пример.
JavaNativeInterface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на языках С/С++ или Ассемблера, и скомпонован в виде динамических библиотек, позволяет не использовать статическое связывание. Это даёт возможность вызова функции С/С++ из программы на Java, и наоборот. Более ранние интерфейсы, в отличие от JNI, не удовлетворяли условию двоичной совместимости.
Пример:
Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на языках С/С++ или Ассемблера, и скомпонован в виде динамических библиотек, позволяет не использовать статическое связывание. Это даёт возможность вызова функции С/С++ из программы на Java, и наоборот
JNI был придуман и реализован для тех кто нуждается в вызовах, которые Java сделать не может совсем - это какие-нибудь машино-зависимые команды или обращения к API опер.системы.
Простой пример
public class ShowJniTest
{
public static void main(String[] args)
{
JniTest jt = new JniTest();
jt.showString("Hello, world!");
jt.showString("JNI is great!");
}
}
30.
Алгоритм и программа поиска подстроки в строке.
Класс Stringпредлагает два метода, которые позволяют вам выполнять поиск в строке определенноrо символа или подстроки.
indexOf () ищет первое вхождение символа или подстроки.
1astlndexOf () ищет последнее вхождение символа или подстроки.
Эти два метода перегружены несколькими разными способами. Во всех случаях эти
методы возвращают позицию в строке (индекс), где символ или под строка была найдена,
либо -1 в случае неудачи.
Чтобы найти первое вхождение символа, применяйте:
intindexOf(charch)
Чтобы найти последнее вхождение символа:
intlastlndexOf(charch)
Здесь ch символ, который нужно искать.
Чтобы найти первое или последнее вхождение подстроки, применяйте:
intindexOf(String str)
intlastlndexOf(String str)
Здесь str задает искомую подстроку.
Вы можете указать начальную позицию для поиска, воспользовавшись следующими
формами:
intindexOf(intch, intstartIndex)
intlastlndexOf(intch, intstartIndex)
intindexOf(String str, intstartIndex)
intlastlndexOf(String str, intstartIndex)
Здесь startIndex задает начальную позицию поиска. Для indexOf () поиск начинается от startIndex до конца строки, а для lastlndexOf () от startIndex до нуля.
Следующий при мер показывает, как использовать различные индексные методы для
поиска внутри String:
// Демонстрация использования indexOf() и lastlndexOf().
classindexOfDemo {
public static void main(String args[]) {
String s "Now is the time for all good mеn " +
"toсоmе to the aid of their country.";
System.out.println(s);
System.out.println("indexOf(t) " +
s.indexOf('t'));
System.out.println("lastlndexOf(t) " +
s.lastlndexOf('t'»);
System.out.println ("indexOf (the) " +
s.indexOf("the"));
System.out.println ("lastlndexOf (the) "+
s.lastlndexOf("the");
System.out.println("indexOf(t, 10) "+
s.indexOf('t', 10»;
System.out.println("lastlndexOf(t, 60) " +
s.lastlndexOf('t', 60»;
System.out.print1n("indexOf(the, 10) "+
s.indexOf("the", 10));
System.out.println ("lastlndexOf (the, 60) "+
s.lastlndexOf("the", 60)); }}
31.
Что такое класс? Как объявляются объекты?
Классы – основной элемент абстракции языка Java, основное назначение которого, кроме реализации назначенного ему контракта, это сокрытие реализации. Имя класса в пакете должно быть уникальным. Физически пакет представляет собой каталог, в который помещаются программные файлы, содержащие реализацию классов. Классы позволяют провести декомпозицию поведения сложной системы до множества элементарных взаимодействий связанных объектов. Класс определяет структуру и/или поведение некоторого элемента предметной области, для которой разрабатывается программная модель.
Определение простейшего класса без наследования имеет вид:
class ИмяКласса {
{}//логические блоки
// дружественные данные и методы
private// закрытые данные и методы
protected// защищенные данные и методы
public// открытые данные и методы
Изучение классов начнем с простоrо примера. Ниже приведен код класса Вох (Паралле лепипед), который определяет три переменных экземпляра: width (ширина), height (высота) и depth (rлубина
class Вох {
double width;
double height;
double depth; }
Как уже было сказано, класс определяет новый тип данных. В данном случае новый тип данных назван Вох. Это имя будет использоваться для объявления объектов типа Чтобы создать объект Вох, нужно использовать оператор, подобный следующему:
Box myBox = newBox(); // создание объекта mуBох типа Вох
Этот оператор объединяет только что описанные шаги. Чтобы каждый из шагов был более очевидным, eгo можно было переписать следующим образом:
Вох mуЬох; // объявление ссылки на объект
mуВох= new Вох(); //распределение памяти для объекта Вох
32.
Методы. Конструкторы. Ключевое слово this.
Метод – основной элемент структурирования хода. Все функции Java объявляются только внутри классов и называются методами. Простейшее определение метода имеет вид:
returnType methodName(список_параметров) {
// тело метода
return value; // если нужен возврат значения (returnType не void)
}
Если метод не возвращает значение, ключевое слово return может отсут-ствовать, тип возвращаемого значения в этом случае будет void. Вместо пустого списка параметров метода тип void не указывается, а только пустые скобки. Вызов методов осуществляется из объекта или класса (для статических методов):
objectName.methodName();
Для того чтобы создать метод, нужно внутри объявления класса написать объявление метода и затем реализовать его тело. Объявление метода как минимум должно содержать тип возвращаемого значения (возможен void) и имя метода. В приведенном ниже объявлении метода элементы, заключенные в квадратные скобки, являются необязательными.
[доступ] [static] [abstract] [final] [native]
[synchronized] returnType methodName(список_параметров)
[throws список_исключений]
Как и для полей класса, спецификатор доступа к методам может быть public, private, protected и по умолчанию. При этом методы суперкласса можно перегружать или переопределять в порожденном подклассе.
Конструкторы
Конструктор - это метод, который автоматически вызывается при создании объекта класса и выполняет действия по инициализации объекта. Конструктор имеет то же имя, что и класс; вызывается не по имени, а только вместе с ключевым словом new при создании экземпляра класса. Конструктор не возвращает значение, но может иметь параметры и быть перегружаемым.
package chapt03;
public class Quest {
private int id;
private String text;
// конструктор без параметров (по умолчанию)
public Quest() {
super();/* если класс будет объявлен без конструктора, то компилятор предоставит его именно в таком виде*/
}
// конструктор с параметрами
public Quest(int idc, String txt) {
super();
id = idc;
text = txt; }}
Ключевое слово this
Иногда будет требоваться, чтобы метод ссылался на вызвавший eгo объект. Чтобы это было возможно, в java определено ключевое слово this. Оно может использоваться внутри любого метода для ссылки на текущий объект. То есть this всеrда служит ссылкой на объект, для которого был вызван метод. Ключевое слово this можно использовать везде, где допускается ссылка на объект типа текущего класса.
Для пояснения рассмотрим следующую версию конструктора Вох ( ) :
// Избыточное применение ключевоrо слова this.
Вох(dоublе w, double h, double d) {
this. width w;
this.height h;
this. depth d;}
Эта версия конструктора Вох () действует точно так же, как предыдущая. Применение ключевorо слова thi s избыточно, но совершенно правильно. Внутри метода Вох () ключевое слово this всеrда будет ссылаться на вызывающий объект.
33.
Методы классов.
Общая форма объявления метода выrлядит следующим образом:
тип ИМЯ ( список_ параметров ) {
// тело метода
}
Здесь тип указывает тип данных, возвращаемых методом. Он может быть любым дoпустимым типом. Если метод не возвращает значение, типом eroвозвращаемоrо значения должен быть void. Имя служит для указания имени метода. Оно может быть любым допустимым идентификатором, кpoме тех, которые уже используются друrими элементами в текущей области определения. Список_параметров последовательность пар "типидентификатор", разделенных за пятыми. По сути, параметры - это переменные, которые принимают значения аргументов, переданных методу во время его вызова. Если метод не имеет параметров, список параметров будет пустым.
Методы, тип возвращаемого значения которых отличается от void, возвращают значение вызывающей процедуре с помощью следующей формы оператора return:
retиrn значение;
Здесь значение - это возвращаемое значение.
Все методы имеют ту же общую форму, что и метод main ( ). Однако большинство методов не будут указаны как static или public.
Обратите внимание, что общая форма класса не содержит определения метода main ( ) .
Классы java могут и не содержать этот метод. Его обязательно указывать только в тех
случаях, когда данный класс служит начальной точкой программы.