Day07
----------------------------------------------------------------------------------
今天内容:
(1)构造方法和方法重载
(2)this关键字
(3)方法的传参和递归调用
1.构造方法和方法重载
如:
Person p = new Person(); - 声明Person类型的引用指向Person类型的对象
p.show(); - 调用名字为show()的成员方法
1.1 构造方法(重中之重)
(1)语法格式
class 类名{
类名(形参列表){
构造方法体;
}
}
如:
class Person{
Person(){
}
}
(2)注意事项
a.方法名称与类名完全相同,并且没有返回值类型,连void都不许有;
b.当使用new关键字创建/构造对象时,会自动调用构造方法进行成员变量的初始化工作;
(3)默认构造方法
当一个类中没有自定义任何形式的构造方法时,编译器会自动提供一个无参的空构造方法,称为默认/缺省构造方法,如:Person(){}
当类中出现自定义构造方法时,则编译器不再提供任何形式的构造方法。
练习:
自定义Point类,特征有:横坐标和纵坐标(整数),提供无参构造方法、有参构造方法、打印所有特征的方法。
要求在main()方法中分别使用无参和有参的方式构造对象并各自打印特征。
1.2 方法的重载(Overload 重点)
(1)基本概念
在Java语言中允许方法名相同参数列表不同,这样的方法之间构成重载关系。
(2)主要形式
方法重载的主要形式为:参数的个数不同、参数的类型不同、参数的顺序不同。
与形参变量名以及返回值类型无关,但建议返回值类型最好相同。
判断方法能否重载的核心:调用该方法时能否区分。
(3)实际意义
重载的实际意义在于调用者只需记住一个方法名就可以调用各种不同的版本实现不同的效果
如:
int i = 10;
System.out.println(i);
double d = 3.14;
System.out.println(d);
String s = "hello";
System.out.println(s);
2.this关键字(原理、理解)
2.1 基本概念
对于构造方法来说,this关键字就表示当前正在构造的对象。
对于成员方法来说,this关键字就表示当前正在调用的对象。
原理分析:
当成员方法中访问成员变量时,默认相当于this.(我的)的方式访问,由于调用同一个方法时调用对象的不同导致this的不同,那么this.方式访问的成员变量也就随之不同。
2.2 使用方式
(1)当形参变量名和成员变量名同名时,在方法体中会优先选择形参变量进行使用,若希望
使用成员变量则需要在变量名的前面加上this.(重中之重)。
(2)在构造方法的第一行使用this(实参)的方式可以调用本类中的其它构造方法(了解)。
3.方法的传参和递归调用
3.1 方法的传参过程(了解)
(1)main()方法是程序的入口,为变量a、b、res分配内存空间并指定初始值;
(2)调用max()方法时,为max()方法的形参变量a和b分配内存空间;
(3)将实参变量的数值拷贝一份给形参变量进行初始化;
(4)当max()方法执行完毕后,则释放形参变量的内存空间;
(5)main()方法中res得到max()方法的返回值,继续向下执行;
要求大家掌握的内容:
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=1时,return 1;
否则: return n*(n-1)!;
(2)使用方式
a.使用递归得先找到递归的规律和退出条件;
b.使用必须使得问题简单化而不是复杂化;
c.当递归影响程序的执行性能时需要使用递推替代之;
作业:
1.重点理解和掌握Person类的所有代码。
2.自定义Car类,特征有:品牌(brand)、颜色(color)、价格(price),行为有:无参构造、三个参数的构造、打印所有特征的行为、获取品牌并返回的行为、获取颜色并返回的行为、获取价格并返回的行为、设置品牌为参数指定的数值、设置颜色为参数指定的数值、设置价格为参数指定的数值、实现价格增长1000元的行为、实现价格增长参数指定数值的行为。
要求在main()方法中使用无参形式构造对象打印特征,再使用有参形式构造对象打印特征,
并使用有参形式构造的对象调用其他方法测试。
3.分别使用递归和非递归的方式计算费氏数列中第n项的数值并返回。
4.编程实现控制台版并支持两人对战的五子棋游戏(尽力去写)。
(1)绘制棋盘 - 写一个成员方法实现
(2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。
(3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。
(4)提示:
采用二维数组来模拟棋盘。