Примитивные типы данных java. экзамен по примитивным данным. Тип данных (название)
Скачать 38.13 Kb.
|
Какие примитивные типы есть в Java Ответ: В Java существует четыре типа целочисленных данных: byte, short, int и long, Для работы с действительными числами используются типы float и double (на практике обычно используется тип double). С помощью этих типов реализуется формат числа с плавающей точкой, для символьных данных используется тип char, а что касается логического типа boolean, то переменные этого типа могут принимать всего два значения: true (истина) и false (ложь). Размерность примитивных типов Ответ:
Что такое явные и неявные приведения, с чем связано их наличие? Ответ: Каждый базовый тип данных занимает определенное количество байт памяти. Это накладывает ограничение на операции, в которые вовлечены различные типы данных. Если операция преобразования типов предполагает указание в скобках того типа, к которому надо преобразовать значение – это явное приведение к типу данных. Например, в случае операции (byte)a, идет преобразование данных типа int в тип byte. В итоге мы получим значение типа byte.
Некоторые виды преобразований выполняются неявно, автоматически. byte -> short -> int -> long int -> double short -> float -> double char -> int Автоматические преобразования с потерей точности Некоторые преобразования могут производиться автоматически между типами данных одинаковой разрядности или даже от типа данных с большей разрядностью к типа с меньшей разрядностью. Это следующие цепочки преобразований: int -> float, long -> float и long -> double. Они производятся без ошибок, но при преобразовании мы можем столкнуться с потерей информации. Например:
Какие данные мы рискуем потерять при явных приведениях? Ответ: При применении явных преобразований мы можем столкнуться с потерей данных. Например
Результатом будет число 2. В данном случае число 258 вне диапазона для типа byte (от -128 до 127), поэтому произойдет усечение значения. Почему результатом будет именно число 2? Число a, которое равно 258, в двоичном системе будет равно 00000000 00000000 00000001 00000010. Значения типа byte занимают в памяти только 8 бит. Поэтому двоичное представление числа int усекается до 8 правых разрядов, то есть 00000010, что в десятичной системе дает число 2. При сложении char short какой результирующий тип получим? Ответ: если один из операндов операции относится к типу double, то и второй операнд преобразуется к типу double если предыдущее условие не соблюдено, а один из операндов операции относится к типу float, то и второй операнд преобразуется к типу float если предыдущие условия не соблюдены, один из операндов операции относится к типу long, то и второй операнд преобразуется к типу long иначе все операнды операции преобразуются к типу int Значит при сложении char short мы получим тип int. StringBuilder. Ответ: StringBuilder – это изменяемая последовательность символов. Этот класс предоставляет API, совместимый с StringBuffer, но без гарантии синхронизации. Основными операциями над a StringBuilder являются методы append и insert, которые перегружены, чтобы принимать данные любого типа. Каждый из них эффективно преобразует данные в строку, а затем добавляет или вставляет символы этой строки в построитель строк. Метод append всегда добавляет эти символы в конец построителя; метод insert добавляет символы в указанную точку. Например, если z ссылается на объект построителя строк, текущим содержимым которого является " start", то вызов метода z.append("le")приведет к тому, что построитель строк будет содержать " startle", тогда z.insert(4, "le")как построитель строк будет содержать " starlet". В общем, если sb ссылается на экземпляр a StringBuilder, то sb.append(x)имеет тот же эффект, что и sb.insert(sb.length(), x). У каждого StringBuilder есть емкость. Пока длина последовательности символов, содержащейся в построителе строк, не превышает емкости, нет необходимости выделять новый внутренний буфер. Если внутренний буфер переполняется, он автоматически увеличивается. Разница между String, StringBuilder и StringBuffer? Ответ: Если метод, вызываемый объектом StringBuilder, производит изменения в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuilder. Экземпляры StringBuilder не безопасны для использования несколькими потоками. Если такая синхронизация требуется, то рекомендуется использовать StringBuffer. StringBuilder рекомендуется использовать, только в случаях где стороковый буфер используется одним потоком, так как он быстрее в большинстве реализаций, чем класс StringBuffer. Как добавить String’у в pool строк? Ответ: Создать объект класса String можно двумя способами: при помощи строкового литерала и конструктора.Под строковым литералом понимается последовательность символов, заключенных в двойные кавычки: Когда мы объявляем переменную типа String и присваиваем ей строковый литерал, то JVM обращается в пул строк и ищет там такое же значение. Если пул содержит необходимое значение, то компилятор просто возвращает ссылку на соответствующий адрес строки без выделения дополнительной памяти. Если значение не найдено, то новая строка будет интернирована, а ссылка на нее возвращена и присвоена переменной. В Java существует возможность вручную выполнить интернирование строки в пул путем вызова метода intern() у объекта типа String. Например, добавив метод intern() к созданным при помощи конструктора строкам: public class StringExampleFive { public static void main(String[] args) { String str1 = "TopJava"; String str2 = "TopJava"; String str3 = (new String("TopJava")).intern(); String str4 = (new String("TopJava")).intern(); Поясним результат. Строки str1 и str2 добавлены в пул строк на этапе компиляции. Во время выполнения программы происходит конкатенация строки «interned «со значением строки str2, с последующим интернированием получившейся строки в пул строк (благодаря методу intern ()). Но, так как пул строк уже содержит строку «interned TopJava», объекту String str3 будет присвоена ссылка на строку в пуле строк. Pool примитивов Ответ: В Java есть пул(pool) целых чисел в промежутке [-128;127]. Т.е. если мы создаем Integer в этом промежутке, то вместо того, чтобы каждый раз создавать новый объект, JVM берет их из пула. Стоит заметить, что при использовалось ключевое слово new мы создаем новый объект и тогда уже создается новая ссылка. Неизменяемые типы Ответ: Если переменную объявить и инициализировать с ключевым словом final, то такая переменная становится константой. Изменить значение константы в процессе выполнения программы нельзя. Логические операторы Ответ:
Отличие операторов сокращенных логических операторов и полных Ответ: В том, что для операторов & и | всегда вычисляются значения обоих операндов, а при работе операторов && и || второй операнд вычисляется только по необходимости. То есть иногда результат выражения однозначно определён уже по первому операнду: Если первый операнд && равен false, то второй не вычисляется, так как уже понятно, что результат всего выражения будет false. Если первый операнд || равен true, то второй не вычисляется, так как уже понятно, что || вернёт true. && и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях. Оператор XOR. Представить таблицу истинности для него Ответ:
Что такое условные конструкции? Ответ: Данные конструкции позволяют направить работу программы по одному из путей в зависимости от определенных условий. В языке Java используются следующие условные конструкции: if..else и switch..case и тернерный оператор Конструкция if/elseВыражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код: После ключевого слова if ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в блоке if после фигурных скобок.
Конструкция switchКонструкция switch/case аналогична конструкции if/else, так как позволяет обработать сразу несколько условий:
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase. И если совпадение найдено, то будет выполняет соответствующий блок сase. В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default. Хотя блок default необязателен. Тернарная операцияТернарную операция имеет следующий синтаксис: [первый операнд - условие] ? [второй операнд] : [третий операнд]. Таким образом, в этой операции участвуют сразу три операнда. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true, то возвращается второй операнд; если условие равно false, то третий. Например:
Здесь результатом тернарной операции является переменная z. Сначала проверяется условие x Что такое char? Почему над ним можно выполнять арифметические операции? Ответ: Для хранения символов Java использует специальный тип char. Переменной можно присвоить код символа или непосредственно сам символ, который следует окружить одинарными кавычками. Стандартные символы ASCII можно выводить сразу. Если нужно вывести специальный символ из Unicode, то можно воспользоваться шестнадцатеричным представлением кода в escape-последовательности - надо указать обратную наклонную черту и четыре цифры после u. Например: char myChar = '\u0054'; Хотя тип char используется для хранения Unicode-символов, его можно использовать как целочисленный тип, используя сложение или вычитание. Какая размерность у boolean Ответ: Рзмер boolean-значенией в массиве типов boolean Ответ: Какие есть циклы в Java? Ответ: Для управления конструкциями, которые обычно называются ц,иклами, в Java предоставляются операторы for, while и do-while. Вам, должно быть, известно, что циклы многократно выполняют один и тот же набор инструкций до тех пор, пока не будет удовлетворено условие завершения цикла. Чем отличаются друг от друга? Ответ: Оператор цикла while является самым простым для организации циклов в Java. В начале цикла while вычисляется условное выражение, поэтому тело цикла не будет выполнено ни разу, если в самом начале условие оказывается ложным. while (условие) { // тело цикла } Возможны случаи, когда проверку условия прерывания цикла желательно выполнять в конце цикла, а не в начале. Для этой цели в Java предоставляется цикл, который называется do-while. do { // тело цикла } while (условие) Общая форма традиционной разновидности оператора цикла f or выглядит следующим образом: fоr (инициализация; условие; итерация) { // тело цикла } Или for (a=l, Ь=4; а<Ь; а++, Ь--) Цикл повторяется, и на каждом его шаге сначала вычисляется условное выражение, потом выполняется тело цикла, а после этого вычисляется итерационное выражение. Этот процесс повторяется до тех пор, пока результат вычисления итерационного выражения не станет ложным. Цикл for each? Ответ: оператор цикла for в стиле for each автоматически перебирает элементы массива, от наименьшего индекса к наибольшему. Повторение цикла for в стиле for each выполняется до тех пор, пока не будут перебраны все элементы массива, но этот цикл можно прервать и раньше, используя оператор break. int sum = О; int nums[J = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; /!использовать цикл for в стиле for each для // вывода и суммирования значений из части массива for(int х : nums) { System.out.println("Знaчeниe равно: " + х); sum += х; if(x == 5) break; //прервать цикл после //получения 5 значений System.out.println( "Сумма пяти первых элементов равна: " + sum); Что такое рекурсия? Ответ: Недостатки и преимущества? Ответ: 2 случая (правила/условия) в рекурсивном алгоритме? Ответ: Рекурсивная функция всегда должна знать, когда ей нужно остановиться. В рекурсивной функции всегда есть два случая: рекурсивный и граничный случаи. Рекурсивный случай – когда функция вызывает саму себя, то есть у нее есть размерный шаг, а граничный – когда функция перестает себя вызывать. Наличие граничного случая и предотвращает зацикливание. Какие классы-обертки знаешь? Ответ:
Что такое Autoboxing, unboxing и когда они происходят автоматически? Ответ: Автоупаковка и автораспаковка объектовАвтоупаковка (autoboxing) – это автоматическое преобразование, выполненное компилятором Java из примитива в соответствующий ему тип класса оболочки Java. Это все равно, что использовать valueOf следующим образом : // Автоупаковка Integer integer1 = 3; Integer integer2 = Integer.valueOf(3); Автораспаковка (unboxing) – это преобразование класса-обёртки в соответствующий ему примитивный тип. Если при распаковке класс-обёртка был равен null, произойдет исключение java.lang.NullPointerException. Поскольку арифметические операторы и операторы сравнения (исключение == и !=) применяются только к примитивным типам, приходилось делать распаковку вручную, что заметно снижало читабельность выражений, делая их громоздкими. Integer i1 = new Integer(14); Integer i2 = new Integer(28); System.out.println(i1.intValue() > i2.intValue()); Благодаря автораспаковке можно смело использовать выражения, пренебрегая методами конвертации. Теперь это контролирует компилятор Java. System.out.println(i1 > i2); Какая максимальная длина массива? Ответ: 255 Что такое массив и какие на нём есть ограничения? Ответ: Массив - это группа однотипных переменных, для обращения к которым используется общее имя. В языке Java допускается создание массивов любого типа и разной размерности. Доступ к конкретному элементу массива осуществляется по его индексу. Массивы предоставляют удобный способ группирования связанной вместе информации. По существу, одномерные массивы представляют собой список однотипных переменных. Чтобы создать массив, нужно сначала объявить переменную массива требуемого типа. Общая форма объявления одномерного массива выглядит следующим образом: тип имя_переменной[]; month_days = new int[12]; Подведем краткий итог: процесс создания массива происходит в два этапа. Во-первых, следует объявить переменную нужного типа массива. Во-вторых, с помощью операции new необходимо зарезервировать память для хранения массива и присвоить ее переменной массива. Максимальная размерность многомерного массива Ответ: Переведи число X (любое) из десятичной в двоичную, и число Y (любое) из двоичной в десятичную Ответ: Инкременты, декременты, отличия. Ответ: Почему 0.1 + 0.7 != 0.8 ? Ответ: Что такое continue и break? Ответ: В языке Java оператор break находит три применения. Во-первых, он завершает последовательность операторов в операторе swi t ch. Во-вторых, его можно использовать для выхода из цикла. И, в-третьих, этот оператор можно применять в качестве "цивилизованной" формы оператора безусловного перехода goto. Иногда требуется, чтобы повторение цикла осуществлялось с более раннего оператора в его теле. Это означает, что на данном конкретном шаге может воз- никнуть потребность продолжить цикл, не выполняя остальной код в его теле. По существу, это означает непосредственный переход в конец цикла, минуя часть его тела. Для выполнения этого действия служит оператор continue. В циклах while и do-while оператор continue вызывает передачу управления непосредственно условному выражению, управляющему циклом. В цикле for управление передается вначале итерационной части цикла for, а затем условному выражению. Во всех трех разновидностях циклов любой промежуточный код пропускается. Где находятся параметры и аргументы метода Ответ: Чем отличается метод от функции Ответ: В Джава функции называют методами. Есть еще разделение, что методы в джава могут быть как функции или процедуры, функции - возвращают значение, процедуры это void метод, но если обобщить: функция = метод. В джава мы говорим что это метод, который внутри тоже может содержать вызовы других методов, создавая матрешку. |