`
鬼大来晚了
  • 浏览: 67887 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Java学习笔记——初始化和清理

    博客分类:
  • Java
 
阅读更多

1.构造器
(1)默认构造器:Java同样采用构造器的方式保证对象的初始化,使用同类名相同的名称。系统会自动为每个类生成一个默认构造器,该构造器没有任何参数。创建对象时,使用:Class a=new Class();但是,如果用户自定义了构造函数(无论是否有参数),编译器都不会再帮你自动创建默认构造器了。
(2)构造器重载:用户可以定义多个方法名相同而形式参数不同的构造器,这其实应用了方法重载。
(3)this关键字标识对“调用方法的那个对象的引用”,只能在方法的内部使用。可以通过this在构造器中调用构造器,但是不能调用两个,且调用必须置于起始处。否则编译器会报错。
2、垃圾的终结和回收
(1)终结:我们都知道Java的一个好处就是为我们提供了垃圾回收机制,我们创建对象之后不用像在C++中那样一定要写一个析构函数,确保销毁该对象,在Java中我们尽管创建、使用对象就好,销毁和释放内存有垃圾回收机制自动为我们做好了。但是,由于垃圾回收器只知道释放那些由new分配的空间,如果对象获得了一块“特殊”的内存区域,它就不知道如何释放该对象的“特殊”内存。因此,java中定义了一个名为finalize()的方法:一旦垃圾回收器准备好释放对象占用的空间,将首先调用其finalize方法,并在下一次垃圾回收动作发生时,才真正回收对象占用的空间。注意,垃圾回收并不等于“析构”,JAVA里的对象也并非总是被垃圾回收。finalize()方法只用于一些特殊的情况,例如在java中调用了非java代码,在非java代码中进行了内存的分配,而没有释放内存,这种情况下就需要是用finalize方法进行一些清理工作。
但是,无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果Java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收已恢复内存的。
(3)垃圾回收器的工作原理
引用计数:每个对象都含有一个引用计数器,当有引用连接至对象时,引用计数加1,当引用离开或是被置为null时,引用计数减1。垃圾回收器会在含有全部对象的列表上进行遍历,当发现某个对象的引用计数器为0时,就释放其占用的空间。这种方式简单但是速度很慢,通常用于理解java的垃圾回收机制,但是几乎从未被应用任何java虚拟机中。
停止-复制(stop-and-copy):先暂停当前运行的程序,将所有存活的(至于如何找到存活的对象,取决于不同java虚拟机的实现)对象从当前堆复制到另一个堆,没有被复制的就是垃圾。对象被复制到新的堆以后,保持紧凑排列。但是这种方法效率很低,一方面需要有两个堆,还得在这两个堆之间来回倒腾,需要很大的维护空间,另一方面在程序运行时,产生的垃圾就会很少,复制式回收器将内存从一处复制到另一处,很浪费。因此,有了第三种方式。
标记-清扫(mark-sweep):遍历所有的引用,每找到一个存活的对象,就给它做一个标记,这个过程中不会回收任何对象,直到全部的标记工作完成,清理动作才开始。
java最终采用一种自适应的垃圾回收方式:java虚拟机会进行监控,如果所有的对象都很稳定,垃圾回收器的效率低的话,就切换到"标记-清理"模式,同样,java 会跟踪”标记-清扫“的效果,要是堆空间中出现很多碎片,就会切换会”停止-复制“方式。
3、初始化
java尽力保证:所有变量在使用前都能得到恰当的初始化。类中的每个基本类型数据成员都保证会有一个初始值,对于类对象会置一个null值。对于方法的局部变量,编译器不会自动位置赋初始值,java以编译时的错误来贯彻这种保证。
对于初始化的顺序:先初始化静态对象,而后是非静态对象。并且静态对象只会被初始化一次。
4、可变参数列表
java提供了一种可变参数列表的用法:
例子:

public class NewVarArgs{
static void printArray(Object... args){
 for(Object obj:args)
    System.out.print(obj+ " ");
System.out.println();
}
public static void main(String[] args){
 printArray(new Integer(47),new Float(3.14),new Double(11.11));
 printArray("one","two");
 printArray();
}
}


但是,尽量少的时候这种可变参数列表。
分享到:
评论

相关推荐

    web学习笔记 —— 监听器

    3. **上下文监听器**:`ServletContextListener`,当Web应用程序启动和停止时触发,用于初始化和清理工作。 4. **生命周期监听器**:如`ContainerListener`,可以监听到Servlet容器内部组件的生命周期变化。 三、...

    web学习笔记 —— 过滤器

    `init`方法在过滤器实例化时调用,用于初始化过滤器;而`destroy`方法在过滤器生命周期结束时调用,用于清理资源。 过滤器可以应用于多个URL或者所有URL,这取决于我们在web.xml中的配置。在配置中,我们指定过滤器...

    web笔记 —— Servlet

    容器负责Servlet的生命周期管理,包括加载、实例化、初始化、服务和销毁等。 五、Servlet配置 在web.xml文件中,可以配置Servlet的映射路径、初始化参数、加载顺序等。例如: ```xml <servlet-name>MyServlet ...

    Java编程思想笔记(全)

    本章讨论了Java中的初始化和清理机制。初始化是指对象创建时所进行的操作,而清理则是指对象不再需要时所进行的资源释放操作。主要内容包括构造函数的使用、初始化块的作用以及垃圾回收机制的基本原理。这些知识点...

    Java,JVM相关笔记的代码知识

    这份JVM相关的笔记包含了深入理解JVM内部工作机制的关键代码资源,是学习和优化Java应用程序的重要参考资料。下面,我们将深入探讨Java与JVM的相关知识点。 1. **类加载机制**:JVM通过类加载器(ClassLoader)将...

    Junit4学习笔记—入门篇.pdf

    ### JUnit4学习笔记——入门篇 #### 一、配置MyEclipse在项目中引入JUnit4.jar包 在使用JUnit4进行单元测试之前,首先需要确保开发环境已正确配置JUnit库。对于使用MyEclipse IDE的开发者来说,可以通过以下步骤...

    servlet学习笔记

    ### Servlet 学习笔记 #### 一、Servlet 创建与生命周期 **Servlet** 是 Java Web 开发中的一个核心组件,主要用于处理客户端发送到服务器的 HTTP 请求,并返回相应的响应。Servlet 的创建与生命周期是学习 Java ...

    day_01.rar

    总结来说,"Spring第一天学习笔记"涵盖了Spring框架的核心——IOC容器的使用,Bean的三种实例化策略,以及Bean对象的生命周期管理。理解并掌握这些概念对于深入学习Spring框架至关重要,也为后续的学习打下了坚实的...

    Ant 整合Jenkins自动构建

    标题中的“Ant整合Jenkins自动构建”...至于“Diary”这个文件,如果它是压缩包的一部分,可能是一个日志文件或者项目日记,用于记录构建过程中的信息或学习笔记。不过,没有具体的文件内容,这部分无法进一步讨论。

    ceph官网文档pdf版

    - 包括配置管理工具、初始化集群等操作。 - **手动部署集群** (Deploy a Cluster Manually) - 指导用户如何手动设置 Ceph 集群,而不是使用自动化工具。 - 包括配置节点、调整参数等细节。 - **升级软件** ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

Global site tag (gtag.js) - Google Analytics