zoukankan      html  css  js  c++  java
  • Java类的初始化过程及清理

    一、类的数据成员初始化

      Java中类的数据成员初试化可能有两种形式。

    • 在定义类成员变量的地方直接提供初始化值(这是C++中不允许的)
    • 在构造器中初试化。(Java中不存在类似C++中的初始化列表)

      两者的区别是,第一种方式是数据成员直接初试化为提供的初始化值,而在构造器中初始化,其实在数据成员已经初试化为默认值(比如基本类型如int 初始化为0,引用类型初试为null,其实在在构造器已经不能称为初始化了,应该是赋值)

    初始化顺序

    •   如果有静态变量则先初始化静态变量,如果基类中也有静态变量且之前没有初始化过,则先初始化基类中的静态变量再初始化子类的静态变量(静态变量只初始化一次,如果已经初始化则不再初始化)
    •  如果类有基类则按照基类中的变量的定义顺序初始化变量,然后调用基类的构造函数;
    •  按照类中变量的定义顺序初试化变量,然后调用构造函数。

    java中有继承体系的类型也是先构造其基类,再构造子类。

    二、垃圾回收

      java中没有c++中对应的析构函数,如果java不再使用需要处理,再必须手动调用对应的处理函数。java中对应的对象的销毁,使用java的gc机制处理。

    对于finalize()不是析构函数,他的调用时机不确定,只在垃圾回收器准备好释放对象占用的空间时,首先调用其finalize()方法。

    对于java中的gc机制采用“停止-赋值”,“标记-清扫”等方式。具体有待详细了解。

  • 相关阅读:
    电脑命令大全
    iBatis简单入门教程
    Tomcat从内存、并发、缓存方面优化方法
    TreeMap 源码分析
    红黑树详细分析,看了都说好
    短链接原理
    容器的六大理解误区
    超能陆战队中的微型机器人现已实现!
    怎么理解微服务架构
    使用Golang时遇到的一些坑
  • 原文地址:https://www.cnblogs.com/wangjzh/p/5103746.html
Copyright © 2011-2022 走看看