Вы достигли нового уровня

Уровень 10

Невысшее необразование

А давайте зададимся вопросом: зачем люди идут в ВУЗы?

Помните простую фразу: не будешь хорошо учиться – пойдешь дворником работать. Можно даже подумать, что все, кто идут учиться, – не хотят работать дворниками? А чего же тогда они хотят? Они хотят полную противоположность работе дворника.

Люди идут учиться в ВУЗ, чтобы иметь высокооплачиваемую, высококвалифицированную работу! Чтобы была возможность купить дом, машину. Иметь все, хоть и не всегда (одно из определений среднего класса).

Люди думают, что учеба в ВУЗе дает высокооплачиваемую, высококвалифицированную работу. Она не дает. Но ВУЗ про это молчит, а мы продолжаем верить, что «вот выучимся – получим отличную работу». 5 лет в среднем ВУЗе не приблизят вас к вашей «хорошей работе» ни на сантиметр. Потому, что:

1. Преподаватели в большинстве ВУЗов не могут научить вас быть профессионалом, ведь они сами мало что умеют.

Честно ответьте себе на вопрос: почему те, кто вас учат, работают в ВУЗах на своих небольших зарплатах? Потому, что они не могут претендовать на квалифицированные должности на рынке труда. Им не хватает ни опыта, ни квалификации. Кому хватает — те уходят. В лучших ВУЗах мира другая ситуация, но сейчас разговор не про них.

Как думаете, успешный финансист пойдет работать топ-менеджером в банк на зарплату в $3,000 в месяц или доцентом в ВУЗ на зарплату в $300 в месяц? Чаще всего в ВУЗах преподают профессионалы-неудачники, которые не смогли найти себе работу вне ВУЗа. Исключения есть, но их очень и очень мало.

Сразу оговорюсь, что есть в ВУЗах и хорошие преподаватели, и очень хорошие. Но их даже не меньшинство, их – единицы. Хороший преподаватель должен не только доступно и понятно преподавать свой предмет, но и сделать упор на практическую применимость этих знаний. Большинству преподавателей нет дела до актуальности их знаний.

2. Преподаватели средних ВУЗов превозносят науку и презирают профессиональную реализацию.

Корни этого следует искать в том, что все преподаватели не состоялись как профессионалы. И единственный способ найти себе оправдание – это то, что профессиональная реализация – это недостойное занятие. Если вы не ходите на лекции, потому что ездите на научные конференции, то вы – молодец. А если вы много пропускаете, потому что работаете – к этому совершенно другое отношение.

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

3. Ошибочный эталон для сравнения.

Очень часто студенты сравнивают себя со школьниками и гордятся тем, что знают гораздо больше. Эта иллюзия продолжается, пока человек не задумается о работе, и не обратит свой взор в другую сторону. Ведь если бы студенты сравнили себя с людьми, уже работающими в их будущей профессии, тогда бы увидели, что приближаются к цели миллиметровыми шагами.

Не надо в ВУЗе равняться на всех. Потому что если делать «как все», то и результат будет «как у всех». В группе большинство студентов — случайные люди, у которых нет больших перспектив. Может их запихнули в институт родители, они слабо представляют себе будущую профессию, всякое бывает.

Не нужно себя сравнивать с сокурсниками. Лучшим критерием ваших знаний и успехов будут ваши сделанные проекты, ваши успехи на работе. Соотносите себя не с «серой массой», а с рынком.

4. Профессиональное обучение составляет лишь маленькую часть того, что преподают в ВУЗе.

Когда вы придете на работу, вас спросят о том, что вы уже умеете делать, а не чему вас учили. Вашего начальника будет интересовать, что вы знаете и умеете из того, что необходимо на должности, на которую вы претендуете. Почти как в ВУЗе: вам ставят вполне конкретную задачу, но не объясняют, как ее делать, и ждут результата в конкретные сроки. Удачи!

Если вам читают в ВУЗе историю, а работать вы будете оператором в банке – это приближает вас к цели или удаляет от нее? Формально вы знаете больше. Значит – приближает? Но фактически, с каждым семестром, у вас остается все меньше и меньше времени, чтобы получить ценные профессиональные знания, а их объем остается прежним. Т.е. реально – отдаляет.

5. У ВУЗа нет цели «сделать из вас высококлассного профессионала».

Очень сложно попасть в цель, когда ты в нее не целишься. Вас превращают во всесторонне развитого специалиста. Особенно это характерно для Европы. Такое «второе общее среднее образование». Забыв только упомянуть, что человек, который учит все – не знает толком ничего.

Помните три цели ВУЗа: наука, общее образование и профессиональное образование? Как думаете, что пришлось сократить, чтобы добавить науку и общее образование? Правильно: профессиональные дисциплины. И вы все еще думаете, что цель ВУЗа – сделать из вас профессионала?

6. Если человек учит больше двух предметов одновременно, он зря тратит свое время.

После школы это утверждение кажется ошибочным. Но на работе понимаешь, как оно справедливо. В школе уроки такие короткие, не потому что это эффективно, а потому что школьник – еще ребенок, и он просто не способен концентрироваться больше часа. Но частые переключения задач мешают мозгу эффективно думать. А на работе с вас будут требовать, как со взрослого, и тут частые переключения между задачами начнут сильно снижать вашу эффективность.

Почему, вы думаете, вы так быстро готовитесь к экзаменам? Вы просто не переключаетесь на другие задачи. Отсюда и резко возросшая эффективность. Учеба маленькими кусочками – это откровенная глупость. Представьте, что вы сидите на диете всего 6 часов в неделю, и как скоро вам придется ждать результата?

7. В вузе человек только поверхностно знакомится с предметами.

Допустим, вы что-то учите два семестра. У вас две лекции и две практики в неделю. Серьезный подход по меркам универа. А сколько же это будет часов? 4 пары по 2 академических часа (1.5 обычных) – это 6 часов в неделю.

В первом семестре мы учимся 4 месяца: сентябрь, октябрь, ноябрь, декабрь. Во втором еще 4: февраль, март, апрель, май. Итого: 8 месяцев по 4.5 недели в каждом и 6 часов в неделю. 216 часов в год.

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

8. Вам преподают самые общие, малополезные и устаревшие знания.

Каждое знание имеет разную ценность в зависимости от проблемы, которую вам предстоит решить. Если вы тонете, то умение плавать гораздо полезнее курса философии, не так ли? А если устраиваетесь на работу кассиром, то умение считать важнее знания семи иностранных языков на базовом уровне.

Самые полезные навыки для вашей профессиональной реализации – это, безусловно, практический опыт и знание последних достижений в вашей профессии. Преподаватель среднего ВУЗа – чаще всего никогда не имел реального опыта в вашей будущей профессии и не знаком с последними достижениями. А если где-то про них и прочитал, то понятия не имеет об их ценности, как и когда их применять.

Даже если вы выучите 100 ненужных предметов, они не заменят 10 необходимых.

9. Практические навыки в 10 раз ценнее теоретических знаний.

В жизни и на работе нам часто приходится что-то ДЕЛАТЬ. Если вы знаете, как делать, или думаете, что знаете, это еще не значит, что вы можете это сделать. Вы знаете, что курить вредно, и смогли бросить курить? Вы знаете, что заниматься спортом правильно, и можете каждый день им заниматься? Вы знаете, что иностранные языки полезны для карьеры и, конечно, смогли выучить парочку?

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

Вы можете выучить правила дорожного движения на «хорошо» и «отлично», но ездить вы все равно не сможете. Теория – это хорошее подспорье для практики. Представьте, что вы строите стену: кирпичи – это практика, а раствор – это теория. Без раствора (теории) стена будет неустойчивой, но без кирпичей (практики) от вашей теории вообще нет никакого толку.

Так что, господа, разделите ваши 5 лет в вузе на 10! Полгода – вот истинный результат ваших многолетних «усилий». Хотите доказательств? Когда вы устроитесь на работу, и проработайте полгодика, вы поймете, что ваши ВУЗовские знания – удвоились.



Любишь программирование – купи подписку, поддержи JavaRush. Все собранные деньги идут на развитие проекта, на написание лекций и задач, на аренду сервера и поддержание сайта.

Уже написано 600+ мини-лекций, в которых интересно преподносятся новые темы, даны примеры, таблицы, графики и картинки.

Мы сделали 1000+ задач и несколько автоматических тестов для каждой них. Благодаря этому вы не ждете по полчаса анализа своих решений, а задачи проверяются практически мгновенно. Мы боремся, чтобы проверка задач занимала меньше секунды, чтобы экономить ваше время. Чтобы вам было удобно, приятно и комфортно заниматься.

Недавно мы добавили автоматические подсказки для первых уровней. Сервер отлавливает самые распространенные ошибки и дает рекомендации по их исправлению. Мы отлавливаем опечатки, неверный порядок параметров, перепутанные минимум и максимум, и еще два десятка самых распространённых ошибок.

Я и мои друзья стараемся создать очень эффективный обучающий сервис. Поддержите нас, и тысячи людей, которые любят программирование так же, как и вы, смогут получить опыт и устроиться на интересную для них работу.

Чем больше программистов – тем лучше. Много крутых программистов – это много сложных, дорогих и интересных проектов. Мы вместе создаем наше будущее.

1. Рассказ про жёсткую типизацию объектов

- Привет, Амиго!

- Привет, Элли!

- Сегодня у меня хорошее настроение, поэтому расскажу тебе кое-что интересное. И начну я с типизации примитивных типов в Java.

- В Java у каждого объекта и у каждой переменной есть свой жёстко заданный неизменяемый тип. Тип переменной определяется ещё в процессе компиляции программы, тип объекта – при его создании. Тип нового созданного объекта и/или переменной остаются неизменными все их время жизни. Пример:

Код Описание
int a = 11;
int b = 5;
int c = a / b; // c == 2
a / b – это деление нацело. Ответом будет два. Остаток от деления просто отбрасывается.
int a = 13;
int b = 5;
int d = a % b; // d == 3
В d будет храниться остаток от деления a на b нацело. Остаток равен 3.

- Но есть и пара интересных нюансов, которые следует помнить.

- Во-первых, ссылочная переменная не всегда хранит значение такого же типа, как и она.

- Во-вторых, при взаимодействии переменных двух разных типов, они должны быть сначала преобразованы к одному общему типу.

- А как же деление? Если разделить 1 на 3, мы получим 0.333(3). Ведь так?

- Нет не так. При делении двух целых чисел, результатом тоже будет целое число. Если разделить 5 на 3, то ответом будет 1 и два в остатке. Остаток при этом отбрасывается.

- Если разделить 1 на 3, то мы получим 0 (и единицу в остатке, который отбросится).

- А что делать, если я все же хочу получить 0.333 ?

- В Java числа перед делением лучше всего приводить к вещественному (дробному) типу путем умножения их на вещественную единицу – 1.0

Код Описание
int a = 1/3; a будет содержать 0
double d = 1/3; d будет содержать 0.0
double d = 1.0 / 3; d будет содержать 0.333(3)
double d = 1 / 3.0; d будет содержать 0.333(3)
int a=5, b=7;
double d = (a*1.0) / b;
d будет содержать 0.7142857142857143

- Понятно.

2. Список базовых типов

- Привет, Амиго!

- Привет, Риша!

- Ты уже изучил основы синтаксиса Java, поэтому я хочу рассказать тебе некоторые вещи более углубленно.

- Сегодня я расскажу тебе немного про примитивные типы, а также - сколько памяти они занимают. Тебе это пригодится и, возможно, даже сегодня. Вот эти типы:

Тип Размер,
байт
Диапазон значений Значение по умолчанию Описание
byte 1 -128 .. 127 0 Самое маленькое целое - один байт
short 2 -32,768 .. 32,767 0 Короткое целое, два байта
int 4 - 2*109 .. 2*109 0 Целое число, 4 байта
long 8 - 9*1018 .. 9*1018 0L Длинное целое, 8 байт
float 4 -10127 .. 10127 0.0f Дробное, 4 байта
double 8 -101023 .. 101023 0.0d Дробное, двойной длины, 8 байт
boolean 1 true, false false Логический тип (только true & false)
char 2 0..65,535 '\u0000 ' Символы, 2 байта, все больше 0
Object 4 Любая ссылка или null. null Хранит ссылки на объекты типа Object или классов наследников

- Давай я остановлюсь на каждом типе подробнее.

- Тип byte – это самый маленький тип целых чисел. Каждая переменная этого типа занимает всего один байт памяти, поэтому он может хранить значения в диапазоне от -128 до 127.

- А зачем такой маленький тип нужен. Почему нельзя везде использовать int?

- Можно. Но если ты создаешь очень большие массивы, и тебе не нужно хранить там значения больше 100, то почему бы не воспользоваться таким типом. Так ведь?

- Тип short – ровно в два раза длиннее типа byte и тоже хранит только целые числа. Самое большое число, которое в него вмещается – это 32767. Самое большое отрицательное число – это -32768.

- Тип int ты уже знаешь. Он может хранить целые числа до двух миллиардов, как положительные, так и отрицательные.

- Тип float – создан для хранения вещественных (дробных) чисел. Его размер 4 байта.

- Все дробные числа хранятся в памяти в очень интересной форме.

- Например, число 987654.321 можно представить как 0.987654321*106. Поэтому в памяти оно будет представлено как два числа «0.987654321» (мантиса - значащая часть числа) и «6» (экспонента - степень десятки)

- А зачем так сделано?

- Такой подход позволяет хранить гораздо большие числа, чем int, используя всего 4 байта. Но при этом мы жертвуем точностью. Часть памяти расходуется на хранение мантиссы, поэтому такие числа хранят всего 6-7 знаков после запятой, остальные отбрасываются.

-Такие числа еще называют «числа с плавающей запятой» или «числа с плавающей точкой (floating point number)» . Отсюда, кстати, и название типа – float.

- Ясно.

- Тип double – это такой же тип, как и float, только в два раза длиннее – он занимает восемь байт. (double – двойной, по-английски). И предельный размер мантиссы и количество значащих цифр в нем больше. Если тебе нужно хранить вещественные числа – старайся использовать именно этот тип.

- Тип char – гибридный тип. Его значения можно интерпретировать и как числа (их можно складывать и умножать) и как символы. Так было сделано потому, что хоть символы и имеют визуальное представление, для компьютера они в первую очередь просто числа. И работать с ними как с числами гораздо удобнее. Тут еще есть одно замечание: тип char строго положительный – отрицательных значений он хранить не может.

- Тип boolean –логический тип и может хранить всего два значения: true(истина) и false(лож).

- Тип Object, хоть и представлен в таблице, примитивным типом не является. Это базовый класс для всех классов в Java. Во-первых, все классы считаются унаследованными от него, а значит, содержат его методы. А во-вторых, ему можно присваивать ссылки на объекты любого типа. В том числе и null – пустую ссылку.

- Узнал очень много нового. Спасибо за урок, Риша.

3. Преобразование типов. Расширение и сужение типов.

- А теперь самое интересное. Я расскажу тебе про преобразование типов. Хоть типы переменных всегда неизменны, есть место, где можно проводить преобразование типов. И место это – присваивание.

- Можно присваивать друг другу переменные разных типов. При этом значение, взятое из переменной одного типа, будет преобразовано в значение другого типа и присвоено второй переменной.

- В связи с этим, можно выделить два вида преобразования типов: расширение и сужение. Расширение похоже на перекладывание из маленькой корзинки в большую – операция проходит незаметно и безболезненно. Сужение типа – это перекладывание из большой корзинки в маленькую: места может не хватить, и что-то придётся выбросить.

-Вот типы, отсортированные по размеру «корзинки»:

- Тут есть пара замечаний:

1 char такая же корзинка, как и short, но свободно перекладывать из одной в другую нельзя: при перекладывании значения из short в char, всегда будут теряться значения меньше 0. При перекладывании из char в short будут теряться значения больше 32-х тысяч.

2 При преобразовании из целых чисел в дробные, могут отбрасываться самые младшие части числа. Но т.к. смысл дробного числа в том, чтобы хранить приблизительное значение, то такое присваивание разрешается.

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

- Вот как нужно присваивать переменные разных типов:

Код Описание
byte a = 115;
int b = a;
Расширение типа. Все отлично.
int c = 10000;
byte d = (byte) c;
Сужение типа. Нужно явно отбросить лишние байты.
int c = 10;
byte d = (byte) c;
Сужение типа. Нужно явно отбросить лишние байты, даже если они равны 0.
float f = 10000;
long l = (long) (f * f);
float f2 = l;
long l2 = (long) f2;
При присваивании к float, происходит расширение типа. При присваивании значения float к long, происходит сужение – необходимо приведение типа.
double d = 1;
float f = (float) d;
long l = (long) f;
int i = (int) l;
short s = (short) i;
byte b = (byte) s;
Сужение во всех операция присваивания, кроме первой строки, требует указания явного преобразования типа.

- Оператор приведения типа нужно указывать перед числом/переменной каждый раз, когда происходит отбрасывание части числа или сужение типа. Он действует только на число/переменную, которое идет непосредственно за ним.

Код Описание
float f = 10000;
long l = (long) f * f;
К типу long приводится только одна переменная из двух: умножение long и float дает float.
float f = 10000;
long l = (long) (f * f);
Тут все выражение приводится к типу long.

- Ясно.

4. Задачи на преобразование целых типов

- Привет, Амиго! Вот тебе задачи на преобразование целых типов. Расставь где нужно оператор приведения типа:

Задачи
1. Задача №1 на преобразование целых типов

Расставьте правильно операторы приведения типа, чтобы получился ответ: d > 0
int a = 0;
int b = (byte) a + 46;
byte c = (byte) (a*b);
double f = (char) 1234.15;
long d = (short) (a + f / c + b);
2. Задача №2 на преобразование целых типов

Расставьте правильно операторы приведения типа, чтобы получился ответ: d = 3.765
int a = 15;
int b = 4;
float c = a / b;
double d = a * 1e-3 + c;
3. Задача №3 на преобразование целых типов

Добавить одну операцию по преобразованию типа, чтобы получался ответ: b = 0
float f = (float)128.50;
int i = (int)f;
int b = (int)(i + f);
4. Задача №4 на преобразование целых типов

Добавить одну операцию по преобразованию типа, чтобы получался ответ: nine = 9
short number = 9;
char zero = '0';
int nine = (zero + number);
5. Задача №5 на преобразование целых типов

Расставьте правильно операторы приведения типа, чтобы получился ответ: c = 256
int a = (byte)44;
int b = (byte)300;
short c = (byte)(b - a);

5. Преобразование к типу String

- Сейчас будет меленькая, но интересная тема – преобразование к типу String.

- В Java к типу String можно преобразовать любые типы данных.

- Звучит заманчиво.

- На самом деле все еще лучше. Практически все типы можно приводить к типу String неявно. Лучше всего это заметно, когда мы складываем две переменных: String и «не String». При этом «не String» переменная преобразовывается к типу String.

- Вот посмотри пару примеров:

Команда Что происходит на самом деле
int x = 5;
String text = "X=" + x;
int x = 5;
String s = "X=" + Integer.toString(x);
Cat cat = new Cat("Vaska");
String text = "My cat is " + cat;
Cat cat = new Cat("Vaska");
String text = "Vaska" + cat.toString();
Object o = null;
String text = "Object is " + o;
Object o = null;
String text = "Object is " + "null";
String text = 5 + '\u0000' + "Log"; int i2 = 5 + (int) '\u0000';
String text = Integer.toString(i2) + "Log";
String text = "Object is " + (float) 2 / 3;
float f2 = ((float) 2) / 3;
String text="Object is "+Float.toString(f2);

Вывод: Если мы складываем String и «любой другой тип», то второй объект преобразуется к типу String.

- Обрати еще внимание на четвертую строку таблицы. Все операции выполняются слева направо, поэтому сложение 5 + '\u0000' происходит как сложение целых чисел.

- Т.е. если я напишу, код типа: String s = 1+2+3+4+5+"m", то получу s = "15m" ?

- Ага. Сначала произойдет сложение чисел, а затем – преобразование их к строке.

6. Задание на преобразование типов

- А теперь небольшой урок от Диего. Кратко и по существу о преобразовании ссылочных типов.

- Начнем мы пока только с переменной типа Object. Этой переменной можно присвоить ссылку любого типа (расширение типа). Но чтобы выполнить обратное присваивание (сужение типа) приходится явно указывать операцию приведения:

Код Описание
String s = "mama";
Object o = s; // o хранит String
Типичное расширение ссылочного типа
Object o = "mama";// o хранит String
String s2 = (String) o;
Типичное сужение ссылочного типа.
Integer i = 123; //o хранит Integer
Object o = i;
Расширение типа.
Object o = 123; //o хранит Integer
String s2 = (String) o;
Ошибка во время исполнения! Невозможно привести ссылку на число к ссылке на строку.
Object o = 123; //o хранит Integer
Float s2 = (Float) o;
Ошибка во время исполнения! Невозможно привести ссылку на целое число к ссылке на дробное число.
Object o = 123f; // o хранит Float
Float s2 = (Float) o;
Приведение к своему типу. Операция сужения ссылочного типа.

- При расширении или сужении ссылочных типов никакого изменения объекта не происходит. Сужающим (или расширяющим) является именно операция присваивания, при которой либо выполняется «проверка соответствия типов переменной и ее нового значения» либо нет.

- Тот редкий пример, когда все ясно и понятно.

- Чтобы не было ошибок, как в примерах, есть способ узнать, какой именно тип сохранили в переменную типа Object:

Код
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       //o хранит объект типа Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)        
{
    Float f2 = (Float) o;            //отработает именно этот if
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

- Желательно выполнять такую проверку, перед каждым сужением типа, если тип сохраненного объекта на 100% не известен.

- Понятно.

7. Вещественные типы

- Вот тебе пару интересных вещей про вещественные (они же дробные) типы. Начнём вот с этого примера:


float f = 3 / 5;

В результате данного вычисления значение f будет равно… нулю!

- Мне Риша что-то подобное рассказывал…

- Да? Вот и отлично. Повторение – мать учения.

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

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


- Вот как можно решить данную проблему:

Запись дробного числа:
float f = 3.0f / 5.0f;
float f = 3.0f / 5;
float f = 3 / 5.0f;

- А если в делении участвуют переменные?

- Тогда – вот так:

Преобразование целой переменной в вещественную
int a = 3, b = 5;
float f = (a * 1.0f) / b;
int a = 3, b = 5;
float f = a / (b * 1.0f);
int a = 3, b = 5;
float f = (a*1.0) / (b*1.0);
int a = 3, b = 5;
float f = (float) a / b;

- Не очень красиво. А что, нет какой-нибудь более удобной операции деления?

- Нет. Это все, что есть.

- Ну, ок, думаю, проблем не будет.

8. Литералы

- И, наконец, урок от Риши в лекторском стиле: куча бесполезной информации. Все лекторы обожают такое. Но ты хотя бы одним глазком посмотри, и хватит с тебя.

- Я – готов.

- Сегодня я расскажу тебе, что такое литералы. Литералы - это все данные, которые записаны прямо в Java-коде. Примеры:

Код Описание
"Mama mila ramu" Это литерал. Его тип - String
115 Это литерал. Его тип - int
0.256 Это литерал. Его тип – float
'\u1234' Это литерал. Его тип – char

- На самом деле литералов несколько больше. С помощью литералов можно задать значения любых известных типов:

Литерал Тип Описание
123676 int Целое число
22223333444433332222L long Длинное целое число
12.323232323f float Дробное число
12.33333333333333333d double Длинное дробное число
"Mama"
""
"Mama\nMila\nRamu\u123"
String Строка
'\u3232'
'T'
'5'
char Символ
true, false boolean Логически тип
null Object Ссылка на объект

- Т.е. код – это методы, классы, переменные,…, а литералы – это конкретные значения переменных, записанные прямо в коде. Так, я правильно понял?

- Да, так и есть.

- Отлично. Наконец-то эта Java начинает складываться в одну картину.

9. Лекция по типам

- Супер. Наконец-то моя любимая тема - преобразования типов. Помню, ещё мой профессор когда-то “увлекательно” рассказывал мне о них. Я тогда ничего не понял. Но ты, благодаря этим замечательным лекциям, конечно же, всё поймёшь. Вот они:

Лекция по типам

10. Хулио

- Вау! Ну, ты нереально крут, Амиго! Столько всего выучил всего за две недели!! Ну ты и монстр. Кстати, как насчёт развлекона после двух недель рабского труда?

Оригинал видео на YouTube

11. Домашние задания

- Здорово, боец!

- Здравия желаю, капитан Бобров!

- У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.

Дополнительные задания для выполнения в Intellij Idea
1. Правильный ответ: d=2.941

Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=2.941
2. Правильный ответ: d=5.5

Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=5.5
3. Правильный ответ: d=1.0

Добавить одну операцию по преобразованию типа, чтобы получался ответ: d=1.0
4. Большая зарплата

Вывести на экран надпись «Я не хочу изучать Java, я хочу большую зарплату» 40 раз по образцу.

Образец:
Я не хочу изучать Java, я хочу большую зарплату
не хочу изучать Java, я хочу большую зарплату
не хочу изучать Java, я хочу большую зарплату
е хочу изучать Java, я хочу большую зарплату
хочу изучать Java, я хочу большую зарплату
хочу изучать Java, я хочу большую зарплату
5. Количество букв

Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита). Вывести результат на экран.

Пример вывода:
а 5
б 8
в 3
г 7

я 9
6. Конструкторы класса Human

Напиши класс Human с 6 полями. Придумай и реализуй 10 различных конструкторов для него. Каждый конструктор должен иметь смысл.
7. Расставьте минимум static-ов

Расставьте как можно меньше модификаторов static так, чтобы пример скомпилировался.
8. Массив списков строк

Создать массив, элементами которого будут списки строк. Заполнить массив любыми данными и вывести их на экран.
9. Одинаковые слова в списке

Ввести с клавиатуры в список 20 слов. Нужно подсчитать количество одинаковых слов в списке. Результат нужно представить в виде словаря Map<String, Integer>, где первый параметр – уникальная строка, а второй – число, сколько раз данная строка встречалась в списке. Вывести содержимое словаря на экран.

В тестах регистр (большая/маленькая буква) не влияет на результат.
10. Безопасное извлечение из списка

Создать список целых чисел. Ввести с клавиатуры 20 целых чисел. Создать метод по безопасному извлечению чисел из списка:
int safeGetElement(ArrayList<Integer> list, int index, int defaultValue)

Метод должен возвращать элемент списка (list) по его индексу (index). Если в процессе получения элемента возникло исключение, его нужно перехватить, и метод должен вернуть defaultValue.

- Те задания были для духов. Для дедушек я добавил бонусные задания повышенной сложности. Только для старослужащих.

1. Нужно исправить программу, чтобы компилировалась и работала.

Задача: Программа демонстрирует работу HashMap: вводит с клавиатуры набор пар (номер и строку), помещает их в HashMap и выводит на экран содержимое HashMap.
2. Нужно добавить в программу новую функциональность.

Задача: Программа вводит с клавиатуры пару (число и строку) и выводит их на экран.
Новая задача: Программа вводит с клавиатуры пары (число и строку), сохраняет их в HashMap. Пустая строка – конец ввода данных. Числа могу повторяться. Строки всегда уникальны. Введенные данные не должны потеряться!
Затем программа выводит содержание HashMap на экран

Пример ввода:
1
Мама
2
Рама

Пример вывода:
1 Мама
2 Рама
3. Задача по алгоритмам.

Задача: Ввести с клавиатуры 30 чисел. Вывести 10-е и 11-е минимальные числа.
Пояснение:
Самое минимальное число – 1-е минимальное.
Следующее минимальное после него – 2-е минимальное

Пример:
1 6 5 7 1 15 63 88
Первое минимальное – 1
Второе минимальное – 1
Третье минимальное – 5
Четвертое минимальное – 6