初始化(initialization)和清除(cleanup)
一、构造器(constructor)
在Java中,通过提供“构造器”,确保每个对象都会得到初始化。“构造器”的名称必须与类名完全相同(所以“每个方法的首字母小写”的编码风格不适用于构造器)。
通过“构造器”将“初始化”与“创建”捆绑在一起,两者不能分离。二、方法重载(method overloading)
在Java中,为了让方法名相同而形式参数不同的构造器存在,必须用到“方法重载”。同时,尽管方法重载是构造器必须的,但它亦可应用于其它方法,且用法同样方便。
1、 区分方法重载
规则如下:
a)
每个重载的方法都必须有独一无二的参数类型列表。b) 形式参数顺序不同也可以区分两个方法(不建议使用)。
2、 涉及基本类型的重载
基本类型能从一个“较小”的类型自动提升至一个“较大”的类型。
a) 例如对方法f1(int)及其重载的方法f2(long),f3(float),f4double)来说,输入参数 5被当作int值处理。如果某个方法接受int值,它就会被调用。至于其他情况,如果传入的实际参数类型“小于”方法中声明的形式参数类型,实际参数的类型就会被“提升”。char类型有所不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型。
b) 如果传入的实际参数“大于”重载方法声明的形式参数。在调用时,就需要对传入的实际参数做“强制类型转换”,否则编译器会报错。但是,这是一种“窄化转换”,在转换过程中可能丢失信息。
3、 缺省构造器
若创建一个对象以后,没有创建该对象的构造器,Java编译器会为其自动创建一个缺省构造器(无参数)。但是如果该对象已经定义了一个构造器(无论有无参数),Java编译器都不会再自动创建缺省构造器。此时若调用的构造器参数类型不正确,编译器就会报错。
4、 this关键字
若希望在方法内部获得对当前对象的引用,可使用专门的关键字:this。
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。但如果在方法内部调用同一个类的其他方法,就不必使用this,直接调用即可。
a) 使用this关键字实现在一个构造器中调用另一个构造器。通常写this都是指“这个对象”或“当前对象”,而且它本身表示对当前对象的引用。在构造器中,如果为this添加了参数列表,就表示:这将产生对符合参数列表的某个构造器的明确调用。实例如下:
public class Flower{
Flower(int petals){}
Flower(String s){}
Flower(String s,int petals){
this(petals);
this.s=s;
}
}
除构造器外,编译器禁止在其他任何方法中调用构造器。
b) static 的含义
静态(static)方法就是没有this的方法。在静态方法内部不能调用非静态方法,反过来则可以。而且可以不创建任何对象,仅通过类本身来调用静态方法。静态方法具有全局函数的意义,且由于其不存在this,所以不是通过“向对象发送消息”的方式来完成的。
三、清除(cleanup):终结(finalization)和垃圾回收(garbage collection)
Java中有垃圾回收器来回收无用对象占据的内存,但只能释放经由new分配的内存。对于特殊的内存区域(并非使用new),Java允许在类中定义一个名为finalize()的方法。其工作原理如下:一旦垃圾垃圾回收器准备好释放对象占用的内存,将首先调用finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
无论对象是如何创建,垃圾回收器会释放对象占据的所有内存。于是确认finalize()的使用范围:通过某种非“创建对象”的方式为对象分配了存储空间。如在Java中调用非Java代码,而在非Java代码中,也许会调用类似C的malloc()函数来分配内存空间。
无论是“垃圾回收”还是“终结”,都不一定会发生。若Java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间在回收垃圾以回复内存上的。
四、成员初始化
Java尽力保证:所有变量在使用前都能得到恰当的初始化。对定义于方法内部的局部变量,强制要求提供初始值。
对于类的数据成员是基本类型(类中任何方法都可以初始化或用到这个数据),若未提供初始值,Java会提供默认值。1、 指定初始化
a.直接提供初值
class InitialValues{
boolean b = true;
char c = ‘x’;
bye B = ‘47’;
int i = 99;
}
b.调用某个方法提供初值
class Init{
int i = f();
int j = g(i)
}
2、 构造器初始化
class Counter{
int i;
Counter(){ i = 1;}
}
3、 初始化顺序:在类内部,变量定义的顺序决定了初始化的顺序。
4、 静态数据的初始化:如果属于某个基本类型,而且也没有初始化,那么它会获得基本类型的标准初值;如果是一个对象引用,那么除非你新创建一个对象,并指派给该引用,否则它就是空值(null)。
5、 明确进行的静态初始化
在静态模块中集中初始化
class Spoon{
static int i,j;
static {
i = 1;
j = 2;
}
}
6、 非静态实例初始化
class Spoon{
int i,j;
{
i = 1;
j = 2;
}
}
五、数组初始化
1、数组的初始化可以在代码的任何地方,也可以使用一种特殊的初始化表达式,它必须在创建数组的地方出现。
int[] a = {1,2,3,4,5};
2、使用new来初始化。若数组的元素是基本数据类型,其元素值会自动转化为“空”值(对数字和字符,就是0;对布尔型,是false)
Int[] b = new int[rand.nextInt(20)];
若数组中的元素不是基本的数据类型,会遇到引用的问题,因为每一个数组元素都是都是一个引用,必须使用new
Integer[] c = {
new Integer(0),
new Integer(1),
new Integer(2),
};//数组长度固定
Integer[] d = new Integer[]{
new Integer(3),
new Integer(4),
new Integer(5),
};//数组长度不固定
3、多维数组的初始化与一维数组是一样的。
总结:
经过学习,对Java中的构造器、初始化等有了深入的了解。比起以前的用到哪里查哪里感觉有了很大的提高。
分享到:
相关推荐
这是本文精心搜集的关于java方面的深入学习的资料合集,包括 how tomcat works中文版367页pdf j2ee教程2010ppt java并发编程培训(阿里巴巴)ppt java反射机制总结pdf java数据结构上机实践指导教程pdf java网络编程...
在深入学习Java Swing的过程中,我们通常会经历初级、中级、高级以及特效这四个阶段的学习。 **初级篇:基础组件与布局管理** 在初级阶段,我们需要掌握Swing的基础组件,如JButton、JLabel、JTextField、JTextArea...
"Java深入学习就靠他了"这个资源显然旨在帮助有经验的Java开发者深化对这门语言的理解,尤其是那些正处于技术突破阶段的程序员。它涵盖了Java的核心技术和高级特性,旨在提升开发者在J2SE(Java标准版)和J2EE(Java...
java泛型详细学习,深入学习java的不二之选
在"深入Java集合学习系列(四):LinkedHashMap的实现原理_尚硅谷_张晓飞.pdf"中,你将深入理解LinkedHashMap的内部双向链表结构及其与HashMap的区别。 总结起来,这个学习系列将帮助你全面理解Java集合框架中的...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
这书着重点是讲java线程,但不局限于java,对posix线程库,win32线程库都有涉及,并对这三者做了一些比较,对于想深入了解线程的人,这书是绝对有帮助的。
"java深入学习笔记.pdf" java是一种广泛应用的编程语言,具有平台独立性、对象oriented、分布式处理等特点。在java深入学习笔记.pdf中,我们可以学习到以下知识点: 一、java基础知识 * 变量声明:在java中,变量...
《深入分析Java ++Web技术内幕 修订完全版》是一本专为Java Web开发人员精心编写的权威指南。这本书详尽地探讨了Java在Web领域的应用和技术内幕,旨在帮助读者掌握核心概念并提升实际开发能力。作为一本必备的参考...
面向对象编程(OOP)是Java的一个核心特点,因此深入学习OOP的相关概念是必不可少的。这部分包括但不限于: - **继承**:了解子类如何继承父类的属性和行为。 - **构造器**:掌握如何创建对象及其初始化过程。 - **...
### 学习Java必看的书籍 在Java学习过程中,选择合适的书籍对于深入理解这门语言至关重要。根据提供的部分信息,我们将重点介绍三本被广泛推荐的经典Java书籍:《Thinking in Java》、《Java Collections》以及...
《深入体验Java_Web开发内幕—核心基础》是一本针对Java Web开发的深度解析书籍,旨在帮助读者全面理解和掌握Java Web开发的核心技术。这本书涵盖了从基础到高级的多个主题,旨在提供一个完整的Java Web开发学习路径...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。...通过深入学习,开发者不仅可以理解Java程序的运行机制,还能更好地优化代码,提高系统的稳定性和性能。
《Java学习指南第四版下册》是一本专为Java初学者和进阶者设计的教程,旨在帮助读者全面深入地掌握Java编程语言的核心概念和技术。该书中文版的第四版下册涵盖了Java语言的高级特性,是理解Java编程精髓的重要资料。...
掌握这些基础,是深入学习Java的前提。 类和对象是面向对象编程的核心。类是创建对象的模板,它定义了对象的属性和行为。对象则是类的实例,具有特定的属性值和可执行的操作。接口则用于定义对象间的通信方式,提供...
同时,它还深入探讨了集合框架、IO流、网络编程和反射等高级主题,是学习Java不可或缺的教材。 2. 《Java编程思想》:这本书以独特的视角和深入浅出的语言,讲解了Java的设计理念和编程技巧。作者 Bruce Eckel 提倡...
资源名称:深入学习 JFC Swing:Java 基础类组件集资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
《深入浅出Java》这本书以其独特的讲解方式,旨在让学习者轻松掌握复杂的Java编程...通过学习,你将能够编写出高效、可靠的Java应用程序,并且为未来深入学习Java EE、Android开发或其他Java相关的技术打下坚实基础。