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语句中使用。
java编程思想第五章初始化与清理的更多相关文章
- java编程思想-第五章-某些练习题
参考https://blog.csdn.net/caroline_wendy/article/details/46844651 10&11 finalize()被调用的条件 Java1.6以下 ...
- Java编程思想——第17章 容器深入研究 读书笔记(三)
七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...
- Java编程思想——第17章 容器深入研究(two)
六.队列 排队,先进先出.除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: add ...
- Java编程思想 第21章 并发
这是在2013年的笔记整理.现在重新拿出来,放在网上,重新总结下. 两种基本的线程实现方式 以及中断 package thread; /** * * @author zjf * @create_tim ...
- 关于 java编程思想第五版 《On Java 8》
On Java 8中文版 英雄召集令 这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! ...
- Java编程思想学习(五)----第5章:初始化与清理
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一. C++引入了构造嚣(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法.Java中也采用了构造器,并 ...
- 《Java编程思想》笔记 第五章 初始化与清理
1.构造器 因为创建一个类的对象构造器就会自动执行,故初始化某些东西特好 2.方法重载 方法名相同,参数列表不同. 2.1 区分重载方法 方法重载后区别不同方法的就是方法签名 -->参数类型和个 ...
- Java编程思想——第14章 类型信息(一)
运行时类型信息使得你可以在程序运行时发现和使用类型信息.Java是如何让我们在运行时识别对象和类的信息得呢? 主要有两种方式:1.传统RTTI,他假定我们在编译期间已经知道了所有类型:2.反射,它允许 ...
- Java编程思想-第四章练习题
练习1:写一个程序,打印从1到100的值 public class Print1To100{ public static void main(String args[]){ for(int i = 1 ...
随机推荐
- Bootstrap3全局CSS样式
目录 1. 概览 2. 栅栏系统 3. 文本 4. 列表 5. 代码 6. 表格 7. 表单 7.1 基本实例 7.2 内联表单 7.3 水平排列的表单 8. 按钮 9. 图片 10. 辅助类 10. ...
- linux下ipython的安装
第一种:ipython源码安装ipython的源码下载页面为:https://pypi.python.org/pypi/ipython 或者是到git页面下载:https://github.com/i ...
- JDK各个版本的新特性jdk1.5-jdk8[转]
JDK各个版本的新特性 对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一 ...
- 添加nginx服务到service的过程
Linux命令service - 系统服务管理(转) 用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等. ...
- 深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器
引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Ac ...
- bash: .bashrc: command not found
解决这个错误需要: vi ~/.bashrc 进入以后把 .bashrc 给注释掉 就不会再报错了.
- vue-cli入门之项目结构分析
一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] build文件主 ...
- bt种子文件是什么(包括bt文件结构)
bt种子文件是什么(包括bt文件结构) 一.总结 一句话总结:带特定格式特定信息(资源的url相关信息)的一个字符串(和json有点异曲同工之妙的感觉). 1.bt种子文件和json的区别和联系? 共 ...
- sublime text配置编译C#环境
参照:http://www.cnblogs.com/Bob-wei/p/4670341.html 添加C#支持(Windows) 1) 配置环境变量 Path C# 6.0编译器:可以将cs ...
- 自己动手写一个U盘拷贝小工具
这是五一期间,参照知乎上一篇的文章<十行代码--用python写一个USB病毒>写成的,最初只是单纯的想写成死循环,直到文件占满硬盘为止,第一个遇到的问题是,拷贝到硬盘之后,由于要无限次拷 ...