`

【Thinking in Java】四:初始化与清理

阅读更多
一 Java初始化

Java通过使用构造器来初始化,构造器与类的名字相同,是一种特殊类型的方法,因为没有返回值。

二 方法重载

Java允许方法名一致,区分方法:
1 参数个数,种类不同
2 参数顺序不同
为什么Java不允许以返回值区分?
void f(){}
int f(){return 1;}

如果我们调用的时候:f();
Java如何判断调用哪个f()呢,so这种区分方法不行。

三 this关键字
public class Test1 {
	public static void main(String[] args) {
		Test1 a = new Test1();
		Test1 b = new Test1();
		
		a.f(1);
		b.f(1);

	}
	
	int f(int i){
		return i;
	}	
}



Java是为了发送消息给对象,这时编译器做了一些操作把所操作对象的引用也传给了f(),实际上应该是
Test1.f(a,1);Test1.f(b,1);

假设你想在方法内部获得对该对象的引用,那么就使用this关键字。
直接调用同一个类的其他方法,无需使用this,编译器会自动处理。

四 static关键字

static方法内部不能调用非静态方法,可以在没有创建对象的前提下通过类型调用,这也是static方法的主要用途。

五 垃圾回收器原理

1 首先了解下一种简单的垃圾回收机制-->引用计数,它是一种简单但速度很慢的垃圾回收技术。每个对象都有一个引用计数器,当有引用连接对象时,引用数加1,当引用离开作用域或被置为null时,引用数减1。
虽然管理引用计数的开销不大,但这项开销在整个生命周期中都存在。
垃圾回收器遍历对象,引用数为0的,就释放其占用的空间。
如果对象之间存在循环引用,可能会出现“对象应该被回收,但计数不为0”,这种情况需要的工作量很大,Java编程思想作者 Bruce Eckel指出似乎这种方法从未在任何一种JVM上实现。

2 更好模式的指导思想:对任何存活的对象,一定能追溯到其存活在堆栈或静态存储区之间的引用。

Java虚拟机采取了一种自适应的垃圾回收技术,有一种作法:停止-复制。

暂停程序的运行,然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的全部是垃圾,对象搬家后,指向它的引用必须修正。

程序进入稳定状态后,可能只产生少量垃圾,这种方法就很浪费,为了更高效,Java就会进行检查,要是没有新垃圾产生就切换到另外一种模式:标记-清扫。

3 标记-清扫思想:从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。每当找到一个存活的对象,就会给对象一个标记,这个过程不会回收任何对象。只有在全部标记工作完成后,清理动作才会开始,没有标记的对象被释放。

标记-清扫也要在程序暂停的情况下运行。

4 内存分配以较大的“块”为单位,如果对象较大,它会单独占用一块,大型对象不会被复制,每次停止-复制后其代数会增加,如果没用引用,那么直接释放。

5 如果程序运行时,所有对象都很稳定,那么JVM使用标记-清扫方式,要是堆空间出现很多碎片,那么就切换为 停止-复制

这就是自适应,你可以理解为自适应、分代的、标记-清扫、停止-复制式垃圾回收器。

深入解析垃圾回收机制:http://my.oschina.net/winHerson/blog/114391

六 成员初始化顺序

public class TestIntialize {

	{
		System.out.println("1");
	}
	
	static{
		System.out.println("11");
	}
	
	TestIntialize(){
		System.out.println("111");
	}
	
	public static void main(String[] args) {
		new xxx();
		System.out.println("----------------");
		new xxx();
	}
}

class xxx extends TestIntialize{
	{
		System.out.println("2");
	}
	
	static{
		System.out.println("22");
	}
	
	xxx(){
		super();
		System.out.println("222");
	}

}


执行结果:
11
22
1
111
2
222
----------------
1
111
2
222

由这段实例,可以看出初始化顺序先执行静态块,类加载时,静态块便会加载,而且只加载一次,然后执行动态代码块,最后执行构造函数。

静态块-->动态块-->构造函数
1
5
分享到:
评论

相关推荐

    Thinking in java4(中文高清版)-java的'圣经'

    5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在 5.5.2 你必须实施清理 5.5.3 终结条件 5.5.4 垃圾回收器如何工作 5.6 成员初始化 ...

    Thinking in Java读书笔记

    #### 第四章 初始化和清理 1. **构造函数(Constructor)** - 构造函数确保对象创建时执行必要的初始化。 - 当类中有构造函数时,Java会在创建对象时自动调用它。 2. **函数重载(Method Overloading)** - **区分...

    Thinking in Java Fourth Edition

    ### 《Thinking in Java》第四版重要知识点概览 #### 第1章 对象入门 - **对象的概念**:介绍面向对象编程的基本概念,包括对象、类、实例等。 - **创建对象**:详解如何在Java中创建对象,包括使用`new`关键字。 -...

    Thinking in Java.

    - **第4章:初始化与清理**:讨论对象的创建过程、初始化顺序以及资源释放的最佳实践。 ##### 第二部分:面向对象进阶 - **第5章:隐藏实现细节**:介绍抽象与封装的概念,学习如何设计具有良好隐藏机制的类。 - *...

    thinking in java读书笔记

    通过以上总结,我们可以更深入地理解《Thinking in Java》中关于构造器、方法重载、对象引用、静态与非静态方法调用、垃圾回收机制、对象初始化以及数组和可变参数列表等核心概念和技术细节。这些知识点对于深入理解...

    thinking in java txt

    - **3.1.2 变量声明**:变量的声明与初始化。 - **3.1.3 运算符**:算术运算符、逻辑运算符等。 - **3.1.4 远程与本地变量**:远程与本地变量的区别。 - **3.1.5 关系运算符**:比较运算符的使用。 - **3.1.6 ...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    《Thinking in Java》是一本深度剖析Java编程语言的著作,旨在帮助读者深入理解Java的核心概念和技术。本书通过对比Java和C++,使读者能够更好地理解Java的独特之处,并为初学者提供了一个逐步学习Java的框架。 第1...

    thinking in Java guide solutio

    根据提供的文件信息,我们可以将《Thinking in Java》第四版中的主要内容和知识点进行详细的解析与总结。本书由Bruce Eckel编写,是学习Java编程语言的经典教材之一。以下是对书中的几个关键章节及其涵盖的重要知识...

    java基础补足和thinking In Java学习.rar

    第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造方法或者无参构造器。在没有其他构造方法的时候可以...

    thinking_in_java 第四版(英文)

    ### Thinking in Java 第四版 — 初始化与清理 #### 核心知识点概述 - **初始化的重要性**:在程序设计中,确保变量和对象被正确初始化至关重要,可以避免运行时错误和安全漏洞。 - **C 语言中的初始化问题**:C ...

    Thinking in Java, 2nd edition

    《Thinking in Java》是Bruce Eckel的经典之作,第二版对初学者和经验丰富的开发者都具有极高的价值。这本书深入浅出地介绍了Java编程语言的核心概念和技术,帮助读者建立起扎实的面向对象编程思想。 1. 面向对象...

    Thinking in Java_all

    第四章“初始化和清除”关注对象的生命周期,包括构造器保证的初始化、方法过载、成员初始化和数组初始化。finalize()方法用于垃圾收集前的清理工作,但不保证一定会执行。 第五章“隐藏实施过程”引入了Java的包和...

    Thinking_in_java中文第4版

    本资料为《Thinking in Java》第四版的中文版,是一本全面介绍Java语言及其编程思想的经典教材。该书内容丰富,覆盖了从基本概念到高级技术的多个层面,适合初学者至进阶开发者学习参考。 #### 重点章节知识点详解 ...

    Thinking in java读书笔记.docx

    - 引用可能未初始化,此时发送消息会导致运行时错误,所以推荐在创建引用时同时初始化。 - `new` 关键字用于在堆中创建对象,提供内存分配的灵活性,但速度相对较慢。 4. **内存区域**: - **寄存器**:最快,但...

    thinking in java

    总之,《Thinking in Java》全面覆盖了Java编程语言的核心概念,包括对象的创建和操作、程序流程控制、初始化、封装、继承、多态性等。这本书不仅适合初学者作为学习指南,也适合经验丰富的开发者作为参考资料,以...

    thinking in java 英文版第三版

    3. **初始化与清理**:详细介绍了Java中对象的创建过程以及如何有效地进行资源清理,确保程序的健壮性和安全性。 4. **隐藏实现细节**:强调了封装的重要性,展示了如何通过封装隐藏对象内部的具体实现,提供一个...

Global site tag (gtag.js) - Google Analytics