think in java 读后感(一)
2004-11-29 10:45
375 查看
从来没有自己写过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的心得,我要讲的还算简单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关键字
相关文章推荐
- Java实现时间日期格式转换示例
- Java下利用Jackson进行JSON解析和序列化示例
- Java的几个重要版本_动力节点Java学院整理
- Java Web开发之信息查询方式总结
- 基于Java字符编码的使用详解
- java获取Date时间的各种方式汇总
- Java使用AES加密和解密的实例详解
- C++算法系列之日历生成的算法代码
- 基于java时区转换夏令时的问题及解决方法
- 转 -- Java 学习方法浅谈 --来自java视线 Robbin
- ATL实现Connection Point的一种简单的方法
- OpenOffice,好用的开源办公软件
- 哪位仁兄帮一下编个小程序
- Java测试规范(引用)
- Hibernate Tool & Files
- How to disable JIT for JVM
- Java面试题目
- delphi中的时间操作技术(2)