内存管理与对象

一:内存管理:内存分配和内存回收

内存分配:特指创建java对象JVM为该对象在堆内存中所分配的内存空间。
内存回收:指当该java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存
注:JVM内置了垃圾回收机制回收失去引用的java对象所占用的内存

1、如果肆无忌惮的创建对象的坏处:
不断分配内存使得系统中可用内存减少,从而降低程序运行性能
大量已分配内存的回收使得垃圾回收的负担加重,降低程序的运行性能

二:实例变量和类变量

变量:成员变量、局部变量
局部变量:

形参:在方法签名中定义的局部变量,有方法调用者负责为其赋值,随方法的结束而消亡
方法内的局部变量:在方法内定义的局部变量,必须在方法内对齐进行显示的初始化,这种类型的局部变量从初始化完成后开始生效,随方法的结束而消亡
代码块内的局部变量:在代码块内定义的局部变量,必须在代码块内对其进行显式初始化,这种类型的局部变量从初始化完成后开始生效,随代码的结束而消亡
类体内定义的变量被称为成员变量,如果定义该成员变量时没有使用static修饰,该成员变量又被称为非静态变量或实例变量,如果使用了static修饰,则该成员变量又可称之为静态变量或类变量
如果使用了static修饰,这些成员就属于类本身,从这个意义看,static只能修饰类里的成员,不能修饰外部类,不能修饰局部变量、局部内部类;

三:实例变量的初始化时机
  • 定义实例变量时指定初始值
  • 非静态初始化块中对实例变量指定初始值
  • 构造器中对实例变量指定初始值
  • 每当程序调用指构造器来创建java对象时,该构造器避让会获得执行的机会,除此之外,该类包含的非静态初始化块将会获得执行的机会,而且总是在构造器执行之前获得执行
  • 定义实例变量时指定的初始值,初始化块中为实例变量指定的初始化值,构造器中为实例变量指定的初始值,三者的左右完全类似;经过编译器处理后,它们对应的赋值语句都被合并到构造器中,在合并过程中,定义变量语句转换得到的赋值语句、初始化块里的语句转换得到的赋值语句,总是位于构造器的所有语句之前;合并后,两种赋值语句的顺序保持它们在源代码中的顺序;

初始化顺序:
对于一个类而言,按照如下顺序执行:

  1. 执行静态代码块
  2. 执行构造代码块
  3. 执行构造函数
  4. 对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。

当涉及到继承时,按照如下顺序执行:

执行父类的静态代码块,并初始化父类静态成员变量
执行子类的静态代码块,并初始化子类静态成员变量
执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量
执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次
构造代码块:类中直接用{}定义,每一次创建对象时执行。
执行顺序优先级:静态块,main(),构造块,构造方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值