День в истории Блогхауса: 22 мая 2018

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

Вопрос 40 (аргументы переменной длины)

"Может ли метод принимать разное количество параметров (аргументы переменной длины)?"

1. Начиная с Java 5 и выше можно передавать методу переменное количество аргументов одного типа. Параметр в методе объявляется следующим образом:
[ИмяТипа]... [ИмяПараметра]

скрытый текст1.1. При объявлении метода Вы указываете тип, за которым следует многоточие (...). В методе может быть указан только один параметр переменной длины, и этот параметр должен быть последним параметром. Любые регулярные параметры должны предшествовать ему.

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

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

3.1. Например, следующие перегруженные версии метода vaTest () изначально неоднозначны, несмотря на то, что одна из них принимает обычный параметр (т.е. отличается по сигнатуре):

static void vaTest(int ... v) {
// ...
static void vaTest(int n, int ... v) {
//...
}

Санди Зырянова, блог «Дупло козодоя»

Инквизиция и кошки

Дири-дири-дом
Р, джен, хоррор
графическое насилие


Историческая справка. В 1555 году в Амстердаме Майн Корнелиус, несчастную колдунью из Роермонда, приговорили к сожжению после признания в том, что она вступила в сговор с кошками, и те приходили к ней в дом танцевать.

…Когда они приходили к Мейн в дом, было весело.
Сумерки спускались на плавные воды реки Рур и островерхие крыши домов; в домах загорались окна, а в подворотнях — кошачьи глаза. Кошки сторожко выходили из темноты, направляясь к дому Мейн, а Мейн брала старую потертую лютню и начинала наигрывать «Ох уж эти собачки» или «Дири-дири-дом». Первые две или три кошки обычно застывали под окном, прислушиваясь и пытаясь уловить ритм; Мейн нарочно выбирала медленные песни, чтобы им было легче. Потом кошек становилось больше. Все новые и новые коты собирались под стрельчатыми окнами Мейн: рыжие, белые, серые, черные — и вот уже пестрый пушистый ковер из кошачьих шубок устилал весь маленький переулок, — и тогда Мейн открывала двери и приглашала кошек внутрь.
скрытый текстТам их уже ждало угощение: Мейн никогда не скупилась на молоко для своих пушистых друзей. А когда множество маленьких мисочек пустело, Мейн снова бралась за лютню, только теперь она играла уже веселые и быстрые песни.
Плясовые…

Руки, закованные в колодки, занемели. Грязные волосы лезли в глаза, но Мейн уже не обращала на них внимания. Вчера ее полосовали бичом — втроем, целый день, палачи сменяли друг друга, бич свистел, вспарывая кожу… Сегодня раны подсохли, но стоило Мейн пошевелиться, как корка на них лопалась, и по спине, сводя с ума, начинала сочиться сукровица.
Ноги Мейн заковывать в колодки не стали — она все равно уже не могла стоять. После «испанского сапога» обе ноги у нее были раздроблены, набрякли и налились чернотой.
Мейн знала, что еще немного — и придет тюремщик, сунет ей в рот черствую корку, даст запить парой глотков несвежей воды, а потом явится отец ван Лаадер и снова начнет расспрашивать ее о «сношениях с дьяволом» и прочих ужасах. Мейн покорно отвечала на все его вопросы, хотя дикость этих вопросов пугала ее подчас больше, чем пытки и уготованная ей казнь на костре.
За собой Мейн не знала никакой вины перед Богом, кроме смерти лавочника Адденса. Сколько себя помнила Мейн, в ее доме всегда сушились целебные травы; мать то продавала средства для улучшения цвета лица стареющим купчихам, то перевязывала сломанные пальцы дюжим работникам с мануфактур, а то срывалась по первому зову и бежала принимать роды у соседок. А бабка, почти ослепшая и немощная, тайком — потому что инквизиторы не дремали — раскладывала пасьянсы и гадала на картах. Этому же с детства училась и Мейн Корнелиус, знахарка и повитуха из Роермонда. И весь маленький Роермонд, все эти рыбаки, красильщики, ткачи, купцы и менялы, слуги и лавочники, — все они знали и чтили Мейн, потому что больше не к кому им было обратиться в беде и в горести. Доктора, пользовавшие самых богатых, запрашивали за свои услуги слишком дорого, а священник мог лишь посоветовать молиться и уповать на Господа Бога, но Мейн — Мейн всегда была готова помочь за умеренную плату.
А по вечерам к Мейн сбегались кошки со всего Роермонда, чтобы потанцевать.
Когда Мейн играла грустные медленные мелодии, кошки важно скользили друг мимо друга, торжественно изгибая хвосты и прижимая уши в такт. Они шли по кругу, притопывая лапками, они покачивали головами, а при особенно жалобных аккордах останавливались и дружно пропевали: «Мяу!» Но вот медленный танец сменялся веселым и задорным — и кошки поднимались на задние лапки, помахивая передними. Свеча догорала, и лунный свет пробивался сквозь свинцовый переплет окна, и кошки лихо отплясывали на посеребренных луной досках, а их тени, трепетные и неверные, дрожали и метались по стенам, и Мейн не выдерживала: она вставала и сама начинала пританцовывать, притопывая ногой в башмаке с пряжкой.
Многие знали об этих вечерах у Мейн, а иные — особенно мальчишки, кто же не знает, что мальчишки самый любопытный народец? — даже подкрадывались по ночам к дому Мейн Корнелиус, чтобы понаблюдать за танцами кошек. И всяк знал, что если кошка заблудилась и не пришла домой, то нужно обратиться к Мейн — уж она-то обязательно найдет пропажу. Будь на месте Мейн другая женщина, кто-нибудь уже обязательно донес бы святейшим братьям доминиканцам, а те поставили бы в известность «Мировую руку»… Но кто же осмелится погубить добрейшую Мейн, единственную надежду многих жителей Роермонда? Пусть себе тешится своим невинным чудачеством — плясками с кошками!
И только лавочнику Адденсу это не нравилось.
Семья Адденсов владела небольшой бакалейной лавкой возле скульптурной мастерской господина ван Баадера. Одно время и сама Мейн покупала там свечи, мыло и пряности. Но как-то она заметила, что там продается не только бакалея, но и серебро, и шелка, и выглядели эти вещи странно. Лавочник Адденс на ее вопрос, почему он распродает старые вещи, ответил, что дела в лавке идут не лучшим образом — пришлось продать шелковую шаль и платье его матери. Но Мейн никогда не видела на госпоже Адденс ни этой шали, ни платья. Вскоре она поняла, что Адденс приторговывал краденым товаром.
Тогда Мейн резко упрекнула его — и Адденс стал осторожнее. А через месяц он явился свататься.
— Да вы, никак, не проспались после вчерашней пирушки, господин Адденс, — ответила ему тогда Мейн. — С чего бы это мне выходить за вас замуж? Вы моложе меня почти на десять лет, между прочим!
— Ты пожалеешь, — бросил в ответ Адденс, вырвал из рук у Мейн сверток — кусок шелка, который он вручил было ей в качестве подарка, и отправился восвояси.
Мейн слишком поздно поняла, что он таким образом пытался обезопасить себя. Ведь в лавке Адденсов по-прежнему сбывались краденые вещи.
Тот день был туманным, холодным и дождливым; отвратительный сырой зимний день, из тех, в которые хороший хозяин не выгонит из дому собаку, а добрый христианин — еретика. Впрочем, настолько добрых христиан ни в Роермонде, ни в Амстердаме уже не осталось: страх перед трибуналом инквизиции оказался сильнее страха Божьего. Адденс от Мейн отправился прямиком в трактир, а когда вывалился оттуда, хорошенько набравшись, уже стемнело. И вскоре послышались его отчаянные вопли — сбившись с пути, Адденс свалился в Рур.
Его, барахтавшегося в ледяном крошеве у берега, живо выловили. И, конечно, не кому иному, а Мейн Корнелиус пришлось пользовать простудившегося Адденса, хотя он оказался на редкость неблагодарным пациентом.
— Проклятая ведьма, — бранился он, приходя в себя. — Это из-за тебя я чуть не утонул! Погоди, вот поправлюсь — извещу о тебе трибунал…
Мейн побледнела.
Знахарка и повитуха всегда ходит по краю. Пока она исцеляет больных и помогает людям появиться на свет, церковь ее будто не видит. Но стоит ей однажды ошибиться — и на нее обрушатся любые казни: штраф, изгнание из города, бичевание, тюрьма... Разве что кто-нибудь из влиятельных друзей сумеет защитить бедолагу, однако на это не стоило рассчитывать: не раз перед трибуналом инквизиции оказывалась не только «ведьма», но и ее заступник. А Мейн надеяться было не на что.
Она была рыжей.
У нее был черный кот.
И по ночам в ее доме танцевали коты под напевы старинных голландских песенок…
Болезнь ли взяла верх над целительным искусством Мейн Корнелиус? Или же она случайно положила адонис и белладонну вместо мелиссы и фенхеля в отвар, которым отпаивала лавочника Адденса? Бог весть. Но брат Адденса, хорошо знавший и о его неудавшемся сватовстве, и о том, как бранила его Мейн за темные делишки, не сомневался: Мейн отравила Адденса нарочно.
…Избитую, простоволосую, в разорванной одежде, Мейн вывели из дома. Лютню прихватили с собой — как доказательство.
— Я ничего не делала! — кричала Мейн, вырываясь. — Я не ведьма, не еретичка!
— Ты вступила в сговор с кошками, женщина, — человек в коричневой сутане был недвижим и невозмутим. — Ты нечистыми чарами заставляла их плясать по ночам, и погубила немало душ…
— Неправда! Я никого не погубила!
Час был ранний, предрассветный — доминиканцы не любят действовать средь бела дня. Поэтому никто не видел, как уводили Мейн Корнелиус. И только Адденс-младший стоял в конце проулка и, злорадно ухмыляясь, наблюдал за ее арестом.
— Чертов клеветник! Будь ты проклят! — Мейн плюнула в его сторону. Губы у нее уже были разбиты, и плевок получился кровавым.
— Тьфу! Ведьма, чтоб тебя поскорее сожгли! — Адденс-младший поспешно перекрестился.
Но когда он вошел к себе в лавку, там его поджидал большой черный кот. Он сидел на любимом стуле Адденса и в упор смотрел на него. Ни крест, ни молитва, ни брызгание святой водой не помогли прогнать наглое животное. Адденс-младший даже подумал было — пусть остается и ловит мышей, хотя кошек он ненавидел. Однако кот Мейн Корнелиус не собирался ловить мышей. Он дождался, когда Адденс-младший улегся спать, и уселся к нему на грудь.
Грудь у всех Адденсов была слабая — и у отца их, и у деда, и у лавочника Адденса, и у его старшего брата. Не просыпаясь, Адденс-младший закашлялся, захлебнулся, из горла его хлынула желчь, и утра он уже не увидел.
Никто больше не видел и кота Мейн. Только коты и кошки горожан еще долго собирались к ее дому в сумерках, но напрасно ждали они, когда же зазвучит лютня и приоткроется дверь, приглашая на вечеринку…

— Я не убивала лавочника Адденса, — в последний раз, собравшись с силами, прошептала Мейн Корнелиус. — И я не губила христианские души, я не сговаривалась об этом с кошками, я не занималась блудом с сатаной…
— Срань Господня! — прикрикнул на нее глава трибунала. — Ты призналась во всем на следствии, а теперь отказываешься!
Мейн не знала, что отказ от предыдущих показаний — это смертный приговор. Когда ее привезли в Амстердам, ей даже не сказали, в чем ее обвиняют, зато продержали три дня без сна, воды и пищи, а потом пытали и били, били и пытали. Не выдержав пыток, Мейн и впрямь согласилась, что была ведьмой и даже вызывала бурю, приказывая кошкам плясать быстрее, но, придя в себя, ужаснулась…
Теперь Мейн было уже все равно. Одетая в рубашку — особую «рубашку кающегося грешника», привязанная к столбу, она стояла на городской площади, а под ногами у нее громоздились вязанки хвороста. Дышать ей было больно: переусердствовав, палач сломал ей несколько ребер. Толпа, собравшаяся поглазеть на аутодафе, выкрикивала ругательства, в Мейн полетело несколько камней.
Хворост занялся. К ногам — грязным, окровавленным, распухшим от гангрены — подбежали огненные языки, похожие на рыжие кошачьи хвосты. Они тронули почерневшую кожу, мгновенно взявшуюся волдырями, пламя затрещало, волдыри начали лопаться. Вот и подол вспыхнул, и затрещали свалявшиеся, слипшиеся от крови волосы, спускавшиеся ниже пояса…
Боли Мейн не почувствовала. Ее заплывшие от побоев глаза уже закрылись, и ей казалось, что к ней ластятся рыжие кошки. Трутся о подол рубахи, потом встают на задние лапки, покачивают головами, кружатся, мяукают в такт. Мейн подняла голову и запела «Дири-дири-дом».
И протяжным печальным «мя-а-а-у» ответили ей из всех закоулков кошки Амстердама.

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

Вопросы 35-39, 41, 42, 44 (методы, их переопределение и перегрузка)

"Дайте определение понятию «метод»."
"Что такое сигнатура метода?"
"Какие методы называются перегруженными?"
"Могут ли нестатические методы перегрузить статические?"
"Расскажите о переопределение методов."
"Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?"
"Как получить доступ к переопределенным методам родительского класса?"
"Чем отличается переопределение от перегрузки?"


1. Метод в Java — это законченная последовательность действий (инструкций), направленных на решение отдельной задачи, которая вызывается по определенному имени. По сути, это аналог функций и процедур из более ранних (не ООП) языков. Только эти функции являются членами классов и для различия с обычными функциями, согласно терминологии объектно-ориентированного программирования, называются методами.

1.1. Методы определяются внутри классов.

1.2. Если тип возвращаемого значения не void, в теле метода должен быть хотя бы один оператор return [выражение], где тип выражения должен совпадать с типом возвращаемого значения. Этот оператор возвращает результат вычисления выражения в точку вызова метода.

1.2.1. Если тип возвращаемого значения – void, возврат из метода выполняется либо после выполнения последнего оператора тела метода, либо в результате выполнения оператора return без указания выражения (таких операторов в теле метода может быть несколько).

скрытый текст2. Сигнатура метода — это имя метода плюс его параметры (причем порядок параметров имеет значение). В сигнатуру метода не входит возвращаемое значение, бросаемые им исключения, а также модификаторы (в т.ч. public, protected, private, abstract, static, final, synchronized, native, strictfp).

3. В языке Java в пределах одного класса можно определить два или более метода, которые совместно используют одно и то же имя, но имеют разные сигнатуры. Когда это имеет место, методы называют перегру­женными, а о процессе говорят как о перегрузке метода (method overloading).

3.1. Когда метод вызывается, то по количеству фактических параметров и/или их типам среда выполнения Java определяет, какую именно версию перегруженного метода надо вызывать (тип возвращаемого значения во внимание не принимается, хотя, в принципе, он тоже может отличаться у разных версий перегруженных методов).

4. Кроме перегрузки существует также замещение, или переопределение методов (англ. overriding). Замещение происходит, когда класс потомок (подкласс) определяет некоторый метод, который уже есть в родительском классе, таким образом новый метод заменяет метод суперкласса. У нового метода подкласса должна быть та же сигнатура и тип возвращаемого результата, что и у метода суперкласса.

4.1. Переопределяемые методы лучше предварять аннотацией @Override. В этом случае компилятор получает возможность проверить, что вы переопределили метод, а не написали новый. Таким образом можно избежать некоторых ошибок из-за невнимательности.

4.2. В Java, когда подкласс содержит метод, переопределяющий метод суперкласса, то он может помимо своего метода вызывать и метод суперкласса при помощи ключевого слова super.

4.2.1. В отличие от вызова конструктора суперкласса вызов метода предка можно осуществлять в любом месте переопределенного метода потомка (не обязательно в первой строчке).

4.3. При переопределении метода нельзя сузить модификатор доступа к методу (например с public в MainClass до private в Class extends MainClass). Также обычно нельзя изменить тип возвращаемого значения (будет ошибка "attempting to use incompatible return type)". Но можно сузить возвращаемое значение, если они совместимы.

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

5.1. При перегрузке необходимый метод определяется на этапе компиляции на основе сигнатуры вызываемого метода, тогда как при переопределении нужный метод будет выявлен во время выполнения исходя из реального типа объекта.

6. Модификатор static означает что метод статический, он принадлежит классу, а не конкретному его экземпляру. Из другого класса мы можем вызывать его так: [имя класса].[имя метода]().

6.1. Статические методы можно перегрузить. В том числе можно перегрузить его нестатическим методом.

6.1.1. Нельзя перегружать два метода в Java, если они отличаются только статическим ключевым словом (количество параметров и типов параметров одинаково). Т.к. их сигнатура при этом одинакова.

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

Shagel, блог «Sweet Sugar Bones»

* * *

Димена, блог «Сундук с барахлом»

Фото

Котики-обормотики и любимый чугунок.

A0JOoPoAsnY

Димена, блог «Сундук с барахлом»

* * *

Съездила сегодня в Оренбург, прогулялась по городу, докупила мелочи в поездку, цветы в палисадник (гацания по 35, стевия по 50. Петуния от 35 до 100).

Позавтракала в любимом Пркоффии, теперь туда попаду не раньше сентября.

Приехала домой, а тут газовики красят трубы в весёлый цыплячий цвет.

 

В выходные тётя привезла ткань, чтобы я сшила ей постельное бельё. Я погуглила как делать раскрой, всё померила, сделала чертёж, разрезала на простынь и две наволочки и выяснилось, что дома нет белых ниток. Купила, завтра заутюжу край и подошью. Надеюсь, нигде не накосячу.

 

По вечерам стало много мошек. Прям рой. У мамы все ноги в огромных укусах. А у меня, похоже, проснулись дедовские гены. Тот жил у леса и его не кусали даже самые злющие мошки/комары. Я вчера весь вечер провозилась на огороде, прополола чеснок, полила клубнику, убирали траву под абрикосами - ни одного укуса.

 

В деревне цветёт сирень, запах стоит сногсшибающий.

dWp4h2LN6IM

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

Вопрос 34 (this и super)

"О чем говорят ключевые слова «this», «super», где и как их можно использовать?"

1. Слова this и super — это два специальных ключевых слова в Java, которые представляют соответственно текущий экземпляр класса и его суперкласса.

1.1. Один из примеров использования this и super — это вызовы конструкторов. Внутри класса для вызова своего конструктора без аргументов используется this(), тогда как super() используется для вызова конструктора без аргументов ("конструктора по умолчанию") суперкласса. Таким способом вызывать можно не только конструктор без аргументов, но и вообще любой другой конструктор, передав ему соответствующие параметры.

1.2. Также this и super в Java используются для обращения к переменным экземпляра класса и его суперкласса. К ним можно обращаться и без префиксов super и this, но только если в текущем блоке такие переменные не перекрываются другими переменными, т.е. если в нем нет локальных переменных с такими же именами, в противном же случае использовать имена с префиксами придется обязательно.

скрытый текст1.2.1. Классическим примером такого подхода является использование this внутри конструктора, который принимает параметр с таким же именем, как и у переменной экземпляра.

1.3. Во внутренних классах с помощью этих слов очень удобно ссылаться на внешний класс, используя форму записи Outer.this для его текущего экземпляра и Outer.super — для его родителя, где Outer имя внешнего класса.

2. Чем this и super похожи:
- И this, и super нестатические переменные, соответственно их нельзя использовать в статическом контексте ( в том числе нельзя использовать в методе main).
- И this, и super могут использоваться внутри конструкторов для вызова других конструкторов по цепочке.
- Внутри конструктора this и super должны стоять выше всех других выражений, в самом начале, иначе компилятор выдаст сообщение об ошибке. Из чего следует, что в одном конструкторе не может быть одновременно и this(), и super().

3. Чем this и super различаются:
- Переменная this ссылается на текущий экземпляр класса, в котором она используется, тогда как super — на текущий экземпляр родительского класса.
- Каждый конструктор при отсутствии явных вызовов других конструкторов неявно вызывает с помощью super() конструктор без аргументов родительского класса, при этом всегда остается возможность явно вызвать любой другой конструктор с помощью либо this(), либо super().

3.1. Имея дело с перегруженными конструкторами, удобно один конструктор вызывать из другого через ключевое слово this. При выполнении конструктора this() сначала выполняется перегруженный конструктор, который соответствует указанному списку параметров. Затем выполняются операторы, находящиеся внутри исходного конструктора, если таковые существуют.

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

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

+Maximus+, блог «Записки смирнопомешанного»

21 и 22 дни Второго Зерна. Раскочегаривание рабочей недели.

Год или полтора назад я начинал играть в Pillars of Eternity... Но почему-то опять потерял интерес на середине игры. Замечаю за собой тенденцию такую - не могу в последнее время играть в длинные игры. Но... Вот уже год как я решил - пора переломить и проходить их до конца! Впереди - первая и вторая части Divinity Original Sin, Pillars of Eternity 1 -2, Baldur's Gate 1-2 и много других прекрасных игр. Может, меня каждый раз смущает наличие других игр под рукой?)))

 

А ведь второй заход в Pillars вылился едва ли не в книгу, написанную в блогах))) Что ни говори, а сюжет у игры богат и насыщен деталями. Даже локации можно описывать долго и со вкусом (чего только стоят Бесконечные Пути Од Нуа)

+Maximus+, блог «Записки смирнопомешанного»

19 и 20 дни Второго Зерна. Ленивейшие выходные

Я ни хрена не делал... то ли погода располагала, то ли настроение просто такое было. Мы ходили по магазинам, я играл, смотрел кино и ни хрена не делал... В воскресенье побывали в кино на ДедПуле2. И ни хрена не делали, точнее, я то съездил в посёлок, спустил ванночку и детские шмотки вниз, но больше ни хрена не делал...

FOTINA, блог «Сны и сновиденья»

ЧТО-ТО ДАВНО ТУТ МОИХ ГЕРАНЕК НЕ БЫЛО ))

А они цветут, хотя и не всегда так активно, как хотелось бы...

Розобудки в этом году всё больше массу зеленую наращивают,

хотя и подкормки, и режим полива - такие же, как и в прошлом году,

может, солнца маловато, много серых пасмурных дней...

Но радуют новенькие! Вот, например, вдруг зацвела совсем юная герань

Americana White Splash, черенок только в конце марта укоренился.

 

 

И вот еще парочка фото старающихся геранек -

щедрая на цветение белая красавица Bold White

и яркая насыщенная полумахровая PAC Foxy.

 

 


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

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