疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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


 

        初始化和清理的作用:为了提高程序的安全性,消除资源占用的浪费,Java当中采用了构造器来初始化,提供了“垃圾回收器”是内存资源自动回收。

  Java当中,提供了构造器来进行初始化操作,因此就没有必要在每个类都要定义一个initialize () 方法来进行初始化操作。

  Java类的构造器名称必须与类名相同,它是一种特殊类型的方法,因为它没有返回值(new表达式返回的是新建对象的引用,但构造器本身并没有任何返回值),而且没有参数的构造器是默认构造器,从概念上讲,“初始化”和“创建”是彼此独立的,但是在Java当中,“初始化”和“创建”捆绑在一起,两者不分离。

  方法的重载是指方法名相同,参数不同,Java通过参数类型列表来确定执行的是哪一个方法,传输过程中,如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会被提升,另外,根据方法的返回值来区分重载方法行不通。

  Java当中,this关键字只能在方法内部使用,表示对当前对象的引用,如果在方法内部调用同类中另一个方法,不必使用this,直接调用即可。

  Java静态类,static方法内部不能调用非静态方法,static方法就是没有this的方法。

  Java当中的垃圾回收器只知道释放那些经由new分配的内存,对于并非使用new获得的那些内存,Java允许在类中定义一个名为finalize()的方法,它的工作原理:一旦垃圾回收器准备好释放对象占用的存储空间,会首先调用finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存,如果程序执行结束,垃圾回收器一直都没有释放所创建的任何对象的存储空间,程序退出时,这些资源也会全部交还给操作系统。

  对象可能不被垃圾回收,垃圾回收不等于析构,垃圾回收只与内存有关;无论是“垃圾回收”还是“终结”,都不能保证一定会发生,如果Java虚拟机并没有面临内存耗尽的情况下,它不会浪费时间去执行垃圾回收去释放内存;System.gc()用于强制进行终结动作。

  Java垃圾回收采用的是自适应工作模式,“停止-复制”要求在释放旧有对象之前,必须把存活的对象把旧堆复制到新堆,将会导致大量的内存复制行为,垃圾回收引入了块,有了块之后,垃圾回收器在回收的时候就可以望废弃的块中复制对象了,每个块都有相应的代数来记录它是否存活,块在某处被引用,代数也会增加,垃圾回收器将对上次回收动作之后新分配的块进行整理,垃圾回收器会定期进行完整的清理动作-大型对象不会被复制(只是代数会增加),内含小型对象的那些块则被复制并整理,Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式,同样,Java虚拟机会跟踪“标记-清扫”的效果,要是堆空间出现很多碎片,就会切换回“停止-复制”方式,这就是“自适应”技术。

  在同一个类中无论局部变量放在任何位置,它们都会在调用构造器或其他方法之前得到初始化。

  无论创建多少个对象,静态数据都只占用一份存储区域,初始化的顺序是先静态对象,而后是“非静态”对象,构造器实际上也是静态的。

  在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。

  Static关键字不能应用于局部变量,它只能作用于域,如果一个域是静态的基本类型域,且没有初始化,那么,它默认是基本数据类型的初值,如果是对象引用,它默认的初值就为null。

  所有数组都有一个固有成员length,Java数组默认从0开始,以length-1结束。

  Arrays.toString()方法属于java.util标准类库,它将产生一维数组的可打印版本。

  枚举类型enum关键字,枚举类型的实例是常量,按照命名惯例它们都用大写字母表示。