Java变量、Java对象初始化顺序

1.Java变量

        1.1局部变量

  • 行参:在方法签名中定义的局部变量,随方法的结束而凋亡
  • 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡
  • 代码块内的局部变量:必须在代码块内对其显示初始化,从初始化后开始生效,随代码块的结束而凋亡

        1.2成员变量

  • 静态属性:类加载时初始化,随着类的存在而存在
  • 非静态属性:随着实例的属性存在而存在

        1.3局部变量与成员变量的区别

  • 局部变量不可以加static
  • 局部变量不可以加public、protected、private
  • 局部变量必须赋初始值
  • 局部变量存在于栈中

        1.4实例变量与类变量

  • 实例变量:局部变量、非静态成员变量;
  • 类变量:静态成员变量;

        1.5实例变量与类变量的区别

  • 实例变量不是静态的,类变量是静态的
  • 实例的总是可以引用类的
  • 在JVM中,每个类对应一个class,但是一个类可以创建多个java对象。jvm的类变量只需要一块内存空间。类有几个实例,就要分配几块内存空间。

        1.6static可以修饰

  • 只能修饰类里的成员部分
  • 成员部分包括:成员变量;成员方法;内部类;初始化块;内部枚举类

        1.7实例变量初始化的时机:

  • 定义变量时
  • 非静态初始化块
  • 构造方法
  • 注意:定义变量时初始化与非静态初始化块初始化 这两种方式 比 构造方法初始化方式 更早执行,执行顺序与他们在源程序中的排序相同

2.Java对象初始化顺序

  1. 先初始化静态的
  2. 同静态先初始化父类的
  3. 静态中先初始化变量,再初始化代码块
  4. 非静态的也是先变量,再代码块,再构造函数
  5. 所以初始化顺序可以看下面那张图
  6. 子类构造器执行体内执行第一行代码使用super显示调用父类构造器,系统将根据super调用里传入的参数列表判断调用哪个构造器
  7. 子类构造器执行体的第一行代码使用this调用本类中重载的构造器,根据传入参数判断调用哪个本类构造器
  8. 子类构造器中既没有super调用也没有this调用,系统将会在执行子类构造器前,隐式调用父类无参数的构造器。
  9. super和this都只能在构造器中使用,而且super和this都必须作为构造器中的第一行,因此super和this只能调用其中之一,且最多只能调用一次。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值