文档详情

java编程思想初始化与清理.pptx

发布:2020-02-21约5.38千字共58页下载文档
文本预览下载声明
一、用构造器确保初始化1、 为什么要引入构造器(constructor)?★ 假设没有构造器,那么我们用户就要 自己去完成初始化工作◆ 但用户可能不知道如何初始化,甚至 会忘记初始化一、用构造器确保初始化2、 构造器如何取名?★C++语言采用的解决方案看来最简单 而且最符合逻辑,所以在Java中也是 采用了这种方案◆构造器采用与类相同的名称一、用构造器确保初始化3、 构造器的种类★无参的构造器(习惯称为默认构造器)★ 带参的构造器一、用构造器确保初始化4、 构造器的特点★构造器是一种特殊类型的方法,因为 它没有返回值◆ 分析:与返回值为void (空)的区别, 后者仍有可能以其它形式返回某些值二、方法重载1、方法重载的概念★方法名相同,而参数类型列表不同◆ 也就是依靠参数的个数、类型和顺序 的不同加以区分(后者不推荐使用)二、方法重载2、 在C++和Java中,为什么必须要支持 方法重载?★构造器是一个非常重要的原因★ 既然构造器的名字由类名所决定,就只能有 一个构造器名,那么如果想用多种方式创建 一个对象,该怎么办?◆ 典例:Tree()// 无参构造器 Tree(int i)// 带参构造器◆ 为了让方法名相同而参数不同的构造器同时 存在,必须用到方法重载三、默认构造器★如果你写的类没有构造器,那么编译器 会自动帮你创建一个默认构造器(无参 构造器)◆ 如果已经定义了一个构造器(无论是否 有参数),编译器就不会帮你自动创建 默认构造器★ 典例1:P83代码class Bird {} public class DefaultConstructor{ public static void main(String[] args) { Bird b = new Bird() // Default! } } ◆ 表达式new Bird()将调用默认构造器,即使你 并没有明确定义它★ 典例2:P83代码Bird class Bird2 { Bird2(int i) {} Bird2(double d) {} } public class NoSynthesis{ public static void main(String[] args) { //! Bird2 b = new Bird2();// 为什么出错? Bird2 b2 = new Bird2(1); Bird2 b3 = new Bird2(1.0);} } 四、this关键字1、 this关键字的含义★ 概念:指向对象本身的引用◆ 问题:为什么需要this关键字?★ class Banana { void peel(int i){/*....*/} } public class BananaPeel { public static void main(String[] args) { Banana a=new Banana(); Banana b=new Banana(); a.peel(1); b.peel(2); } }★ 仔细分析以上代码在内存中执行的情况◆ 首先,我们知道:编译器只为每个对象的数据 成员分配存储空间,而不为成员函数分配空间, 成员函数将随着整个类的装载而装载 ◆ 为什么?所有对象的成员函数都是一样的, 所以没必要为成员函数分配空间★ 于是产生了一个有意思的问题: 成员函数是怎么知道它究竟被哪个对象调用的?◆ 答案是:通过this关键字(编译器自动完成)◆ 编译器将a.peel(1)理解为Banana.peel(a,1) // 即将当前所操作对象的引用作为第一个参数传递 给peel()四、this关键字2、 我们如何使用this关键字?⑴ 返回当前对象的引用★ 典例分析P84代码★ public class Leaf { int i=0; Leaf Increment() { i++; return this; } void print { System.out.println(“i=”+i); }★ public static void main(String[] args) { Leaf x=new Leaf(); x.increment().increment() .increment().print(); } }四、this关键字⑵ 在构造器中调用构造器★ 为避免重复代码,往往使用this关键字◆ 分析P86代码★ public class Flower { int petalCount=0; String s=“initial valu
显示全部
相似文档