1. 区分重载方法:

參数顺序的不同能够区分两个方法,只是,普通情况下千万别这么做。由于这会使代码难以维护不能通过返回值类型来区分重载方法:由于假设我直接调用f(), 此时java不知道应该调用那一个

public void f(){
}
public int f(){
return 1;
}

2. 仅仅有当须要明白指出对当前对象的引用时, 才须要使用thiskeyword。比如, 当须要返回对当前对象的引用时,就经常在return语句这样写:

public class Leaf {
private int i = 0; public Leaf increment() {
i++;
return this;
} void print() {
System.out.println("i = " + i);
} public static void main(String[] args) {
Leaf x = new Leaf();
x.increment().increment().increment().print();
}
}

// 因为increment()通过thiskeyword返回了对当前对象的引用。所以非常easy在一条语句对同一个对象运行多次操作

3. 为什么须要finalize()方法?

把一个对象用完后就“弃之不顾”的做法并不是总是安全的,当然。java有垃圾回收器负责回收无用对象占领的内存资源,但也有特殊情况:假定你的对象(并不是使用new)获得了一块“特殊”的内存区域,因为垃圾回收器仅仅知道释放那些经由new分配的内存。所以它不知道该怎样释放该对象的这块“特殊”内存。

为了应对这样的情况,java同意在类中定义一个名为finalize()的方法。



不该将finalize()作为通用的清理方法。

之所以要有finalize(),是因为在分配内存时可能採用了类似C语言中的做法,而非Java中的通常做法。这样的噢概念情况主要发生在使用“本地方法”的情况下。本地方法是一种在Java中调用非Java代码的方式。



不管是“垃圾回收”还是“终结方法”都不保证一定会发生,假设Java虚拟机并未面临内存耗尽的情形,它是不会浪费时间

去运行垃圾回收以恢复内存的。



4.初始化顺序:

在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,他们仍然会在不论什么方法(包含构造器)被调用之前得到初始化。

class Window {
Window(int marker) {
print("Window(" + marker + ")");
}
} class House {
Window w1 = new Window(1); // Before constructor House() {
// Show that we're in the constructor:
print("House()");
w3 = new Window(33); // Reinitialize w3
} Window w2 = new Window(2); // After constructor void f() {
print("f()");
} Window w3 = new Window(3); // At end
} public class OrderOfInitialization {
public static void main(String[] args) {
House h = new House();
h.f(); // Shows that construction is done
}
}
/* Output:
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()
*///:~

5. 静态数据初始化:

class Bowl {
Bowl(int marker) {
print("Bowl(" + marker + ")");
} void f1(int marker) {
print("f1(" + marker + ")");
}
} class Table {
static Bowl bowl1 = new Bowl(1); Table() {
print("Table()");
bowl2.f1(1);
} void f2(int marker) {
print("f2(" + marker + ")");
} static Bowl bowl2 = new Bowl(2);
} class Cupboard {
Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard() {
print("Cupboard()");
bowl4.f1(2);
} void f3(int marker) {
print("f3(" + marker + ")");
} static Bowl bowl5 = new Bowl(5);
} public class StaticInitialization {
public static void main(String[] args) {
print("Creating new Cupboard() in main");
new Cupboard();
print("Creating new Cupboard() in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
} static Table table = new Table(); static Cupboard cupboard = new Cupboard();
}
/* Output:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)
*///:~

初始化的顺序是先静态对象, 而后是非静态对象,上面的类中要运行main()(静态方法)必须载入StaticInitialization,然后其静态域table和cupboard被初始化。这将导致它们相应的类也被载入,而且因为它们也都包括静态的Bowl对象,因此Bowl随后也被载入。

Think in Java(二):初始化与清理的更多相关文章

  1. Java的初始化与清理

    大家都知道,Java是站在巨人的肩上成功的,它是在C&C++的基础上进一步的开发,投入面向对象开发的怀抱.Java吸取了很多以前的教训,加入自己很多独创的方式.在程序语言发展初期,许多C程序员 ...

  2. Chapter5_初始化与清理_用构造器初始化

    接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾 ...

  3. 图解 & 深入浅出Java初始化与清理:构造器必知必会

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  4. Java 初始化和清理

    初始化和清理是影响代码安全的两个重要因素. 一.初始化 1. 方法重载 构造器与类名相同,成为强制重载方法名的原因之一.重载规则:每个重载的方法必须拥有独一无二的参数类型列表.不能根据返回值来区分重载 ...

  5. Java编程思想——初始化与清理

    PS:最近一直忙于项目开发..所以一直没有写博客..趁着空闲期间来一发.. 学习内容: 1.初始化 2.清理 1.初始化   虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了 ...

  6. 浅谈Java中的初始化和清理

    引言 这篇文章我们主要介绍Java初始化和清理的相关内容,这些内容虽然比较基础,但是还是在这边做一个简单的总结,方便以后查阅. 初始化过程 Java尽力保证:所有变量在使用之前都会得到恰当的初始化(对 ...

  7. Java编程思想学习(五)----第5章:初始化与清理

    随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...

  8. 《Java编程思想》——初始化与清理(一)读书笔记

    第一次写这个,这一章都用word写的,结果复制过来没图片....只能上传word文档了.以后改用markdown比较好 word文档地址:<Java编程思想>--初始化与清理(一)读书笔记

  9. java初始化与清理

    初始化与清理 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 1.用构造器确保初始化 java中通过提供构造器,可以 ...

  10. Java编程思想之五初始化与清理

    随着计算机革命的发展,"不安全"的编程方式已经逐渐称为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 5.1 用构造器确保初始化 通过提供构造器,类的设计者可确保每 ...

随机推荐

  1. Linux知识(1)----U盘安装Ubantu14.04系统

    由于需要用到ROS(Robot Operating System)机器人操作系统,该系统是基于Linux系统Ubantu14.04的,第一次安装接触Linux点点生惧,但我知道并没那么难弄,况且还是U ...

  2. pt-archive提速的实践经验

    最近遇到很多业务需求,需要进行数据导出工作,由于有格式要求,故之前一直使用mysqldump的方法. mysqldump -uuser -ppassword -S mysql.sock -t db t ...

  3. 解决 Operation must use an updateable query

    在asp.net 开发环境下,用jet 4.0连接access数据库, 有时会产生Operation must use an updateable query,这是由于相关用户mdb文件没有Modif ...

  4. redis.conf配置解释

    daemonize:如果需要在后台运行,把该项改为yespidfile:配置多个pid的地址,默认在/var/run/redis.pidbind:绑定ip,设置后只接受来自该ip的请求port:监听端 ...

  5. asmack xmpp 获取离线消息

    原文:http://plplum.blog.163.com/blog/static/31032400201503015345948/ 注意事项: 1.登录前要将状态设置为离线: ConnectionC ...

  6. FIS3配置fis-conf.js

    设置规则的配置接口: fis.match(selector, props); 1.添加md5戳:对 js.css.png 图片引用 URL 添加 md5 戳: fis.match('*.{js,css ...

  7. 有用的iOS网站地址

    王巍 (@onevcat) 是一名 iOS 和 Unity3D 开发者,现旅居日本,正在寻求创意之源.http://swifter.tips/http://onevcat.com/2013/02/xc ...

  8. iOS:上线的基本流程

    1.创建唯一标书符App ID 首先打开开发者网站,进入证书页面,我们点击Identifiers下边App IDs选项,然后点击右上角加号,如图: 2.申请发布证书 我们点击Certificates下 ...

  9. C 语言高效编程的几招——A few action of efficient C language programming

    编写高效简洁的C 语言代码,是许多软件工程师追求的目标.本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教. 第1 招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个 ...

  10. 自定义控件 淘宝头条【ViewFlipper】

    简易版 代码 ); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Acti ...