初始化小结

《JAVA编程思想》chapter5【初始化与清理】学习笔记

在Java中,需要对变量进行初始化,而清除工作则一般是由垃圾回收器自动进行的。


1、构造方法/constructor:

  • 构造方法的名称与类名相同;
  • 可以定义多个构造方法,调用时靠参数(数量、类型)的不同来调用对应的构造方法。但是要注意方法中参数的类型转换的发生;
  • 如果自己定义过构造方法,则编译器不会产生默认的构造方法。所以建议定义构造方法时,首先定义一个无参的构造方法。

2、this关键字:

this可以指明/返回当前对象的句柄,即返回的是当前类的句柄;

可以用来调用构造方法。注意:用this来调用构造方法时,必须放在方法内的首行!

public class Flower<span style="font-family: Arial, Helvetica, sans-serif;">{</span>
private int flowerNumber = 0;


<span style="white-space:pre">	</span>Flower(){
<span style="white-space:pre">	</span>	System.out.println("Flower is beautyful");
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>Flower( int number){
<span style="white-space:pre">	</span>	this();// 使用this来调用构造方法,但是必须将这个调用放在开始!
<span style="white-space:pre">	</span>	System.out.println("Here are " + number + " flowers");
<span style="white-space:pre">	</span>	this.flowerNumber = number;
<span style="white-space:pre">	</span>}
}


3、static关键字

一般static修饰的变量/方法称为全局(静态)变量/方法。其实就是static变量/方法的内存是固定的,只有一块,没有副本,在任何地方对其进行操作,操作的内容都是定义的这块内存中的内容。类似于全局变量/方法。
static的一个作用就是可以实现对象之间的数据共享。

另外,java编程思想中写到,在static方法的内部不能调用非静态方法,我的理解是:使用static定义的是静态方法,编译器只给它分配一块内存,所以说这个方法是不属于任何类的,也就不会包含类对象的句柄,当然不能对包含类对象句柄的非静态方法进行调用。


4、清理

内存清理的流程:垃圾回收器调用finalize() --> (下一次)垃圾回收器发生回收动作 --> 内存得到清理。

一般只有在使用“本地方法”的情况下,才需要调用finalize()释放存储空间。

如果在某种情况下,类对象再被垃圾回收前需要满足某个判定条件,则可以定义protect void finalize()方法,满足时则调用super.finalize(),否则进行提示或其他操作。


5、初始化

在java中,所有的变量在使用前,都需要能得到恰当的初始化。对于类中的变量,可以在定义类成员变量的时候直接为其赋值(此处与C++截然相反),对于类可以使用new来创建一个对象对初始化它。

使用构造方法进行初始化之前,编译器会自动进行初始化,这个初始化过程是无法阻止的。

包含(静态存储区)的变量初始化:程序执行main方法,首先要初始化main方法所在类的变量(创建的对象或者静态变量/对象),初始化被创建的类中的变量和方法,然后执行main方法所在类的(main)方法。其中,类中变量定义的顺序决定了初始化的顺序。另外一点,类的构造方法可以看成是静态方法。静态初始化只有在必要时才会进行。

以上初始化流程理解可能有误,待彻底搞清楚后再详叙。

6、数组的初始化

定义数组有两种方法:int[ ] array或者int array[ ]。两种方法是等价的,建议使用前一种,因为直观上来讲,int[ ] array表明array的数据类型为 int类型的数组。


三种初始化的方法:

1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;

eg: int[] array;    array = new int[3];    array[n] = .....
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;

eg: int[] array = {1,2,3,4,5};
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。

eg: int[] array = new int[3];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值