初始化与清理
来源:互联网 发布:java书籍推荐顺序 编辑:程序博客网 时间:2024/05/21 05:23
一、构造器
1. 重载
重载根据参数的数量、类型、顺序来区分同名方法,但不能根据返回值来区分。如两个方法:
void f(){}int f(){ return 1;}
调用的时候只写了f(),编译器无法确定你想要调用的是哪一个。
2. 构造器
除构造器外,编译器禁止在其他任何方法中调用构造器;
二、 清理:终结处理和垃圾回收
Java虚拟机具有自动垃圾回收机制,在合适的时候,虚拟机会开启一个线程,去清理垃圾对象。但是,Java里的对象并非总是被垃圾回收的。你会发现,只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放。如果程序执行结束,并且垃圾回收器一直都没有释放你创建的任何对象的存储空间,则随着程序的退出,那些资源也会全部交还给操作系统。这个策略是恰当的,因为垃圾回收本身也会有开销,要是不使用它,那就不用支付这部分开销了。
1. finalize()方法
一旦垃圾回收器准备好释放对象占用的存储空间,会首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象的内存。所以要是你打算用该方法,就能在垃圾回收时刻做一些重要的清理工作。我们可能会认为当一个对象中含有其他对象时,而垃圾回收只清空了当前对象的内存,实则不然,垃圾回收会清理该对象所占用的所有内存,那么finalize()方法到底在什么时候使用呢?而finalize()方法的使用场合很有限——这种情况主要发生在使用“本地方法”时,本地方法是一种在Java中调用非Java方法的方式。在非Java代码中,也许会调用C的malloc()函数系列来分配存储空间,而且除非调用了free()函数,否则存储空间将得不到释放,从而造成内存泄露。当然,free()是C和C++中的函数,所以需要在finalize()中使用本地方法调用它。finalize()方法还有一个作用,由于程序员的错误,可能一些没有被引用的对象还是有用的或者是不能被回收的。我们可以在finalize()方法在回收之前做一个判断,是否满足被回收的要求,如果不满足回收要求,需要进行异常处理。
2. System.gc()方法
System.gc()用于强制进行终结动作。它提醒虚拟机:程序员希望进行一次垃圾回收,但不能保证垃圾回收一定执行,而且什么时候执行取决于VIM,不同的VIM有不同的对策。
三、初始化顺序
在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量定义散布于方法定义之间,他们仍然会在任何方法(包括构造器)被调用之前得到初始化。
1. 静态数据初始化
静态变量、静态方法、静态代码块:在创建第一个类对象时,静态数据才会被舒适化。之后,静态对象不会再次被初始化。
2. 可变参数列表
方法的参数为数组时,可以写成可变参数列表的样式:
void f(Object... args){ }//调用时:f(47,"one",new A()); //可以任意长度的object对象f((Obect[]) new Integer[]{1,2,3,4}); //可以是一个数组f(); //可以为空//还可以定义这种:void f(int required,String... trailing){ }
有了可变参数,就再也不用显式地编写数组语法了,当你指定参数时,编译器实际上会为你去填充数组。
阅读全文
0 0
- 初始化与清理之一 (初始化)
- 初始化与清理
- CH5 初始化与清理
- 4.初始化与清理
- 初始化与清理
- Java初始化与清理
- 初始化与清理
- 初始化与清理
- 对象初始化与清理
- 初始化与清理
- 初始化与清理
- java 初始化与清理
- java 初始化与清理
- Java 初始化与清理
- java_初始化与清理
- Java初始化与清理
- 初始化与清理
- 初始化与清理_01
- BZOJ 1628: [Usaco2007 Demo]City skyline
- C# 基础课堂笔记 中
- springMVC原理(四):SpringMVC视图机制详解[附带源码分析]
- Android.mk
- Java String字符串深入详解
- 初始化与清理
- (二十一)状态模式详解(DOTA版)
- Kotlin基础
- 让人生发生戏剧性变化的整理魔法(笔记)
- spring整合mybatis的问题记录
- [Java多线程 三]---JMM内存模型
- Java web中的web-xml中标签定义之jsp-config
- es6 (1)
- ant+jenkins+testNG自动化测试环境搭建