从来没有自己写过blog今天算是第一次自己动手写吧,心情很激动
这个星期的新任务是员工培训要求每人要讲授think in java的心得,我要讲的还算简单4,5章,算了闲话不写了做教案哟!
第四章初始化和清除
“初始化”和“清除”是这些安全问题的其中两个。许多C程序的错误都是由于程序员忘记初始化一个变量造成的。对于现成的库,若用户不知道如何初始化库的一个组件,就往往会出现这一类的错误。清除是另一个特殊的问题,因为用完一个元素后,由于不再关心,所以很容易把它忘记。这样一来,那个元素占用的资源会一直保留下去,极易产生资源(主要是内存)用尽的后果。C++为我们引入了“构建器”的概念。这是一种特殊的方法,在一个对象创建之后自动调用。Java也沿用了这个概念,但新增了自己的“垃圾收集器”,能在资源不再需要的时候自动释放它们。
对于初始化,可以把它想象成每个程序中的initialize()方法,也就是说在程序开始执行的时候最先会调用这个方法,在JAVA中引入了构造函数这个概念(也叫构建器)
class Rock {
Rock() { // 此方法就是一个构造函数,它的特点是没有返回值,并且和类名一致,这也是构造函数必须满足的两个条件
System.out.println("Creating Rock");
}
}
public class SimpleConstructor {
public static void main(String[] args) {
for(int i = 0; i < 10; i++)
new Rock();
}
}
这是一个基本例程!
class Tree {
int height;
Tree() {
prt("Planting a seedling");
height = 0;
}
Tree(int i) {
prt("Creating new Tree that is "
+ i + " feet tall");
height = i;
}
void info() {
prt("Tree is " + height
+ " feet tall");
}
void info(String s) {
prt(s + ": Tree is "
+ height + " feet tall");
}
static void prt(String s) {
System.out.println(s);
}
}
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");
}
// 构造函数的重载
new Tree();
}
}
这是一个带参数的构造函数,当实例化时,依据参数类型来决定构造通过哪个构造函数来实例化对象
若方法有同样的名字,Java怎样知道我们指的哪一个方法呢?这里有一个简单的规则:每个过载的方法都必须采取独一无二的自变量类型列表。参数相同次序不同的构造函数时两种不同的构造函数.
值得注意的是,如果已经定义了一个构建器(无论是否有自变量),编译程序都不会帮我们自动合成一个:
class Bush {
Bush(int i) {}
Bush(double d) {}
}
现在,假若使用下述代码:
new Bush();
编译程序就会报告自己找不到一个相符的构建器。就好象我们没有设置任何构建器,编译程序会说:“你看来似乎需要一个构建器,所以让我们给你制造一个吧。”但假如我们写了一个构建器,编译程序就会说:“啊,你已写了一个构建器,所以我知道你想干什么;如果你不放置一个默认的,是由于你打算省略它。”
所以,当你在程序中设置了构造函数,有需要的话,还需要构建一个默认的构造函数.
this关键字
博客围绕员工培训讲授《Think in Java》心得展开,重点介绍了初始化和清除问题。指出C程序常因未初始化变量出错,C++引入构建器,Java沿用并新增垃圾收集器。还讲解了Java构造函数概念、重载规则,以及设置构造函数时默认构造函数的注意事项。

583

被折叠的 条评论
为什么被折叠?



