P41 Random的使用
Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。它可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java.lang.Math中的方法Random()最大的不同之处,后者只产生double型的随机数。
类Random中的方法十分简单,它只有两个构造方法和六个普通方法。
构造方法:
(1)public Random()
Java产生随机数需要有一个基值seed,在第一种方法中基值缺省,则将系统时间作为seed。
貌似不能自动生成一连串的不同的随机数,看来还要手工写代码来保证随机数的不同。
P48
Integer类的几个方法还是挺好用的:
toBinaryString
public static String toBinaryString(int i)
- 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
如果参数为负,该无符号整数值为参数加上 232;否则等于该参数。将该值转换为二进制(基数 2)形式的无前导
0
的 ASCII 数字字符串。如果无符号数的大小为零,则用一个零字符'0'
(’"u0030’
) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。字符'0'
('"u0030'
) 和'1'
('"u0031'
) 被用作二进制数字。 -
- 参数:
i
- 要转换为字符串的整数。- 返回:
- 用二进制(基数 2)参数表示的无符号整数值的字符串表示形式。
- 从以下版本开始:
- JDK1.0.2
toHexString
public static String toHexString(int i)
- 以十六进制的无符号整数形式返回一个整数参数的字符串表示形式。
如果参数为负,那么无符号整数值为参数加上 232;否则等于该参数。将该值转换为十六进制(基数 16)的无前导
0
的 ASCII 数字字符串。如果无符号数的大小值为零,则用一个零字符'0'
(’"u0030’
) 表示它;否则,无符号数大小的表示形式中的第一个字符将不是零字符。用以下字符作为十六进制数字:0123456789abcdef
这些字符的范围是从
'"u0030'
到'"u0039'
和从'"u0061'
到'"u0066'
。如果希望得到大写字母,可以在结果上调用String.toUpperCase()
方法:
Integer.toHexString(n).toUpperCase()
-
- 参数:
i
- 要转换成字符串的整数。- 返回:
- 用十六进制(基数 16)参数表示的无符号整数值的字符串表示形式。
- 从以下版本开始:
-
JDK1.0.2
decode
public static Integer decode(String nm) throws NumberFormatException
- 将
String
解码为Integer
。接受通过以下语法给出的十进制、十六进制和八进制数字:
- DecodableString:
- Signopt DecimalNumeral
- Signopt
0x
HexDigits - Signopt
0X
HexDigits - Signopt
#
HexDigits - Signopt
0
OctalDigits - Sign:
-
《Java Language Specification》的第 §3.10.1 节中有 DecimalNumeral、HexDigits 和 OctalDigits 的定义。
跟在(可选)负号和/或基数说明符(“
0x
”、“0X
”、“#
”或前导零)后面的字符序列是使用指示的基数(10、16 或 8)通过Integer.parseInt
方法分析的。字符序列必须表示一个正值,否则会抛出NumberFormatException
。如果指定的String
的第一个字符是减号,则对结果求反。String
中不允许出现空白字符。 -
- 参数:
nm
- 要解码的String
。- 返回:
- 保持
nm
所表示的int
值的Integer
对象。 - 抛出:
NumberFormatException
- 如果String
不包含可分析整数。- 从以下版本开始:
- 1.2
- 另请参见:
-
parseInt(java.lang.String, int)
Character类里面也有一些关于字符的处理函数,也挺好用得。
P68
Java中的foreach语法,和C#中的还是有些区别的,用惯了C#的,看Java猛然有点不习惯。
2 public static void main(String[] args)
3 {
4 for(char c : "This is a test of foreach".toCharArray())
5 System.out .print(c + " ");
6 }
7 }
8
P79
参数的顺序不同可以区分两个不同的方法,但是不推荐,代码难以维护。
static void f(String s, int i)
{
System.out.println("String: " + s + ", int: " + i);
}
static void f(int i ,String s)
{
System.out.println("int: " + i + ", String: " + s);
}
public static void main(String[] args)
{
f("String first",11);
f(99, "Int first");
}
}
P85
Java中可以在构造函数中调用构造函数,但是不能再非构造函数中调用构造函数
int petalCount = 0;
String s = "initial value";
Flower(int petals)
{
petalCount = petals;
System.out.println("Constructor w/ int arg only, petalCount= " + petalCount);
}
Flower(String ss)
{
System.out.println("Constructor w/ String arg only, s= " + ss);
s =ss;
}
Flower(String s,int petals)
{
this(petals); //在构造函数中调用构造函数
this.s = s;
System.out.println("String & int args");
}
Flower()
{
this("hi",47); //在构造函数中调用构造函数
System.out.println("Default constructor (no args)");
}
void printPetalCount()
{
//this(11); //不能在非构造函数中调用构造函数
System.out.println("petalCount = " +petalCount + " s = " + s);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Flower x = new Flower();
x.printPetalCount();
}
}
P87
关于finalize()方法,下面这篇文章写得浅显易懂,还不错!
http://blog.csdn.net/dongliheng/archive/2007/07/12/1686258.aspx
P94
初始化顺序:在类的内部,变量定义的先后顺序决定了变量之间的初始化顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
{
Window(int marker)
{
System.out.println("Window(" + marker + ")");
}
} class House
{
Window w1 = new Window(1);
House()
{
System.out.println("House()");
w3 = new Window(33);
}
Window w2 = new Window(2);
void f()
{
System.out.println("f()");
}
Window w3 = new Window(3);
} public class OrderOfInitialization {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
House h = new House();
h.f();
}
}