契子:明年就要离开学校找工作了,时间过的真快,想一想这几年,做了一些事,也有一些事并没有做好,有很多收获,也有不少遗憾。感性的话在此不宜多说,既然选择了程序员这条道路,也要有把它到做事业的态度。在正式找工作前还有几个月的时间,做东西,尝试新的技术固然很爽,但是基础也很重要,在这短短的几个月的时间里,我将把以前学过的一些知识,Java,数据结构,算法,网络,OS&Linux,J2EE等等知识查缺补漏,好好梳理一遍,不光是为了找工作,也是一种必须要坚持的态度。
对于Java知识的整理,基于《Effetive Java》2nd和《Java编程思想》4th辅以JVM和设计模式的相关知识,结合书本上的知识和我的理解进行整理。好了,开始我的一篇——创建和销毁对象。
1. Java中的构造器:
构造器是一种特殊类型的方法,它和类同名,没有返回类型,和new关键字结合可以返回对象实例的引用。TIJ中说它是一种静态方法,但是通过字节码我们可以看到其实并没有static关键字,它的行为也和其他静态方法有异(可以访问非静态成员变量),因此这种说法并不完全准确,这里不再深究。
1.1 定义构造器:
一个类可以有多个构造器,如果你没有定义构造器,Java编译器会在语义分析的阶段,首先添加一个默认构造器。
多个构造器可以通过方法重载(overload)实现,注意只有同方法名和不同参数列表可以区别不同的重载版本,返回类型并不能区分。
尤其是使用基本类型参数重载时,要注意类型的自动转换如(char—>int,小转大)和窄化转换(强制类型转换,大转小),当然会使用最匹配的类型。
1.2 this关键字:
通过this指针我们可以访问类的实例变量和方法,但最好是在必要的时候(需要返回或使用该实例,内部类访问外部类同名实例变量方法,构造器设置属性等)使用它,否则你不必添加它,编译同样会帮你添加。
在存在多个重载版本的构造器时我们可以在构造器内使用this调用其他构造器,可以避免一些重复的代码:
public ConstructorTest(int a) {
this.a = a;
}
public ConstructorTest(int a, String s) {
this(a);
this.s = s;
}
PS:在构造器存在很多参数情况下,重叠构造器是一种选择,但是更好的做法是使用Builder模式,后面会讲到。
1.3 static关键字:
static(静态),static方法和static变量是类方法和类变量,它们不能使用this引用,都放在方法区中,供各个线程共享。static变量初始化和static初始化其,会在类加载(隐式加载或显示加载)后执行一次。