初始化和清除是编程中经常需要处理的问题。往往需要编程解决的问题,都需要一系列的初始条件,这就需要在编程中初始化相应的变量。同时,在使用一些库时候,往往也有初始化条件。而在使用完一些编程中的资源后,比如内存,数据库,文件,都需要及时的释放。如果忘记了这些被占用的资源,很容易会带来资源耗尽的后果。
在C++中提供构造函数和析构函数来处理初始化和清除的工作,在Java中也引入了构造函数,但在清除时,并没有使用类似C++中那样的析构函数进行处理。其中一个重要的原因就是Java的垃圾回收机制来自动回收内存。
构造方法构造方法是Java类每次创建时,第一个调用的方法,使用和类名相同的名字
classRock{//ConstructorRock(){System.out.println("CreatingRock");//dosomethingelse.}}
当创建对象newRock()时,就会调用Rock类的构造方法,进行初始化。
方法重载在设计一个方法时,经常会遇到,需要处理不同参数的情况。
也就是使用相同名字的方法,处理不同参数列表的情况,称之为重载。
在设计构造方法时,经常需要处理这种情况。因为构造方法本身需要和类名一致,同时又可能需要处理不同的参数列表来进行初始化。
classTree{privateintmTall;Tree(){mTall=1;}Tree(inttall){mTall=tall;}}重载方法
通过不同的参数列表进行区分
通过返回值无法区分
默认构造方法在不设置类构造方法的情况下,编译器会提供一个默认构造方法。这个构造方法不提供任何功能,是个空白方法。
在提供构造方法的情况,编译器不会提供默认构造方法,这时再使用默认构造方法会出现错误。
this关键字
this关键字是由编译器提供的对象自身的句柄
this只能在类的内部进行使用。
classLeaf{publicLeafgetLeaf(){returnthis;}}
this可用于引用同名变量
classWind{privateinwind;Wind(intwind){this.wind=wind;}}
在构造方法中,this指代另外一个构造方法
classFlower(privateintmSeed;Flower(){this(0);}Flower(intseed){mSeed=seed;}}
static方法
static方法没有this可以引用,因为其不绑定任何具体的类实例。
清除Java引入了垃圾回收机制,也就虚拟机会自动回收无需使用的内存。相对于C++中的使用new分配内存对象,使用delete清除内存使用,似乎Java中不需要再使用类似于delete机制来执行清除。
但实际上除了内存的清除之外,还有其他的非内存资源可能需要清除,所以任然需要在对象被销毁时提供一个借口供资源清除使用。
垃圾回收机制并不能确保内存都会被正确回收,任然会有内存泄露的问题存在
finalize方法对象的finalize方法在其被销毁的时候调用。
finalize方法可用于清除非Java方法调用时产生的资源占用。举个列子,在Java中可以通过某种形式直接调用C/C++的方法,如果要对C/C++中的资源进行清理,必须调用其对应的方法,这就可以在finalize方法中进行。
finaliza方法还可以用来跟踪垃圾回收的过程,在本书的示例代码能够直观的观察到垃圾回收的过程,非常值得自己进行尝试。
成员初始化Java中的成员在不初始化的情况都会被自动初始化,数值类变量如int,long等会被赋予0,布尔型变量会被赋予false,Char和对象句柄会被赋予NULL
构造方法中初始化构造方法中初始化不影响成员变量先被自动初始化
初始化顺序和定义顺序保持一致
static变量的初始化在必要时才会进行,即只有在创建了第一对象实例或发生了第一次访问static变量,才会被初始化。
static初始化块和static变量的初始化过程一样,只会初始化一次。
非static初始化块,用于“匿名内部类”的初始化(第七章)
对象创建的过程首次创建实例或访问对象的static字段
所有static模块部分初始化
创建实例时,给该实例在堆上分配内存
存储空间清零,将对象中的所有基本类型设为默认值(数值,布尔,Char)
所有定义的变量进行初始化
执行构造方法。
数组初始化Java中数组使用length表示长度
超出数组边界的调用,会抛出异常,而不是像C++中,引用到内存的其他区域
数组初始化形式
int[]array1=newint[]{1,2,3,4,5};int[]array2={1,2,3,4,5};
对象数组的初始化必须使用new的形式
总结垃圾回收带了很好的编程便利性,提高的开发效率,但同时也造成对内存泄露风险认识不足。比如随意使用static变量,对HashMap这样的集合不做清楚,多个线程中长时间的占用资源,都会造成内存泄露。
赞赏
人赞赏
早期白癜风的症状图片北京白癜风哪治的好