zoukankan      html  css  js  c++  java
  • 第5章 初始化与清理

     【本章的 垃圾回收与finalize()方法部分,真的是讲的太烂了】

       ·程序员      <初始化>

        ·编译器      <默认初始化>

        ·变量{字段,局部变量}  <占用>

        ·垃圾回收器            <清理>

        ·资源{内存}

        ·安全问题 - 代价

        ·特殊方法{构造器}       <创建> 对象  

        ·垃圾回收器 <释放> 内存资源

       

    5.1 用构造器确保初始化

        ·创建对象时、用户有能力操作对象前,Java自动调用相应的构造器,来确保对象初始化

        ·编译器在初始化期间调用与类名同名构造器

        ·概念上:初始化和创建彼此独立;在Java中,初始化和创建绑定在一起

        ·对于返回值为空(void),尽管方法本身不会返回什么,但仍可选择让它返回别的东西(这句怎么理解?)。构造器则不会返回任何东西。

        ·(构造器)无返回值 != (void方法)返回值为空(void)

        ·new 表达式<返回>(新建对象的)引用,构造器本身无返回值

    5.2 方法重载

        ·方法重载:同名不同参(想象调用时的情景,只有用参数列表才能作为多个重载方法的区分依据)。但访问权限、返回值类型可改变。

        ·重载原因:

           1.同名方法<表达>(有细微差异的)含义

           2.构造器—需要多种方式创建对象,而其名字已由类名决定(唯一)

        ·编译器<区分>重载方法:参数列表(类型,顺序)

        ·(涉及基本类型的)重载:

           ·普通整数         :默认为int型接收

           ·实参类型 < 形参类型:实际数据类型<被提升>#就近提升

           ·char型       :无匹配?直接提升至int型:正常处理

           ·实参类型 > 形参类型:(显式)类型转换{窄化}

    5.3 默认构造器的提供

        ·默认构造器:程序员创建了构造器?是:编译器创建

    5.4 this关键字

        ·this:指代方法调用者(让方法直到其调用者是谁),其实就是当前对象的引用

        ·编译器<区分>(同一类型的)(不同)对象的方式:将“所操作对象的引用”<作为>参数传递给方法。

            ·用this在构造器中调用构造器:构造器里this只能在起始处调用一个构造器

    5.5 清理:终结处理和垃圾回收

        ·%垃圾回收器只知道释放new分配的内存

        ·%无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存

        ·#一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

        ·#如果在finalize()里加入某种擦除功能,当垃圾回收发生时(不能保证一定发生),finalize()得到了调用,图像就会被擦除。(对于匿名对象,System.gc()就能引发其finalize()方法的调用)

        ·非new方式获得对象:

           ·反射机制:

               ·java.lang.Class的newInstance()方法

               ·java.lang.reflect.Constructor的newInstance()方法

           ·反序列化

           ·clone()

           对于非new方式获得对象,在类中定义一个finalize()方法

        ·Java允许在类中定义一个名为finalize()的方法。一旦垃圾回收器准备好释放对象占用的内存,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

        ·不该将finalize()作为通用的清理方法。

        ·对于匿名对象,如果在其被创建后又调用了System.gc()会引发其finalize()方法的调用

        ·Debug模式下,按F5(更详细)或F6键或F7+F8调试main()方法,会发现方法调用栈最终调用了Thread的exit()方法(使用Debug阅读源码是非常不错的)

        ·只要存储空间没有濒临用完的那一刻,对象占用的空间就总也得不到释放。如果JVM并未面临内存耗尽的那一刻,它是不会浪费时间去执行垃圾回收以恢复内存的。

        ·内存页面调度:显著地影响性能

        ·垃圾回收技术:

           ·引用计数:简单但速度很慢。引用计数器为0时,释放内存。对象之间循环引用,即便   对象应该被回收,但计数不为0。

           ·停止-复制:垃圾产生较多时,暂停程序运行,将非垃圾对象复制到新堆,新堆空间连续

               ·简单点说,你房间里不要的东西比较多时,那你就把需要的东西整理出来,这样打扫     效率高点。

           ·标记-清扫:垃圾产生较少甚至没有时,将垃圾对象标记出来清理掉,剩余空间不连续

               ·简单点说,你房间里不要的东西比较少时,那你就把不需要的东西标记出来,把它们     清理出去。

           ·自适应的、分代的、停止-复制、标记-清扫式垃圾回收器

        ·JIT:惰性评估

    5.6 成员初始化

        ·局部变量:编译器检查

        ·成员变量:

           ·默认初始化:

               ·基本类型:false,空白,0,0.0

               ·引用类型:null

           ·指定初始化:

    5.7 构造器初始化

        ·用构造器初始化字段(这些标题如“构造器初始化”起得真是乱啊)

        ·初始化在创建对象之前完成:

           ·创建对象之前的动作:

               ·加载类层次结构上的静态成员:静态字段,静态代码块;一次性的

               ·初始化字段:

               ·调用实例代码块:

               ·调用特定构造器:

    5.8 数组初始化

        ·可变参数列表:TypeName...args

    5.9 枚举类型

        ·实例:具名值|常量|大写字母(下划线)

        ·enum关键字:为enum生成对应的类时,产生了某些编译器行为

            ·编译器添加特性:

               ·toString()方法

               ·ordinal()方法:enum常量声明顺序

        ·在switch语句中使用:switch(enumType arg){case enumInstance}

  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/InformationGod/p/8514092.html
Copyright © 2011-2022 走看看