您的位置:首页 > 其它

面向对象——类的成员之成员变量、构造器

2017-09-02 10:00 127 查看


面向对象——类的成员之成员变量、构造器

1.成员变量

普通变量:权限修饰符 数据类型 变量名。如 private String name;

注:数据类型可以是8种基本数据类型,或者引用数据类型。

静态变量:在普通变量的基础上,加上static修饰符。如:public static int num;

注:静态变量属于类,在内存只有一份,不会随着类的创建而创建。因此常用于计数!

静态常量:既有static修饰,又有final修饰。public final static  int num=1000;  

注:static final可以交换位置,常用的还有Math.PI等。

成员变量如果声明时没有赋初始值,就是该数据类型的默认值。



final修饰成员变量:可以声明时初始化,也可以在构造器中初始化,但是不能二次赋值。

2.构造器

构造器的格式要求:

名字与类名相同,
没有返回值也不能有void
其中可以包含return;用于结束方法,但不能返回任何东西。

构造器必知:如果当前类不提供构造器,编译器自动为类添加一个空参构造器。如果当前类有其他的构造器,则编译器不再提供空参构造器。

非常重要:由于构造子类前一定会先构造父类,这时候如果子类不显示调用父类的构造器,则默认调用父类空参构造器。如果父类有其他构造器无空参构造器,这时候出现编译异常(找不到父类的空参构造器)。

代码示例:

class Creature{

public Creature(){

System.out.println("I'm a creature");

}

}

class Animal extends Creature{

public Animal(){

System.out.println("I'm a animal");

}

}

 class Person extends Animal{

public Person(){

System.out.println("I'm a person");

}

}

public class Test{

public static void main(String[] args) {

Person person=new Person();

}

}

输出:I'm a creature

  I'm a animal

  I'm a person

关于创建对象时的执行顺序

代码示例一:
public class Construct2 {
④ private String name="AA";

①  private static int num=10;

②  static{
System.out.println("静态块1");
}

⑤ {
System.out.println("初始化块1");
}
③ static{
System.out.println("静态块2");
}
⑦ public Construct2(){
System.out.println("构造器");
}
⑥ {
System.out.println("初始化块2");
}
public static void main(String[] args) {
Construct2 tCon=new Construct2();
}

}

圆圈代表步骤。执行结果:

静态块1

静态块2

初始化块1

初始化块2

构造器

根据执行结果可以看出:创建对象时属性初始化的顺序为:

静态变量、静态代码块(随类加载)==>普通变量、初始化块(顺序执行)==>构造器

注:如果子父类都含有静态变量,加载顺序为:

父类静态结构(静态块、静态变量)=>子类静态结构=>父类其他结构=>子类其他结构

对象实例化的全过程

jvm读取.class文件,并加载进内存,先加载子类的父类
堆开辟内存,分配地址
在对象的空间内,对对象空间属性进行默认初始化(各种类型数据默认值)
构造函数初始化
在构造函数中,先调用父类构造器初始化
在调用子类构造器初始化
初始化完毕,把地址赋值给对象的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐