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机制采用“停止-赋值”,“标记-清扫”等方式。具体有待详细了解。

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/wangjzh/p/5103746.html
Copyright © 2011-2022 走看看