(1)构造方法和方法重载 (2)this关键字 (3)方法的传参和递归调用

1.构造方法和方法重载
如:
Person p = new Person(); - 声明Person类型的引用p指向Person类型的对象
p.show(); - 调用名字为show()的成员方法

1.1 构造方法(重中之重)
(1)语法格式
class 类名{

类名(形参列表){
构造方法体;
}
}
如:
class Person{

Person(){
}
}

(2)使用方式
a.构造方法的名称与类名完全相同,并且没有返回值类型,连void都不许有;
b.当创建新对象时会自动调用构造方法来进行该对象中成员变量的初始化工作;

(3)默认构造方法
当自定义类中没有编写任何构造方法时,则编译器会自动添加一个无参的空构造方法,该方法叫做默认/缺省构造方法,如:Person(){}。
若类中出现自定义构造方法,则编译器不再提供任何形式的构造方法。

练习:
自定义Point类,特征:横坐标和纵坐标,行为有:无参构造方法、有参构造方法、打印横坐标和纵坐标的方法。
自定义TestPoint类,在main()方法中先使用无参方式构造对象打印特征,再使用有参方式构造对象打印特征。

1.2 方法的重载(重点)
(1)基本概念
在Java语言中允许出现多个名称相同但参数列表不同的方法,称为:方法的重载(Overload)

(2)主要形式
方法重载的主要形式体现在:形参的个数不同、形参的类型不同、形参的类型顺序不同,
与形参变量名和返回值类型无关,但建议返回值类型最好相同。
判断方法能否重载的核心:在调用方法时能否加以区分。

(3)重载的意义
重载的意义在于调用者只需要记住一个方法名就可以调用各种不同的版本带来不同的结果。
如:
java.io.PrintStream类。
byte b1 = 10;
System.out.println(b1);
short s1 = 10;
System.out.println(s1);
int i1 = 10;
System.out.println(i1);
double d1 = 3.14;
System.out.println(d1);

2.this关键字(原理、理解)
2.1 基本概念
对于构造方法来说,this关键字就代表当前正在构造的对象;
对于成员方法来说,this关键字就代表当前正在调用的对象;

原理:
在每个成员方法中都隐含一个看不见的形参this,当不同的对象调用同一个方法时,会将不同的对象作为实参传递给this,此时this代表的对象不同,而访问成员变量时默认为this.的方式访问,那么this不同就会导致this.成员变量的结果不同。
(this.相当于汉语中"我的")

2.2 使用方式
(1)当形参变量名和成员变量名相同时,在方法体内会优先选择形参变量使用,若希望使用
成员变量,则需要在变量名的前面加上this.进行说明(重中之重)。
(2)在构造方法的第一行可以使用this(实参)的方式调用本类中的其他构造方法(了解)。

3.方法的传参和递归调用
3.1 方法的传参过程(理解)
(1)main()方法是程序的入口,为局部变量分配内存空间并初始化;
(2)调用max()方法,为max()方法的形参变量分配内存空间;
(3)将实参变量的数值赋值为形参变量;
(4)执行max()方法的方法体,方法执行完毕后释放形参变量的内存空间;
(5)main()方法得到max()方法的返回值,并继续向下执行;
(6)直到main()方法结束后,释放main()方法中局部变量的内存空间;

要求大家掌握的内容:
a.当使用基本数据类型作为参数传递时,形参变量的改变通常不会影响到实参的数值;
b.当使用引用数据类型作为参数传递时,形参变量指向内容的改变通常会影响实参的数值;
c.当使用引用数据类型作为参数传递时,若改变形参变量的指向后再改变指向的内容,
此时通常不会影响到实参的数值;

3.2 方法的递归调用(难点)
(1)基本概念
递归就是指在一个方法体的内部调用当前方法自身的形式。

案例:
自定义成员方法计算参数n的阶乘并返回。
解析:
5! = 5 * 4 * 3 * 2 * 1;
4! = 4 * 3 * 2 * 1;
3! = 3 * 2 * 1;
2! = 2 * 1;
1! = 1;

5! = 5 * 4!;
4! = 4 * 3!;
3! = 3 * 2!;
2! = 2 * 1!;
1! = 1;

n! = n * (n-1)!;

(2)使用方式
a.寻找递归的规律并指定退出条件;
b.使用递归使得问题简单化而不是复杂化;
c.若递归算法影响程序的性能,则使用递推替代之;

上一篇:VS2005 “无法在证书存储区中找到清单签名证书”错误的解决方法


下一篇:剑指Offer21 二叉树的层序遍历