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


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

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
构造器

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

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

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

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

对象实例化的全过程

  1. jvm读取.class文件,并加载进内存,先加载子类的父类
  2. 堆开辟内存,分配地址
  3. 在对象的空间内,对对象空间属性进行默认初始化(各种类型数据默认值)
  4. 构造函数初始化
  5. 在构造函数中,先调用父类构造器初始化
  6. 在调用子类构造器初始化
  7. 初始化完毕,把地址赋值给对象的引用。




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值