美文网首页
初始化和清理

初始化和清理

作者: 刚子来简书啦 | 来源:发表于2020-09-22 10:47 被阅读0次
构造函数

构造函数名称和class名称相同。构造函数是一种很独特的函数,因为它没有返回值。这和“返回值为void”有极大的差别。返回void时,一般函数并不返回任何东西,但是一般的函数能够选择是否要返回些什么东西。构造函数则绝对不返回任何东西,而且也没有任何选择。

重载

如果多个函数具有相同名称,Java如何知道你要取用的究竟是哪一个呢?规则很简单:每个重载函数都需具备独一无二的引数列(argument list)。无法以返回型别作为重载函数的区分基准。

关键字 this

在某个函数之内,想取得当前的 object reference 时。由于该reference是编译器偷偷传入,所以并不存在其识别名称。为了这个原因,关键字 this 因应而生。这个关键字仅作用于函数之内,能取得“唤起此一函数”的那个 object reference 。可以采取面对任何 object reference 一样的处理方式来处理这个 this。如果只是在某个class的某个函数内调用同一个class的另一个函数,没有必要动用 this,直接调用即可,因为编译器会自动套用当前的 this reference。

正常情况下,this 指的是“此一对象”或“目前对象”,并自动产生“目前的对象”的reference。但是在构造函数中,当赋予 this 一个引用数列,它有了不同的意义:它会调用符合该引数列的某个构造函数。如此一来,我们便能够直接调用其它构造函数。

垃圾回收

垃圾回收动作只回收内存。也就是说,垃圾收集器存在的唯一理由,就是要回收那些在你程序中再也用不着的内存空间。所以任何和垃圾回收动作捆绑在一起的行为,也都只能和内存或内存的释放相关。

当垃圾回收器打算开始释放你的对象所占用的存储空间时,会先调用其finalize(),并且在下一次垃圾回收动作发生时才回收该对象所占用的空间。所以,finalize()有个可以发挥实际效用的地方,就是用来观察垃圾回收过程。由于Java对象都必须经过new产生,所以也就不需要自己来释放,从而finalize()并不是用来清理或释放内存空间的,并且不要让重要逻辑依赖这个函数的执行。

成员初始化

Java保证,变量绝对会在它们被使用之前被适当初始化。当变量定义在函数内部时,Java会运用编译期错误消息来贯彻它的保证。

如果某个class的数据成员隶属基本型别,情况就稍有不同。因为所有函数都可以初始化或使用该数据值,所以强迫使用者一定得在使用之前给定适当初值是不切实际的。不过,放任它持有毫无意义的初值也很危险,所以每个“隶属基本型别”的class数据成员都保证一定有初值。

构造函数可以用来执行初始化动作,但并不会消除发生于构造函数之前的自动初始化动作。任何基本型别和 object reference 都是如此,就连那些定义时便给定初值的变量也不例外。

class中的初始化次序取决于变量在class中的定义次序。变量定义也许会散落各处,而且有可能介于各个函数之间。但所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化。

当数据是static型式,情况没有什么不同:如果数据隶属基本型别而又没有加以初始化,它便会被设为基本型别的标准初值;如果它是某个 object reference,初始值便是null,除非你产生新对象并将这个reference指向它。

static的初始化动作只在必要时刻才会发生,也就是在第一个static被访问之际。自此之后,static对象便不会再被初始化。如果static成员并未因为早先的对象生成过程而被初始化,那么初始化次序会以static为优先,然后才是non-static对象。

Array的初始化
int[] a1;
// 或者
int a1[];

此行代码执行之后,只拥有一个reference,代表某个array,但是并没有对应任何空间。如果想为该array产生必要的存储空间,就必须进行初始化才行。对array而言,初始化可以出现在程序的任何地点。

int[] a1 = {1, 2, 3, 4, 5};

int[] a;
a = new int[rand];

array的大小,不是一定要在编译期给定的,也可以在运行期再给定,但必须保证在使用时是有明确的大小的。

相关文章

  • 初始化和清理

    初始化和清理 初始化和清理正是涉及安全的两个问题。在之前的程序中一大部分错误都源自于不正确的初始化以及清理工作。在...

  • 初始化和清理

    构造函数 构造函数名称和class名称相同。构造函数是一种很独特的函数,因为它没有返回值。这和“返回值为void”...

  • Java编程思想(四)

    第5章 初始化与清理 这一章主要讲了... Java 中提供了构造器和“垃圾回收器”解决初始化和清理的问题。 5...

  • 5、初始化和清理

    初始化和清理正是涉及安全的两个问题 一、用构造器确保初始化构造器:在java中提供构造器,确保每个对象都会得到初始...

  • 第五章 初始化与清理(java对象的初始化与清理)

    初始化和清理涉及到程序的安全性 问题往往出现在 忘记初始化 以及 忘记回收资源 5.1 用构造确保初始化 继承自...

  • c++8~libcurl进行post

    2018.10.27 libcurl进行post main函数,初始化和清理curl 发请求,设置参数,传入url...

  • 13 类和对象--初始化和清理

    构造函数和析构函数 2个函数分别用于对象的初始化和清理,如果我们自己不提供函数方法,编译器会提供默认的方法,但是里...

  • Java编程思想(第四版)学习笔记(5)

    第五章 初始化与清理(1) 1.用构造器确保初始化 在Java中,“初始化”和“创建”捆绑在一起,两者不能分离。 ...

  • Thinking in Java笔记——初始化和清理

    *构造器是特殊的方法,它没有返回值。这个和返回值为空(void)明显不同。 *区分重载的方法是必须有个独一无二的参...

  • OnJava8_初始化和清理

    Java对象初始化通过构造器,清理通过垃圾收集器(Garbage Collector, GC) 构造器 无参构造函...

网友评论

      本文标题:初始化和清理

      本文链接:https://www.haomeiwen.com/subject/olnpphtx.html