java初始化与清理_详解Java的初始化与清理

大家都知道,Java是站在巨人的肩上成功的,它是在C&C++的基础上进一步的开发,投入面向对象开发的怀抱。Java吸取了很多以前的教训,加入自己很多独创的方式。在程序语言发展初期,许多C程序员经常忘记初始化变量,在程序结束后也经常忘记对创建的数据类型进行释放内存,造成内存泄漏。这些"不安全"的编程方式当然需要程序员有良好的编程习惯,但如果编程语言能够加入自动清理与初始化的工作,这回大大降低开发成本。随着技术的发展,C++语言引入了构造器(constructor),即在创建对象自动调用的初识方法,Java语言采用这一方法,并加入垃圾回收器,负责自动回收用户创建的内存,进一步降低程序员的开发成本。

Java的初始化与构造器

创建Java的对象最普遍发的方法是使用new方法,如下所示。而创建对象必须使用构造器,构造器实际就是Java对象初始化的方法,用户可以在该方法中添加自定义初始化行为。

Object obj = new Object(); // 左侧为声明对象,右侧为实际创建一个对象

构造器它是一个隐含为静态的无返回值的方法,名称与类名相同,编译期会自动调用该方法。如果用户没有创建构造器,编译期会为你自动生成一个默认构造器。总之,构造器个数至少有一个。构造器可以有多个,它可以用户自己选择如何初始化对象,这里是使用重载(Overload)的方法。如下所示:

package com.thinkinjava.initialization;

import static com.thinkinjava.util.Print.*;

class Tree {

int height;

Tree() {

print("Planting a seedling");

height = 0;

}

Tree(int initialHeight) {

height = initialHeight;

print("Creating new Tree that is " +

height + " feet tall");

}

void info() {

print("Tree is " + height + " feet tall");

}

void info(String s) {

print(s + ": Tree is " + height + " feet tall");

}

}

public class Overloading {

public static void main(String[] args) {

for(int i = 0; i < 5; i++) {

Tree t = new Tree(i);

t.info();

t.info("overloaded method");

}

// Overloaded constructor:

new Tree();

}

}

Java的初始化顺序

既然讲到Java初始化,那肯定要关注Java的初始化顺序,这涉及到一些继承的知识,首先看一个实例:

package com.thinkinjava.multiplex;

import static com.thinkinjava.util.Print.print;

/**

* 初始化顺序

*

*/

// 形状

class Insect {

private int i = 9;

protected int j;

private int k = priInit("Insect.k initialized");

Insect() {

print("i = " + i + ",j = " + j);

j = 39;

}

private static int x1 = priInit("static Insect.x1 initialized");

static int priInit(String s) {

print(s);

return 47;

}

}

class InitOrder extends Insect {

private int i = 10;

private int k = priInit("InitOrder.k initialized");

public InitOrder() {

print(" k = " + k);

print(" j = " + j);

}

private static int x2 = priInit("static InitOrder.x2 initialized");

public static void main(String[] args) {

print("InitOrder constructor");

InitOrder x = new InitOrder();

}

}

你可能感兴趣的:(java初始化与清理)