一):方法重载注意的几点:
1,根据参数列表的签名调用相应的函数,但是不能根据返回值的不同来重载方法.
2,基本数据类型在重载时,从一个较小的数据类型自动提升为一个大的数据类型.
char型略有不同,如果没有合适的方法,则直接被提升至int型.
二):构造器
缺省构造器是没有形参的,如果你的类中没有构造器,则编译器会帮你自动创建一个.
如果你已经定义了一个构造器,则系统不会帮你创建.
如果有多个构造器,可以在构造器中调用别的构造器--通过this关键字.只能调用一个,不能调用多个,
并且必须放在最起始处.
三):初始化顺序
先找程序的main方法,加载main方法所在类的所有成员,优先初始化static成员,
1.main方法内首次创建Card对象时,或者Card的静态字段或静态方法访问时,java虚拟机必须查找类路径定位Card.class文件.
2.然后载入Card.class文件,有关静态初始化的所有动作都会执行,静态初始化只在类首次加载的时候进行一次.
3.用new创建对象时,首先在堆上为其分配空间.并且这块空间被清零,这就为对象中的所有基本数据类型设为了缺省值,数字类型 为0,引用类型为null,boolean类型为false;
4.执行字段的初始化,比如成员int i的赋值操作,首先是0再被赋值.
5,静态成员和所有成员均被初始化(包括默认初始化),再执行构造器;
继承中的初始化顺序,先初始化最高基类的静态成员,一次下一级的子类的静态成员,基类实例变量,子类的实例变量
,基类构造器,子类构造器
class Tag{
Tag(int maker){
System.out.println("Tag("+maker+")");
}
}
class Card{
Tag t1 = new Tag(1);
int i;
Card(){
System.out.println("Card()");
t3 = new Tag(33);
}
Tag t2 = new Tag(2);
void f(){
System.out.println("f()");
}
Tag t3 = new Tag(3);
static {
System.out.println("card static");
}
}
public class OrderOfInitialization{
public static void main(String args[]){
System.out.println("inside main");
Card t = new Card();
t.f();
}
static int n;
static {
System.out.println(OrderOfInitialization.n);
System.out.println("static initialization");
}
}
结果
0
static initialization
IWAV0055I Java Bean test.OrderOfInitialization started with the main method
inside main
card static
Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()