пятница, 25 января 2008 г.

Форд Фокус Покус

Заказали мы Мишке шведскую стенку. Планировали на Рено Сценик довезти, но Юля с Мишкой уехали на месяц к маме/бабушке. А мне позвонили из фирмы и попросили забрать побыстрее, чтобы у них проход не занимала. Договорился с Петром - у него Форд Фокус.

Лестница, длиной 250 см, вошла впритирку. Но оказалось, что в его машине заднее сиденье состоит из двух частей: первая (пошире) за водителем слева, а вторая (поуже) справа. Если бы было, как у нас, 3 складывающихся спинки, или хотя бы 2, но справа была бы пошире, то я бы поместился. А так пришлось ехать по КАДу согнувшись в позе лотоса на сложенном заднем сиденье. Никакой безопасности. И ноги затекли. Как приехали, Петр меня сфотографировал вылезающего:

Java Puzzle 68: Shades of Gray

Рассмотрим следующую программу. В классе X две декларации с одинаковым именем. Что программа напечатает? Black или White? Это, вообще, допустимый код?
public class ShadesOfGray {
    public static void main(String[] args) {
        System.out.println(X.Y.Z);
    }
}
class X {
    static class Y {
        static String Z = "Black";
    }
    static C Y = new C();
}
class C {
    String Z = "White";
}
Вполне легальный код. Он даже в спецификации описан: когда переменная и тип с одинаковым именем находятся в одной области видимости, то имя переменной имеет предпочтение (JLS 6.5.2). Т.е. программа напечатает White. Аналогичным образом, имена переменных и типов могут перекрывать имена пакетов.
Хорошо, что программы, использующие соглашения по именованию, практически никогда не столкнутся с такой проблемой.

Java Puzzle 67: All Strung Out

Что не так в следующем классе?
public class StrungOut {
    public static void main(String[] args) {
        System.out.println(new String("Hello world!"));
    }
}
class String {
    private final java.lang.String s;
    public String(java.lang.String s) {
        this.s = s;
    }
    public java.lang.String toString() {
        return this.s;
    }
}
Всё компилируется, но вот запускаться не хочет. Говорит, что нет метода main. Вот оно! Они в параметрах метода main используют свой String, а не тот, который ожидает VM. Надо было написать так:
    public static void main(java.lang.String[] args)

Микробит

Зашёл сегодня в сервис-центр Микробит. Сказали, что надо притащить ноут, чтобы оценить повреждения. Мне Мишка кое-какие кнопки повынимал, так я их вставил все, кроме одной. Если окажется, что повреждено металлическое крепление к корпусу, то придется менять всю клавиатуру. Однако, в лучшем случае, ремонт обойдется в копейки.
Спросил про замену батарейки. Новая стоит 8000 р. Дешевле будет новый ноут купить, а этот оставить Мишке на растерзание...