初始化与清理
欢迎转载,转载烦请注明出处,谢谢。
https://www.cnblogs.com/sx-wuyj/p/11177257.html
1.用构造器确保初始化
java中通过提供构造器,可以确保每个对象都得到初始化.创建某个对象时,如果该对象具有构造器,java就会在用户有能力调用该对象之前自动调用该对象的构造器,从而保证了初始化的进行.
- 构造器的命名:
1. 因为取的任何名字都有可能与类的某个成员名称冲突.
2. 必须让你编译器知道应该调用哪一个方法.
所以构造器的命名和类名相同.在初始化期间要自动调用构造器.
class Rock{
Rock(){
System.out.println("这是一个构造器")
}
}
由于构造器的名字和类名完全相同,所以每个方法首字母小写的编码风格并不适用于构造器.
- java当中有两种形式的构造器
1. 无参构造器:也叫默认构造器.很多时候我们在定义某个实体类时并没有去编写构造器,但是对象依旧被初始化了,正是因为无参构造器的存在.
class Rock{
Rock(){
System.out.println("这是一个无参构造器")
}
}
1. 有参构造器:可以指定如何创建对象,可以在初始化对象时提供实际参数.参数可以是一个,也可以是参数.以下两种都是可以的.
class Rock{
Rock(int i){
System.out.println("这是一个有参构造器")
}
Rock(int i,String str){
System.out.println("这同样也是一个有参构造")
}
}
需要注意的是,构造器可以重载.另外如果没有定义构造器,那么java就会为我们创建一个无参构造器;如果定义了具体的构造器,那java就不会再为我们创建无参构造器,此时如果需要无参构造器那就需要我们手动创建了.正是因为会默认创建一个无参构造,所以确保了对象的初始化.
2. 方法重载
- 2.1 区分重载方法
每个重载方法都拥有独一无二的参数列表,可以根据参数的个数区分,甚至参数列表的顺序也可以用来区分重载方法,但是不建议这么做,不利于程序的后期维护. - 2.2涉及基本类型的重载
如果传入的数据类型小于方法中声明的参数类型,实际数据类型就会被提升.
如果传入的数据类型大于方法中声明的参数类型,就必须强制类型转换大类型转为小类型,不然编译器就会报错 - 2.3 以返回值区分重载方法
首先说明这种方式是错误的
class{
method();
method(int x){
return x;
}
int x = method(1);
}
这种情况下是可以的,可我们有时候并不关心方法的返回值是什么,比如method();
这时候java应该调用哪个方法呢,所以以这种方式来区分方法重载是行不通的.
- 2.4 this关键字
this表示调用方法的对象的引用,this只能用在方法内部. - 2.5 清理:终结处理和垃圾回收
- 对象可能不被垃圾回收
只要程序没有濒临存储空间用完的那一刻,对象所占的空间总也得不到释放.制止程序运行结束,垃圾回收也一直没有释放你创建任何对象的存储空间,随着程序的退出,这些资源也将交由系统.因为垃圾回收本身也有开销,要是不使用他,就不需要支付这部分的开销.
2.5.1 finalize()的用途
finalize()主要用于通过某种创建对象以外的方式创建了对象,这种特殊情况主要是发生在使用了本地方法的情况下,本地方法是一种在java中调用非java代码的方式.
- 对象可能不被垃圾回收