zoukankan      html  css  js  c++  java
  • java编程思想第五章初始化与清理

    5.1使用构造器确保初始化:

      构造器与一般方法一样,但是没有返回值,且其方法名与类名完全相同。

      不接受任何参数的构造器成为默认构造器,也叫无参构造器。

    5.2 方法重载:

      为什么会有方法重载?

        构造器是方法重载的一个重要原因,若想以多种方式创建构造器,就必须将方法进行重载,即使用有参构造。

      如何区分重载方法?

        方法名相同为前提,使用参数列表来区分。

        注:使用返回值是不能够区分重载方法的,因为有时候你仅仅是调用方法,而不在意他的返回值。

    5.3默认构造器:

      没有参数的构造器,作用是创建一个默认的对象。

      注:当类中没有构造器时,编译器会帮我们创建一个默认的构造器(无参构造器)

    5.4this关键字:

      编译器在方法调用前,会将代码修改,将对象的引用作为参数,然后使用类名.的形式调用方法。

      但是这个对象的引用是编译器加的,所有没有标识符,java语言提高了this关键字来表示“调用方法的对象”的引用。

      用途:

        在构造器中可以使用this关键字调用其他构造器,注:不能在一个构造器中调用两个。

      static与this:

        static方法就是没有this的方法。注:静态方法内不能够调用非静态方法(即在static中无法调用this)。

        static方法可以在对象创建之前,直接使用类名.方法名调用。

        注:static是随着类的.class被加载的时候就被加载进入内存的,是同类同一级别。

    5.5清理:终结清理和垃圾回收:

      可以自定义java的finalize()方法:

      

      其工作原理:

        一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize(),注:一个对象一生只调用一次,不管有没有成功被回收。

        如果第一次GC没有回收,那么以后GC时将不会调用方法。

        注:正常对象一次GC即被回收,但是也可以能出现多次GC而不被回收的情况。

      finalize()的用途何在?

        由于GC只与内存有关,那么与GC有关的行为(finalize())方法必须同内存及其回收相关。    

        场景涉及到了“本地方法”,这是java中调用非java形式(C、C++),需要在finalize()调用其对应的方法帮助清理,避免内存泄漏。

      注:这个方法很危险。实际上JVM有自己的垃圾回收机制。并不需要我们去调用这个方法。

      实际上finalize()方法可以用于对象“终结条件的验证”,这样便于程序设计的过程中发现可能出现的遗漏。

      垃圾回收器的工作:

        停止-复制(stop-and-copy):先停止程序,然后将存活对象从当前堆复制到另一个堆,没有被复制的就是垃圾,被复制的对象以紧凑的方式重新排列。

        注:效率低:1)要从分离的堆中来回复制。2)程序稳定后可能垃圾少,这时候复制是对资源的浪费。

        为了避免出现没有垃圾的情况,JVM会进行检查,没有新垃圾产生,就好切换另一种工作模式:标记-清扫(mark-and-sweep),该模式也必须在程序暂停的时候使用

        从堆栈和静态存储区出发,遍历所有引用,找出活的,给活得标记,标记完成开始清理。

      自适应,这两种方式是来回进行切换的。

      JIT(just-in-time)即时编译器。这是与加载器相关的功能。这种技术可以把程序全部或部分翻译为机器码,从而使运行速率提升。

    5.6成员初始化:

      所有变量在使用前都必须进行初始化。

      可以直接指定初始化,也可以使用构造器初始化。

      注:在类内部,变量定义顺序觉得其初始化顺序,变量的初始化会优先于方法的调用。

    5.7构造器初始化:  

      静态数据的初始化:只占用一块存储空间。

      对象的创建过程:

        1)首次创建对象或者调用静态成员时,java编译器会找到.class文件。

        2)载入.class文件(得到Class对象),有关静态初始化会完成。  

        3)new对象时,在堆内存上创建空间。

        4)空间被清空,自动为所有成员变量设置默认值。

        5)执行指定初始化(这里指的是对基本数据类型和引用数据类型的初始化,在Java中总是会优先去加载成员变量,不论成员变量位置在哪里,都是会优先加载)。

        6)执行构造器。

      静态代码块:仅执行一次,当创建类对象或者访问类静态成员时执行。

    5.8数组初始化:

      数组中的引用元素只有在明确指定引用时才算初始化完成。

      可变参数列表:注必须放在参数的最后一位。类型...参数名

    5.9枚举初始化:

      枚举类似的实体是常量,常用大写字母表示。

      枚举在创建时会写很多方法,如toString()、ordinal()用于表明顺序、以及static values()按常量顺序构成数组等

      枚举可以在switch语句中使用。

      

     

     

     

      

  • 相关阅读:
    请教提高上百万行数据insert速度的“经典”方法
    poj1411
    poj1422
    poj1661
    poj1664
    poj1405
    交往艺术与沟通技巧[推荐]
    不可不听的10个职场故事
    也谈如何“领导”你的领导
    十个让爱情稳固的经典好习惯
  • 原文地址:https://www.cnblogs.com/lilinzhiyu/p/8260999.html
Copyright © 2011-2022 走看看