您的位置:首页 > 编程语言 > Java开发

《Java 编程思想》-第5章 初始化和清理 笔记

2017-01-18 16:30 369 查看

第5章 初始化与清理

一,默认构造器

默认构造器是没有形式参数,如果你写的类没有构造器,则编译器会自动帮你创建一个默认构造器。但是,如果已经定义一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器。

二,方法重载

(一),区别重载的方法是根据参数列表的不同,参数的类型不同,参数的顺序不同(会使代码难以维护)。

(二),如果传入的数据类型小于方法中声明的形式参数类型,传入的数据类型会被提升,char类型略有不同,如果无法找到恰好接受char参数的方法,就会把char提升为int。反之,就会对传入数据类型进行窄化转化。

三,this关键字

(一), this可以认为是“当前对象”的引用,用法与其他对象的引用并无不同。如果在方法内调用同一个类的另一个方法时,可以直接调用,

(二),this可以调用一个构造器,但却不能在同一个构造器中调用两个构造器,并且要放在构造器最起始处,此外,不能在其他方法内调用构造器。

四,清理

(一),说到Java的垃圾回收前,要说说Java中的堆和堆栈的区别:

栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

1,栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量。在java中,所有基本类型和引用类型都在栈中存储,栈中数据的生存空间一般在当前scopes内(就是由{…}括起来的区域)。

2,堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中,在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象,所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用。

3,栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存储分配需要更多时间。

(二),垃圾回收机制详解

http://blog.csdn.net/zsuguangh/article/details/6429592

五,可变参数列表

代码:

public class Test4 {
public static void f(int i,String...trailing)
{
System.out.print("require: "+i+" ");
for(String s:trailing)
{
System.out.print(s+" ");
}
System.out.println();
}
public static void main(String[] args) {
f(1,"one");
f(2,"one","two");
f(0);
}
}


在重载时使用可变参数列表,要小心,会出现错误

public class Test4 {
public static void test(String... args) {
System.out.println(args.getClass());
for (String arg : args) {
System.out.println(arg);
}
}
public static void test(String arg, String... args) {
System.out.println(arg);
System.out.println("----------------");
for (String s : args) {
System.out.println(s);
}
}
public static void main(String[] args) {
test();
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}

}


错误提示:The method test(String[]) is ambiguous for the type Test4,方法类型有歧义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 编程