构造方法

  • 语法格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class 类名 {
类名(形参列表) {
构造方法体;
}
}
如:
class Person {
Person() {
System.out.println("构造方法就是我哦!");
}
}

//注意事项
//a.构造方法的名称与类名完全相同,并且没有返回值类型(连void都不许有)。
//b.当使用new关键字创建对象时会自动调用构造方法实现成员变量的初始化工作。
//c.构造方法是初始化成员变量,当我们new对象时,会调用此对象对应的构造方法。
  • 默认构造方法
1
2
a.当一个类中没有自定义任何构造方法时,则编译器提供一个无参的空构造方法,叫做默认构造方法,如:Person() {}
b.若类中出现了自定义构造方法,则编译器不再提供任何构造方法。

方法重载

  • 基本概念

    在Java语言中若两个方法的名称相同但参数列表不同,则构成重载关系(Overload)。

  • 表现形式

    方法重载的主要表现形式为:参数的类型不同、参数的个数不同、参数的顺序不同。

    与形参变量名以及返回值类型无关,但返回值类型最好相同。

    判断方法能否构成重载的核心:调用方法时能否加以区分。

  • 实际意义

    方法重载的实际意义在于调用者只需要记住一个方法名就可以调用各种不同的版本实现各种不同的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
编程实现方法重载表现形式的测试
*/
public class OverloadTest {
void show() {
System.out.println("show()");
}
void show(int i) { // ok 体现在参数的个数不同
System.out.println("show(int)");
}
void show(int i, double d) { // ok 个数不同
System.out.println("show(int, double)");
}
void show(double d, int i) { // ok 顺序不同
System.out.println("show(double, int)");
}
void show(int i, int j) { // ok 类型不同
System.out.println("show(int, int)");
}
/*
void show(int a, int b) { // error 与形参变量名无关
System.out.println("show(int, int)");
}
*/
/* error 与返回值类型无关
int show() {
System.out.println("show()");
}
*/
public static void main(String[] args) {
OverloadTest ot = new OverloadTest();
ot.show();
ot.show(66);
ot.show(66, 3.14);
ot.show(3.14, 66);
ot.show(66, 118);
}
}

this关键字

  • 基本概念

    在构造方法中若出现了this关键字,则表示当前正在构造的对象。

    在成员方法中若出现了this关键字,则表示当前正在调用方法的对象。

  • 原理分析

    当构造方法和成员方法中访问成员变量时默认会加上this.的形式,this.相当于汉语中"我的",
    当不同的对象调用同一个方法时导致this不同,那么this.访问的结果也就随之不同。

  • 使用方式

(1)当形参变量和成员变量同名时,在方法体内会遵循就近原则优先使用形参变量,为了明确使用成员变量,则需要在成员变量名的前面加上this.加以说明(重中之重)。

(2)在构造方法的第一行使用this()的方式可以调用本类中的其他构造方法(了解)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
编程实现this关键字概念的测试
*/
public class ThisTest {
ThisTest() {
System.out.println("构造方法: this = " + this);
}
void show() {
System.out.println("成员方法: this = " + this);
}

public static void main(String[] args) {
ThisTest tt1 = new ThisTest();
tt1.show();
System.out.println("main方法中:tt1 = " + tt1);
}
}

方法的传参

  • 方法的传参过程
1
2
3
4
5
6
(1)main方法是程序的入口,先为main方法中的局部变量申请内存空间并初始化;
(2)调用max方法,为max方法的形参变量申请内存空间;
(3)将实参变量的数值赋值给形参变量;
(4)执行max方法的方法体,当max方法执行完毕后释放形参变量的内存空间;
(5)main方法中的res得到max方法的返回值继续向下执行;
(6)直到main方法执行完毕后,main方法中局部变量的内存空间释放;
  • 要求大家掌握的内容
1
2
3
a.当基本数据类型的变量作为方法的参数传递时,形参变量数值的改变不会影响实参
b.当引用数据类型的变量作为方法的参数传递时,形参变量指向的数据内容若发生改变,则会影响到实参变量指向的数据内容。
c.当引用数据类型的变量作为方法的参数传递时,若形参变量改变指向后再改变指向的数据内容时,则不会影响到实参变量指向的数据内容,因为内存空间独立存在。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
编程实现参数传递过程的分析以及常见的考点
*/
public class ArgumentTest {
void show(int i) {
i = 200;
System.out.println("i = " + i); // i = 200
}
void show(int[] arr) {
arr = new int[2]; //加上改行代码之后下面的结果如何呢??
arr[0] = 200;
System.out.println("arr[0] = " + arr[0]); // 200
}

public static void main(String[] args) {
ArgumentTest at = new ArgumentTest();
int num = 10;
at.show(num);
System.out.println("main方法中:num = " + num); // 10
System.out.println("-----------------------------------------");

int[] brr = new int[]{10, 20};
at.show(brr);
System.out.println("main方法中:brr[0] = " + brr[0]); // 200 10
}
}