1.重载:
多个方法,有相同的名字、不同的参数,便产生了重载
编译器通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选出相应的方法(这个过程叫重载解析)
Java允许重载任何方法,而不只是构造器方法
要完整的描述一个方法需要指出方法名以及参数类型(这叫做方法的签名)
返回类型不是方法签名的一部分
2.显示域初始化:
当一个类的所有构造器都希望把相同的值赋予某个特定的实例域时,可以在类定义中,直接将一个值赋给任何域
例如:
class Employee
{
private String name = "";
...
}
C++中,不能直接初始化类的实例域
3.调用另一个构造器:
关键字this引用方法的隐式参数,还可以调用同一个类的另一个构造器
例如:
public Employee(double s)
{
this("Employee #"+nextId,s);
nextId++;
}
Java中的this引用等价于C++的this指针,但是C++中一个构造器不能调用另一个构造器
4.初始化块:
class Employee
{
private int id;
//object initialization block
{
id = nextId;
nextId++;
}
}
无论使用哪个构造器对象,id域都在对象初始化块中被初始化,首先运行初始化快,然后才运行构造器的主体部分
也可以使用静态的初始化块:
static
{
Random generator = new Random();
nextId = generator.nextId(10000);
}
JDK 6之前可以用Java写没有main方法的“Hello,World”程序:
public class Hello
{
static
{
System.out.println("Hello,World");
}
}
会先打印Hello,World再指出main未定义,Java SE 7之后会先检查有没有定义main方法
5.java.util.Random 1.0:
Random()
构造一个新的随机数生成器
int nextInt(int n)
返回一个0~n-1之间的随机数
6.对象析构与finalize方法:
析构器最常见的操作是回收分配给对象的存储空间,由于Java有自动的垃圾回收器,不需要人工回收,所以Java不支持析构器
但是当某些对象使用了内存之外的其他资源后,对资源的回收和利用就很重要
可以为每个类添加finalize方法,该方法将在垃圾回收器清除对象之前调用,但是很难知道什么时候被调用,所以怎么不使用
有个名为System.runFinalizersOnExit(true)的方法能够确保finalize方法在Java关闭前被调用,但是不安全
可以用使用方法Runtime.addShutdownHook添加“关闭钩”(shutdown hook)