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语句中使用。

  

 

  

java编程思想第五章初始化与清理的更多相关文章

  1. java编程思想-第五章-某些练习题

    参考https://blog.csdn.net/caroline_wendy/article/details/46844651 10&11 finalize()被调用的条件 Java1.6以下 ...

  2. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  3. Java编程思想——第17章 容器深入研究(two)

    六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...

  4. Java编程思想 第21章 并发

    这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...

  5. 关于 java编程思想第五版 《On Java 8》

    On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...

  6. Java编程思想学习(五)----第5章:初始化与清理

    随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...

  7. 《Java编程思想》笔记 第五章 初始化与清理

    1.构造器 因为创建一个类的对象构造器就会自动执行,故初始化某些东西特好 2.方法重载 方法名相同,参数列表不同. 2.1 区分重载方法 方法重载后区别不同方法的就是方法签名 -->参数类型和个 ...

  8. Java编程思想——第14章 类型信息(一)

    运行时类型信息使得你可以在程序运行时发现和使用类型信息.Java是如何让我们在运行时识别对象和类的信息得呢? 主要有两种方式:1.传统RTTI,他假定我们在编译期间已经知道了所有类型:2.反射,它允许 ...

  9. Java编程思想-第四章练习题

    练习1:写一个程序,打印从1到100的值 public class Print1To100{ public static void main(String args[]){ for(int i = 1 ...

随机推荐

  1. Bootstrap3全局CSS样式

    目录 1. 概览 2. 栅栏系统 3. 文本 4. 列表 5. 代码 6. 表格 7. 表单 7.1 基本实例 7.2 内联表单 7.3 水平排列的表单 8. 按钮 9. 图片 10. 辅助类 10. ...

  2. linux下ipython的安装

    第一种:ipython源码安装ipython的源码下载页面为:https://pypi.python.org/pypi/ipython 或者是到git页面下载:https://github.com/i ...

  3. JDK各个版本的新特性jdk1.5-jdk8[转]

    JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...

  4. 添加nginx服务到service的过程

    Linux命令service - 系统服务管理(转) 用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等. ...

  5. 深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

    引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Ac ...

  6. bash: .bashrc: command not found

    解决这个错误需要: vi ~/.bashrc 进入以后把 .bashrc 给注释掉 就不会再报错了.

  7. vue-cli入门之项目结构分析

    一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] build文件主 ...

  8. bt种子文件是什么(包括bt文件结构)

    bt种子文件是什么(包括bt文件结构) 一.总结 一句话总结:带特定格式特定信息(资源的url相关信息)的一个字符串(和json有点异曲同工之妙的感觉). 1.bt种子文件和json的区别和联系? 共 ...

  9. sublime text配置编译C#环境

    参照:http://www.cnblogs.com/Bob-wei/p/4670341.html 添加C#支持(Windows)  1) 配置环境变量 Path     C# 6.0编译器:可以将cs ...

  10. 自己动手写一个U盘拷贝小工具

    这是五一期间,参照知乎上一篇的文章<十行代码--用python写一个USB病毒>写成的,最初只是单纯的想写成死循环,直到文件占满硬盘为止,第一个遇到的问题是,拷贝到硬盘之后,由于要无限次拷 ...