вторник, 6 марта 2007 г.

Примеры Java кода

Нашел сайт с примерами Java кода. Полезен будет, в основном, для новичков, но местами встречаются весьма полезные примеры использования различных техник, в Swing например...

2 things about Unix

UNIX is user-friendly. It's just selective about who its friends are.

There are two major products to come out of Berkeley: LSD and BSD. We don't believe this to be a coincidence.

Java Puzzle 24: A Big Delight in Every Byte

for (byte b = Byte.MIN_VALUE; byte < Byte.MAX_VALUE; b++)
if (b == 0x99) System.out.println("Found!");

Byte имеет значения от -128 до +127, а 0x90 = +144. Таким образом, в цикле напечатано ничего не будет. Проблема в том, что при сравнении типов byte преобразуется в int. Решить эту проблему можно так:
(b == (byte)0x99)
или вот так:
((b & 0xFF) == 0x99)
Авторы рекомендуют вынести все "магические" числа в константы:
private static final byte TARGET = 0x99;
Только тут вы сразу увидите, что такой код не скомпилируется. Придется явно указывать приведение типа:
private static final byte TARGET = (byte)0x99;

Авторы напоминают совет избегать вычислений с аргументами разных типов. И для достижения этй цели они рекомендуют определять константы вместо "магических" чисел.

Java Puzzle 23: No Pain, No Gain

StringBuffer word = null;
switch (new Random().nextInt(2)) {
case 1: word = new StringBuffer('P');
case 2: word = new StringBuffer('G');
default: word = new StringBuffer('M');
word.append('a').append('i').append('n');
System.out.println(word);

Первая ошибка - использование малознакомого API. Значение никогда не будет равно 2. Авторы рекомендуют внимательно читать описание API перед использованием. Таким образом, вы никогда не получите "Gain".
Вторая ошибка - отсутствие операторов break в каждой ветке оператора switch. В результате word всегда будет равен new StringBuffer('M') и "Pain" вы тоже не получите.
И наконец, "Main" тоже не будет напечатан, так как нет конструктора, принимающего char. В этом случае параметр незаметно приводится к типу int и определяет первоначальный размер внутреннего массива.

Реакция есть?

Говорят, что американские военные пилоты могут это делать больше 2 минут. Брешут наверное...

MotoCross 2

Забавный и совершенно ненапрягающий мотокросс.