• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java 初始化与清理

java 初始化与清理

作者:Eason的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-27

Eason的博客通过本文主要向大家介绍了java等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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){ }

有了可变参数,就再也不用显式地编写数组语法了,当你指定参数时,编译器实际上会为你去填充数组。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28java Spring AOP详解及简单实例
  • 2017-05-28十大常见Java String问题_动力节点Java学院整理
  • 2017-05-28spring boot整合RabbitMQ(Direct模式)
  • 2017-05-28MyBatis拦截器实现分页功能实例
  • 2017-05-28Java方法重写_动力节点Java学院整理
  • 2017-05-28Java 关键字static详解及实例代码
  • 2017-05-28浅谈java中OO的概念和设计原则(必看)
  • 2017-05-28详解Spring Boot集成MyBatis(注解方式)
  • 2017-05-28Java 中的 BufferedWriter 介绍_动力节点Java学院整理
  • 2017-05-28Spring Boot多数据源及其事务管理配置方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java利用java.net.URLConnection发送HTTP请求的方法详解
    • 使用Java 8中的Lambda表达式实现工厂模式
    • Java Calendar类常用示例_动力节点Java学院整理
    • spring boot拦截器实现IP黑名单实例代码
    • Java System类详解_动力节点Java学院整理
    • Java 加密解密基础分类及模式归纳整理
    • 深入理解java异常处理机制的原理和开发应用
    • java加载properties文件的六种方法总结
    • java加载properties文件的六种方法总结
    • Java中sleep()与wait()的区别总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有