Свежие записи из блогов Widowmaker1984

Widowmaker1984, блог «Java для собеседований»

Вопросы 4 (про составные типы)

"На какие основные группы можно поделить типы данных?"

3. Все типы, кроме примитивных, относятся к ссылочным. Это все классы (включая String), интерфейсы, массивы. Они создаются комбинированием примитивных типов на основании класса. Класс похож на план для определения ссылочного типа.

3.1. Существуют классы-обертки: Byte, Short, Integer, Long, Float, Double, Character, Boolean. В отличие от примитивных типов, они пишутся с заглавной буквы. Эти типы соответствуют примитивным типам, однако являются ссылочными. Их классы cодержат методы для преобразования типов, а также другие константы и методы полезные при работе с примитивными типами данных. Например минимальное значение типа int можно узнать использовав константу Integer.MIN_VALUE.

скрытый текст3.1.1. Если требуется создать ссылку на один из примитивных типов данных, необходимо использовать соответствующий класс-обертку. Оборачивание примитива в объект называется упаковкой (boxing), а обратный процесс распаковкой (unboxing).

int i;
Integer boxed;
// Обычное создание объекта
boxed = new Integer(i);
// Фабричный метод
boxed = Integer.valueOf(i);
// Автоматическая упаковка, компилятор просто вставит вызов Integer.valueOf
boxed = i;

Рекомендуется использовать valueOf, он может быть быстрее и использовать меньше памяти потому что применяет кэширование, а конструктор всегда создает новый объект.

3.1.2. Получить примитив из объекта-обертки можно методом <имя примитивного типа>Value.

Integer boxed;
int i;
// Явная распаковка
i = boxed.intValue();
// Автоматическая распаковка
i = boxed;

3.2. Тип String предназначен для хранения строк текста. Он не является примитивным типом данных. Это один из наиболее используемых типов в Java. Строковые литералы записываются в двойных кавычках.

//Создание строки с помощью конструктора
String myString = new String("The weather was fine");
//Можно также создать строку используя кавычки ""
String myString = "The weather was fine";

Второй вариант помогает инициализировать строки так же просто, как и переменные примитивных типов.

3.2.1. Для строк определен оператор «+»

String s1 = "I have ";
String s2 = " apples ";
int num = 3;
String s = s1 + num + s2;

Результат: "I have 3 apples".

Widowmaker1984, блог «Java для собеседований»

Вопросы 4, 5 (про примитивные типы)

"На какие основные группы можно поделить типы данных?"
"Какие примитивные типы вы знаете? Назовите размерность в байтах для каждого типа."


1. Типы данных делятся на две категории:
- примитивные
- ссылочные

1.1. Примитивные типы служат основой для всех остальных типов данных и обладают явным диапазоном допустимых значений. Они не являются объектно-ориентированными и аналогичны простым типам большинства традиционных языков программирования. Ссылочные типы - это все остальные типы: классы, перечисления и интерфейсы, а также массивы.

2. Примитивные типы можно разделить на четыре группы:
- Целые. К ним относятся типы byte, short, int и long. Эти типы предназначены для целых чисел со знаком.
- Типы с плавающей точкойfloat и double. Они служат для представления чисел, имеющих дробную часть.
- Символьный тип char. Этот тип предназначен для представления элементов из таблицы символов, например, букв или цифр.
- Логический тип boolean. Это специальный тип, используемый для представления логических величин.

скрытый текст2.1. Целочисленные типы различаются между собой только диапазонами возможных значений. В языке Java понятие беззнаковых чисел отсутствует. Все числовые типы этого языка — знаковые.

byte (8 бит): от -128 до 127
short (16 бит): от -32768 до 32767
int (32 бит): от -2147483648 до 2147483647
long (64 бит): от -9223372036854775808 до 9223372036854775807

2.1.1. Переменные типа byte полезны при работе с потоком данных, который поступает из сети или файла. Тип int при работе с целочисленными данными используется чаще, нежели byte и short, даже если их диапазона хватает. Это происходит потому, что всякий раз, когда в одном выражении фигурируют переменные типов byte, short, int и целые литералы, тип всего выражения перед завершением вычислений приводится к int. Тип long удобен для работы с большими целыми числами. Его диапазон допустимых значений достаточно велик даже для таких задач, как подсчет числа атомов во вселенной.

2.1.2. Не надо отождествлять разрядность целочисленного типа с занимаемым им количеством памяти. Исполняющий код Java может использовать для ваших переменных то количество памяти, которое сочтет нужным, лишь бы только их поведение соответствовало поведению заданных вами типов. Фактически, нынешняя реализация Java из соображений эффективности хранит переменные типа byte и short в виде 32-битовых значений, поскольку этот размер соответствует машинному слову большинства современных компьютеров.

2.1.3. Тип int для целочисленных литералов считается видом значения по умолчанию. Чтобы он интерпретировался, как long, можно поставить в конец L: например, 100L. Для прочих целочисленных типов аналогичных суффиксов нет, и используется явное приведение типа:

byte foo = (byte)0;
short bar = (short)0;

2.2. Числа с плавающей точкой, часто называемые в других языках вещественными числами, используются при вычислениях, в которых требуется использование дробной части. В Java реализован стандартный набор типов для чисел с плавающей точкой — float и double и операторов для работы с ними.

double (64 бита) 1. 7е-308.. 1. 7е+ 308
float (32 бита) 3. 4е-038.. 3. 4е+ 038

2.2.2. Вещественный тип для литералов "по умолчанию" double, для float в конец ставится F. Этот тип удобен для использования, когда не требуется особой точности в дробной части числа.

float f;
float f2 = 3. 14F;
double d;
double pi = 3. 14159265358979323846;


Все "трансцендентные" (тригонометрические, показательные, логарифмические, и.т.п.) математические функции, такие, как sin, cos, sqrt, возвращают результат типа double.

2.3. В Java для представления символов в строках используется кодировка Unicode. Это объединение десятков кодировок символов, он включает в себя латинский, греческий, арабский алфавиты, кириллицу и многие другие наборы. Диапазон типа char — 0..65536. Иногда его тоже относят к целочисленным типам из-за особенностей представления в памяти и традиций.

char (16 бит): один символ UTF-16 (буквы и цифры)

2.3.1. Хотя величины типа char и не используются, как целые числа, с ними можно оперировать, как если бы они были целыми. Это дает возможность сложить два символа вместе или инкрементировать значение символьной переменной.

int three = 3;
char оne = '1';
char four = (char) (three+ оne);


Тип переменной one в приведенном выше выражении повышается до типа int, так что перед занесением результата в переменную four приходится использовать оператор явного приведения типа.

2.3.2. Символы char можно задавать также при помощи соответствующих чисел.

char symb1=1067;
char symb2 ='Ы';


2.3.3. Пример, как узнать, какому числу соответствует символ. Основан на претиповании данных:
char ch = 'J';
int intCh = (int) ch;


2.4. В языке Java имеется простой тип boolean, используемый для хранения логических значений.

boolean (8 бит в массивах, 32 бита не в массивах, т.к. используется int): true (истина) или false (ложь)

2.4.1. Значения типа boolean возвращаются в качестве результата всеми операторами сравнения, например (а < b). Также boolean — это тип, требуемый всеми условными операторами управления — такими, как if, while, do.

Widowmaker1984, блог «Дом на краю кладбища»

Второй блог про Java

Создал себе второй блог "Java для собеседований"

https://blog-house.pro/java-interviews-questions/

 

Суть его в том, чтобы как-то дополнительно структурировать и стимулировать мое продвижение по стандартным вопросам, которые задают при собеседованиях на вакансию Java-разработчика. В большинстве своем это пересказ и/или компиляция нескольких общедоступных источников. Делаю я все это в основном для себя и поэтому в объеме который кажется интересным лично мне. С другой стороны, если кому-то данный блог пригодится, буду только рад.

 

Widowmaker1984, блог «Java для собеседований»

Вопросы 3, 7 (инициализация переменных)

"Что значит слово «инициализация»?"
"Какими значениями инициализируются переменные по умолчанию?"


1. Переменная — это именованная область памяти, куда может быть (пере)записано и откуда может быть прочитано значение определенного типа. Тип и имя переменной обязательно задаются при ее создании (= объявлении) и не могут быть изменены по ходу выполнения программы.

1.1. Тип данных определяет размер и размещение переменной в памяти.

1.2. Основная форма объявления переменной:

тип данных переменная [ = значение], [переменная [= значение], ...] ;

После объявления переменной ее нужно явно инициализировать с помощью оператора присваивания, поскольку использовать переменную, которой не присвоено никакого значения, невозможно. Язык Java обладает возможностью совмещать объявление и ини­циализацию переменной в одной строке. Чтобы определить более, чем одну переменную типа, можно использовать список с запятыми в качестве разделителей.

скрытый текстint a, b, c; // Объявление трех целых a, b, и c.
int a = 10, b = 10; // Пример инициализации.
byte b = 22; // Инициализация переменной b типа byte.
double pi = 3.14159; // Объявление и присвоение величины пи.
char a = 'a'; // Переменной a типа char присваивается значение 'a'.

1.3. Существует три типа переменных:

- локальные переменные
- переменные экземпляра
- статические переменные или переменные класса

1.3.1. Локальные переменные объявляются в методах, конструкторах или блоках (далее МКБ). Они создаются, когда МКБ запускается; уничтожаются после его завершения; видны только в его пределах. Для них нельзя использовать модификаторы доступа. Реализуются на уровне стека. Для них не существует значения по умолчанию.

1.3.2. Переменные экземпляра объявляются в классе, но за пределами МКБ. Создаются тогда, когда объект создан (ключевое слово new); уничтожаются вместе с ним; являются видимыми для всех МКБ в классе. Внутри класса доступны через имя переменной; в статических методах и других классов — через полное имя (ObjectReference.VariableName). Возможно использование модификаторов доступа. В них хранятся значения, на которые должен ссылаться более одного МКБ; а также основные состояния объекта. Когда для объекта выделяется пространство в стеке, для переменной экземпляра создается соответствующий ей слот. Они имеют значения по умолчанию (для чисел это 0, для логических false, для ссылок на объект null.

1.3.3. Переменные класса (они же статические переменные) объявляются с ключевым словом static в классе, но за пределами МКБ. Создаются при запуске программы; уничтожаются при ее завершении. Видимость аналогична переменной экземпляра, но часто рекомендуется модификатор public, т.к. обычно они используются как константы и должны быть доступны пользователям класса. Константы - переменные, которые объявлены как public/private, final и static. Константы никогда не меняются от первоначального значения. Значения по умолчанию аналогичны переменным экземпляра. Значения могут быть присвоены также в специальных блоках статического инициализатора, код которых выполняется при первой загрузке класса.

Widowmaker1984, блог «Java для собеседований»

Вопрос 2 (переменная и её имя)

"Из каких символов может состоять имя переменной (корректный идентификатор)?"

1. Переменная — это именованная область памяти, куда может быть (пере)записно и откуда может быть прочитано значение определенного типа. Тип и имя переменной обязательно задаются при ее создании (= объявлении) и не могут быть изменены по ходу выполнения программы.

2. Имя или идентификатор переменной — это последовательность из строчных и заглавных латинских букв, цифр, а также символов «$» и «_». Имя переменной может начинаться с любого из перечисленных символов, кроме цифры. Она не должно совпадать с ключевым или зарезервированным словом.

скрытый текст2.1. Внутри одного блока не может существовать несколько элементов с одинаковыми идентификаторами. Блок (или составной оператор) — это произвольное количество простых операторов языка Java, заключенных в фигурные скобки.

2.2. Язык Java чувствителен к регистру символов в идентификаторах.

3. С точки зрения соглашения об оформлении кода имя переменной должно начинаться со строчной буквы (с заглавной начинаются имена классов), а символ доллара не используется вовсе.

3.1. Если имя переменной состоит из нескольких слов, пробелы недопустимы. Каждое следующее слово рекомендуется писать с большой буквы. Желательно подбирать такие имена, чтобы код был максимально читаем. Например: superCounter, myDomesticAnimal

3.2. Если переменная сохраняет постоянное значение, то каждое слово следует писать заглавными буквами и отделять при помощи символа подчеркивания. Например, static final int NUMBER_OF_HOURS_IN_A_DAY = 24

Widowmaker1984, блог «Java для собеседований»

Вопрос 1 (ключевые слова)

"Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?"

1. Ключевые слова — это "зарезервированные" слова, которые не могут быть употреблены в качестве константы, переменной или любых других имен идентификаторов.

1.1. Также в качестве идентификаторов не могут быть использованы слова true, false, и null. Но они не являются не "ключевыми словами", а "литералами", т.е. интерпретируются компилятором, как фиксированное значение одного из допустимых типов. Скажем, true значение булевой переменной, а null — ссылочной.

2. В Java зарезервировано 50 ключевых слов. Для удобства их можно разбить на категории.

скрытый текст2.1. Не используются const и goto. Это ключевые слова языка C++, не нашедшие применения в Java, и зарезервированные в т.ч. для более ясных сообщений об ошибках, если данные слова будут неправильно использоваться в программах. В Java вместо const для создания константных переменных/полей используется final, а вместо goto — сочетание break, continue и return.

2.2. Примеры категорий ключевых слов:

- Примитивные типы данных (byte, short, char, int, long, float, double, boolean).
- Циклы и ветвления (do, while, for, break, continue, if, else, switch, case, default).
- Обработка исключений (try, catch, finally, throw, throws).
- Области видимости (private, public, protected).
- Многопоточность (synchronized, volatile)
- Связанные с пакетом (package, import).
- Связанные с объявлением (class, interface, extends, implements, final, static, abstract)
- Связанные с методом (return, void, native).
- Создание, ссылка на класс, его члены (new, this, super).
- Не используются (const, goto).
- Прочие ключевые слова (enum, assert, instanceof, transient, strictfp).

2.3. Подробное описание ключевых слов:
http://smart.inf.ua/lessons/osnov/009_keywords.html

Widowmaker1984, блог «Дом на краю кладбища»

"Пунктум" несет смерть в народ

Widowmaker1984, блог «Дом на краю кладбища»

Сингулярность наступает

Пятница. Вечер. Звонок на сотовый телефон. Чей-то голос едва слышно бормочет про банк ВТБ. Отвечаю:

 

— Извините, вас не слышно.

— Удобно ли вам разговаривать? (все так же тихо)

— Мне разговаривать не удобно, потому что я вас не слышу.

— Скажите, а когда перезвонить, чтобы вам было удобно разговаривать?

— Если вы про одобренный кредит, то было бы крайне удобно, чтобы вы вообще мне никогда не перезванивали.

— Хорошо, мы перезвоним вам через <неразборчиво> дней.

 

Дальнейшее — молчание. Выждав некоторое время, я сбросил звонок. Возможно, будущее уже наступило и в ВТБ теперь вместо людей работают плохо написанные чат-боты?

Widowmaker1984, блог «Дом на краю кладбища»

Преступление и наказание, part 2

Однажды на первом курсе нашей группе предложили написать текст на уже не помню какую тему. С прицелом на зачет автоматом.

 

На заданную тему я сразу решил забить, ведь почему бы и нет. И вместо нее принялся за фанфик-продолжение по «Преступлению и наказанию». Не остановило даже, что оригинал я дочитал тогда лишь до смерти Мармеладова, в остальном ограничившись кратким пересказом для школьников. Главное я помнил ясно: в самом конце Раскольников сидит на каторге и читает Евангелие. С этого и решено было начать.

 

Предложенная Достоевским «история постепенного обновления человека» меня, видимо, увлекла недостаточно, поэтому в моем сиквеле Раскольников, досрочно (при помощи дореволюционной коррупции) освободившись с каторги, успешно переквалифицировался в киллера. Ну, чтобы наработанный скилл с топором не пропадал. Окружающий город по возможности такому сюжету соответствовал, напоминая Петербург скорее из фильма "Брат".

 

Евангелие, впрочем, Раскольников все равно не забрасывал, превратившись в моем представлении в адепта этакого православного дзэна, сперва очищающего разум чтением Библии, а затем разбирающего врагов на части с филигранной точностью достигшего сатори и обкурившегося весенней сакурой самурая. Фанфик заканчивался коротким, но кровожадным «экшеном» с участием топора и тремя трупами (ну, потому что в первой части жертв было двое, а в сиквеле, как положено, в количестве и качестве фрагов ожидался лавинообразный рост).

 

Дальше предполагалась глава, где Порфирий Петрович осматривал мелко нарубленные тела и под конец с интонациями лейтенанта Коломбо изрекал что-то про знакомый почерк убийцы. Но этому удивительному замыслу уже не предстояло воплотиться, потому что отпущенная на текст пара закончилась, да и для зачета автоматом написанного хватило с лихвой.

 

Зачет, разумеется, был по социологии.

 

 

Widowmaker1984, блог «Дом на краю кладбища»

Платон: начало

Вечер пятницы и вводная лекция о Платоне под звездным потолком в старом "Пунктуме". Благодаря которой можно:

 

1. Узнать об его философии еще меньше, чем вы знали о ней до начала лекции.

2. Прочувствовать атмосферу древнегреческого ситкома про обмен меди на золото и неудавшийся сеанс платонической любви (feat. Сократ).

3. Понять, что общего между любовью к мудрости и алконавтикой.

 

И заодно разобраться, что нужно (а на самом деле нет) делать, если преподаватель с курсов актерского мастерства выгоняет вас из аудитории, настойчиво мешая постигать ноуменальное.

 

 

 


Лучшее   Правила сайта   Вход   Регистрация   Восстановление пароля

Материалы сайта предназначены для лиц старше 16 лет (16+)