一 实例变量和类变量
Java中的变量大体可分为成员变量和局部变量。其中局部变量可分为如下三类:
形参;
方法内的局部变量;
代码块内的局部变量。
Java中局部变量都存储在栈内存中。
类体内定义的变量被称为成员变量。若定义时没有static关键字修饰,则称为非静态变量或实例变量;反之,则称为静态变量或类变量。
辨析:Java中static关键字?
static的作用是将实例成员变为类成员,它只能修饰类里定义的成员部分,比如,变量,方法,内部类(枚举与接口),初始化块,若没有使用static修饰,则它们属于类的实
例;若使用了static修饰,则属于类本身。由此可见:static只能修饰类里的成员,不能修饰外部类,不能修饰局部变量,局部内部类。
二者的初始化时机
类变量通常随着类的初始化而初始化,而实例变量通常随着对象的初始化而初始化,Java对象的初始化方式有:构造器,初始化块和定义变量时指定初始值。
实例变量的初始化:
定义时指定初始值:
非静态初始化块中指定初始值;
构造器中指定初始值;
类变量的初始化:
定义类变量时指定初始值;
静态初始化块中指定初始值。
二 父类构造器
子类或实例对象调用父类构造器执行初始化,分为以下几种情况:
在子类构造器的第一行代码中使用super显式调用,根据super()方法的参数来决定具体父类的哪个构造器;
在子类构造器的第一行代码中使用thisr显式调用本类中重载的构造器,具体调用由this()方法参数决定;
既没有super也没有this调用,则隐式调用父类无参构造器。
super,this都必须且只能位于构造器中的第一行
当变量的编译时类型和运行时类型不同时,通过该变量访问它引用的对象实例变量是,该实例变量的值有声明该
变量的类型决定,但通过该变量调用它引用的对
象的实例方法时,该方法行为将由它实际应用的类型决定。