- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java编程思想读书笔记(4章).doc
Java编程思想读书笔记(4章)
第4章 初始化和清理
一.以构造函数(constructor)确保初始化的进行
如果某个class具备构造函数,Java便会在对象生成之际,使用者有能力加以操作之前,自动调用其构造函数,于是便能名确保初始化动作一定被执行。
二.函数重载(Method overloading)
1. 区分重载函数
由于只能从函数名和函数的引数列来区分两个函数,而重载函数具有相同的函数名称,所以每个重载函数都必须具备独一无二的引数列。
2. Default构造函数
1) default构造函数是一种不带任何引数的构造函数。如果你所开发的class不具任何构造函数,编译器会自动为你生成一个default构造函数。
2) 如果你自行定义了任何一个构造函数(不论有无引数),编译器就不会为你生成default构造函数。
3) 如果定义了一个class,如
class Bush{
Bush(int I){}
}
当想用ne
{
public static void main(String[] args)
{
//Sundae x = nee实例,而在getName()中却要使用name实例,显然的错误的。
class Movie{
String name = ;
Movie(){}
public Movie(String name) { this.name = name; }
public static String getName() { return name; }
}
public class Test{
public static void main(String[] args){
//下面两名先产生实例后再调用getName()没有问题
//Movie movie1 = neovie1);
//String name1 = movie1.getName();
//下面一名将出错
//String name2 = Movie.getname(); (a)
}
}
三.清理(cleanup):终结(finalization)与垃圾回收(garbage collection)
1)你的对象可能不会被回收
只有当程序不够内存时,垃圾回收器才会启动去回收不再被使用的对象的内存空间。某个对象所占用的空间可能永远不会被释放掉,因为你的程序可能永远不会逼近内存用完的那一刻,而垃圾回收器完全没有被启动以释放你的对象所占据的内存,那些空间便会在程序终止时才一次归还给操作系统
3) 只有在采用原生函数(native methods)时,才使用finalize()。
四.成员初始化(member initialization)
1) 函数中的变量不会被自动初始化,如
void f(){
int i;
i++;
}
将发生编译错误,因为i没有被初始化。
2) class的数据成员会被自动初始化,具体情况如下(见P220例子):
基本型别:boolean:false、char:null(u
123下一页 [教育资源网]edu..,。0000)、byte:0、short:0、int:0、
long:0 、float:0、double:0
对象(reference):null
1. 初始化次序
1) 所有变量一定会在任何一个函数(甚至是构造函数)被调用之前完成初始化(见P233例子)
2) 在产生一个class的对象(包含static成员的class的代码被装载)时,首先自动初始化class中的static成员变量,再执行所有出现于static数据定义处的初始化动作,最后执行static block,所有这些初始化操作只在第一次生成该对象时进行。
3) 自动初始化class中的其它成员变量。
4) 执行所有出现于数据定义处的初始化动作。如:int i=1;的执行顺序是先把I自动初始化为0,再执行数据定义处的初始化动作,初始化为1。
5) 执行non-static block
6) 调用构造函数。
例:
class Cup{
Cup(int marker){
System.out.println(Cup( + marker + ));
}
void f(int marker){
文档评论(0)