《JAVA编程思想》阅读笔记 第5章 初始化与清理

构造方法没有返回值,与 void 类型不同,void 方法自身不会返回什么,但仍可以选择让其返回别的东西。构造方法能在方法体内部调用其它的构造方法,但是不允许其它任何方法调用构造方法。

方法的重载基于参数列表的不同,即使是拥有相同的参数,参数的顺序不同也能达到重载的目的(会导致难以维护,最好不要使用该方式)。无法根据返回值进行重载,是因为在调用方法而忽略其返回值的情况下,会令 java 无法判断使用哪个方法。

对于基本类型的重载,如果传入的实际数据小于参数列表中声明的数据类型,会让实际数据类型得以提升;如果传入的实际数据大于参数列表中实际声明的类型,则会让实际数据类型下降。也就是说,传入的数据会被转化为参数列表设定的数据类型(char 类型略有不同,如果无法完全匹配,则直接将其变为 int 类型)。

对于创建了同一个类的多个对象的情况,如果这些对象都调用了同一个方法,为了对调用的对象能进行明确的区分识别,编译器会自动将“所操作对象的引用”作为第一个参数传递给被调用的方法。如类Banana的两个对象a,b,调用方法的语句:a.peel(1);b.peel(2);,实际编译器的处理类似:Banana.peel(a,1);Banana.peel(b,2)(实际开发时不能按这种方式书写)。而如果希望获得对当前对象的引用,则使用 this 关键字。

this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。在方法内调用同一个类下的其它方法时,可以直接调用而不添加 this 前缀,因为编译器会自动添加 this 关键字。只有在需要明确指出对当前对象的引用时,才需要手动添加。

static 方法中不能调用非静态方法,但是非静态方法可以调用静态方法。static 方法的主要用途是通过类本身调用,以访问其它静态方法和静态域。

虽然 java 针对对象的回收处理有垃圾回收机制,但是这种机制只能针对由 new 关键字创建出的对象,对于通过其它方式获得内存空间的对象无法处理。所以就有 finalize() 方法的出现。

finalize() 访法主要用于调用本地方法时开辟的空间未被回收的情况。java 只支持 C 与 C++ 两种语言编写的函数作为本地方法(但对于函数内部调用其它语言编写的内容则没有限制,所以相当于支持任何一种语言)。

垃圾回收器可以显著提高对象创建速度,也意味着 java 从堆分配空间的速度,可以与其它语言从堆栈上分配空间的速度媲美。垃圾回收器对对象重新排列,实现了一种高速且有无限空间可供分配的模型。

当需要装载某个类的时候(通常为该类创建第一个对象时),编译器会先找到 .class 文件,然后将其字节码装入内存。此时有两种选择:编译所有代码或者进行惰性评估

编译所有代码的缺陷是,加载动作散落在整个程序的生命周期内,累计花费时间更长。并且会增加可执行代码的长度(字节码比编译器展开的本地机器码小很多),将产生页面调度进而降低程序速度。

惰性评估是指只有在需要的时候才进行编译,不需被执行的代码不会被编译。 HotSpot中应用了类似的方法,每次编译都会进行优化。所以执行次数越多,速度越快。

可以通过给变量调用方法来进行初始化操作:int i = f(); int f(){return 11;};,方法也可以是带参数的(参数必须是初始化完成的):int i = f(); int j = g(i);此处 i 已经过初始化,所以代码正确;int j = g(i); int i= f();此处 i 未经过初始化,因此给 j 赋值会报错。

自动初始化是无法被阻止的,将在构造方法被调用之前发生:int i; Counter(){i=7;}此处 i 先被赋予默认值,然后再赋值为7。

对象的创建过程:

  1. 因为构造器实际上是静态方法,因此首次创建类对象或静态方法被访问时,解释器需要查找类路径,定位 .class 文件
  2. 载入 .class 文件,创建 class 对象,执行所有静态初始化动作。也因此静态初始化只有在 class 对象首次加载时进行
  3. 执行 new 语句创建对象时,首先在堆上为其分配足够的存储空间
  4. 存储空间清零,此时就自动将对象中所有的基本数据类型设成了默认值
  5. 执行所有出现于字段定义处的初始化操作
  6. 执行构造方法

可以直接使用 new 在数组中创建元素:Random r = new Random(47); int[] a = new int[r.nextInt(20)];,对于数字及字符,数组中自动初始化为0,对于布尔值则初始化为 false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值