вторник, 18 сентября 2007 г.
Фантазии из песка
Наткнулся на забавный сайт. Там можно скачать несколько интересных видеосъемок, как Ilana Yahav рисует песком раличные картины. Особенно радует динамика - то что постепенно картины меняются...
Nissan Quest
Недалеко от Казанского собора видел новенький Nissan Quest. Очень длинный минивэн. Я бы даже сказал макровэн - машинка явно не для крупных городов...
Бабье лето
Погода нынче отличная. Сегодня ездил в Городской Ипотечный банк за справкой. Это на набереной Мойки рядом с Исакиевским. Оттуда по каналам и мостам шел пешком на работу: Мойка, Грибанал и Фонтанка. Порадовало, что многие старые дома ремонтируют. Минус такой прогулки один: местные собачники заминировали все набережные...
Java Puzzle 46: The Case of the Confusing Constructor
Что делает следующая программа?
public class Confusing {
private Confusing(Object object) {
System.out.println("Object!");
}
private Confusing(double[] array) {
System.out.println("Array!");
}
public static void main(String[] args) {
new Confusing(null);
}
}
Это вопрос по спецификации. Первый из раздела "классические головоломки". Программа скомпилируется и выполнится конструктор, напечатающий Array. В приведенном выше примере оба конструктора можно вызвать, но по спецификации выбирается тот, который более конкретный. Это второй конструктор, так как каждый массив - это объект, но не каждый объект - массив. Для принудительного вызова необходимого конструктора нужно привести аргументы к типу, определенному в списке формальных параметров:
public static void main(String[] args) {
new Confusing((Object) null);
}
Обратите внимание, что если поменять тип первого конструктора в примере на Double (например), то программа не скомпилируется. В идеале, лучше избегать перегрузки конструкторов и методов.
public class Confusing {
private Confusing(Object object) {
System.out.println("Object!");
}
private Confusing(double[] array) {
System.out.println("Array!");
}
public static void main(String[] args) {
new Confusing(null);
}
}
Это вопрос по спецификации. Первый из раздела "классические головоломки". Программа скомпилируется и выполнится конструктор, напечатающий Array. В приведенном выше примере оба конструктора можно вызвать, но по спецификации выбирается тот, который более конкретный. Это второй конструктор, так как каждый массив - это объект, но не каждый объект - массив. Для принудительного вызова необходимого конструктора нужно привести аргументы к типу, определенному в списке формальных параметров:
public static void main(String[] args) {
new Confusing((Object) null);
}
Обратите внимание, что если поменять тип первого конструктора в примере на Double (например), то программа не скомпилируется. В идеале, лучше избегать перегрузки конструкторов и методов.
Java Puzzle 45: Exhausting Workout
Проверяются знания рекурсии. Что делает следующая программа?
public class Workout {
public static void main(String[] args) {
workHard();
System.out.println("It's nap time.");
}
private static void workHard() {
try {
workHard();
} finally {
workHard();
}
}
}
Забавно, но если метод будет вызывать сам себя, то вы достаточно быстро получите StackOverflowError. Но если использовать блоки try-finally, как в примере, то на ожидание StackOverflowError уйдет 10291 лет. Можно сказать
public class Workout {
public static void main(String[] args) {
workHard();
System.out.println("It's nap time.");
}
private static void workHard() {
try {
workHard();
} finally {
workHard();
}
}
}
Забавно, но если метод будет вызывать сам себя, то вы достаточно быстро получите StackOverflowError. Но если использовать блоки try-finally, как в примере, то на ожидание StackOverflowError уйдет 10291 лет. Можно сказать
Подписаться на:
Сообщения (Atom)