>>442
0〜0x1f はコントロールなので抜きな。

for (int i = 0; i < 8; i++)
 System.out.print((char) (Math.random() * (0x10000 - 0x20) + 0x20));
System.out.println();

でも、本当はこれではダメ。というのはサロゲートな文字があって、
char 2 つないと1文字を表現できないから。