Java编程思想(第四版)—— 读书笔记(四)

第五章    初始化和清除

一、用构造器自动初始化

    1、构造器的名字与类名相同,可保证这样的一个方法会在初始化期间自动调用。

图1

    2、一旦创建了对象new Rock();就会分配相应的存储空间,并调用构造器。

    3、构造器也能使用自变量。

    4、构造器没有返回值。

二、方法重载

    1、就是方法的重载。

    2、每个过载的方法都必须采用独一无二的自变量类型列表。

    3、主(数据)类型能从一个“较小”的类型自动变成一个“较大”的类型。

        若自变量范围比原来的宽,就必须使用括号中的类型名将其转为适当的类型。(“缩小转换”)。

    4、不能根据返回值类型来区分过载方法。

    5、默认构造器是没有自变量的,他的作用就是构建一个“空对象”。若创建一个没有构造器的类,则编译程序会帮我们自动创建一个默认构造器。

图2

           然而,如果已经定义了一个构造器,编译程序就不会帮我们自动合成一个。

    6、this关键字:可为已调用了其方法的那个对象生成相应的句柄。注意:假若准备从自己某个类的另一个方法内部调用一个类方法,就不必使用this。只需要简单地调用那个方法即可。当前的this句柄会自动应用于其他方法。

图3

由于increment()通过this关键字返回当前对象的句柄,所以可以方便地对同一个对象执行多项操作。

    (1)在构造器里调用构造器,以避免写重复的代码。可以用this关键字。(this指“这个对象”或者“当前对象”)。

    (2)static的含义:意味着一个特定的方法没有this。不可以从哪个一个static方法内部发出对非static方法的调用,反过来是可以的。

三、清除:收尾和垃圾收集

    1、垃圾收集器只知道释放那些由new分配的内存,不知道如何是否对象的“特殊”内存。

    2、一旦垃圾收集器准备好释放对象占用的内存空间,首先调用finalize(),并且只有在下一次垃圾收集过程中,才能真正回收对象的内存。垃圾收集器可能在任何时间运行。

    3、finalize():垃圾收集只与内存有关。不必过多地使用finalize()。

    4、finalize()最有用处的地方之一:观察垃圾收集的过程。

         before:自变量会调用System.gc()方法(强制执行垃圾收集器),同时还会调用System.runFinalization()方法,以便进行收尾工作。

         after:调用的runFinalizersOnExit()方法只有Java1.1及以后版本提供了支持。

    5、到程序结束,并非所有收尾模块都会得到调用。为强制进行收尾工作,可先调用System.gc(),再调用System。runFinalization()。这样可以清除到目前为止没有使用的所有对象。(官方说首先进行收尾模块,再释放存储空间。(有时候先调用runFinalization(),再调用gc(),收尾模块根本不会执行。))。

    6、不管是用哪种方法强制进行垃圾手机,都可能注意到比没有额外收尾工作时较长的时间延迟。

四、成员初始化

    1、在一个类的内部定义一个对象句柄,如果不将其初始化成新对象,那个句柄就会获得一个空值。

    2、方法初始化与初始化的顺序有关,而不是与程序的编译方式有关。它的限制是类型Measurement的每个对象都会获得相同的初始化值。

    3、构造器初始化:不可以妨碍自动初始化的进行,他在构造器进入之前就会发生。

        (1)初始化顺序:在一个类里,初始化的顺序是由变量在类内的定义顺序决定的。即使变量定义大量遍布于方法定义的中间,那些变量仍会在调用任何方法之前得到初始化——甚至在构造器调用之前。

        (2)静态数据的初始化:由于static值只有一个存储区域,所以无论创建多少个对象,都必然会遇到何时对那个存储区域进行初始化的问题。

        (3)明确进行的静态初始化:静态块(“static构建从句”)。

        (4)非静态实例的初始化:为了支持对“匿名内部类”的初始化。

图4

    4、对象的创建过程。考虑一个名为Dog的类:

        (1)类型为Dog的一个对象首次创建时,或者Dog类的static方法/static字段首次访问时,Java解释器必须找到Dog.class。

        (2)找到Dog.class后,所有static初始化模块都会运行。因此,static初始化仅发生一次——在Class对象首次载入的时候。

        (3)创建一个new Dog()时,Dog对象的构建进程首先会在内存堆(Heap)里为一个Dog对象分配足够多的存储空间。

        (4)这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值。

        (5)进行字段定义时会发生的所有初始化都会执行。

        (6)执行构造器。

五、数组初始化

    1、静态初始化:初始化时由程序员显式指定每个数组元素的初始值,有系统决定数组的长度;

    (1)arrayName = new type[]{element1,element2,element3...}

        示例: int[] intArr;

                    intArr = new int[]{1,2,3,4,5,9};

    (2)简化的静态初始化方式    type[] arrayName = {element1,element2,element3...};

        示例:String[] strArr = {"张三","李四","王二麻"};

    2、动态初始化:初始化时由程序员指定数组的长度,由系统初始化每个数组元素的默认值。

        arrayName = new type[length];

        示例:int[] price = new int[4];

    注意:不要同时使用静态初始化和动态初始化,也就是说,不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值。

      一旦数组完成初始化,数组在内存中所占的空间将被固定下来,所以数组的长度将不可改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,052评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,267评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,518评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,457评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,474评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,143评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,728评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,650评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,184评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,269评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,415评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,083评论 5 348
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,775评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,257评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,389评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,777评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,419评论 2 359

推荐阅读更多精彩内容

  • 第一章 对象导论 对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据和方法,并且每一个对象都可以唯一地...
    niaoge2016阅读 827评论 0 0
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,767评论 2 9
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,057评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,233评论 0 2
  • C++为我们引入了“构造函数”的概念。这是一种特殊的方法,在一个对象创建之后自动调用。Java也沿用了这个概念,但...
    王侦阅读 445评论 0 0