面向对象编程的概念

  • 什么是对象?

答:万物皆对象!

  • 什么是面向对象?

答:面向对象就是指以特征(属性)和行为的观点去分析现实世界中事物的方式。

  • 什么是面向对象编程?

答:面向对象编程就是指先使用面向对象的方式去分析,再使用任意一门面向对象的编程语言进行翻译的过程。

  • 如何学好面向对象编程?

答:深刻理解面向对象编程的三大特征:封装、继承、多态。

类、对象以及引用

  • 对象和类的概念

对象是客观存在的实体,在Java语言体现为内存空间的一块区域。

类就是分类的概念,是对具有相同特征和行为的多个对象共性的抽象描述,在Java语言中包含描述特征的成员变量和描述行为的成员方法。

  • 类的定义

类定义的语法格式

1
2
3
4
5
6
7
8
class 类名{
类体;
}
//如:
class Person{

}
//注意:当类名由多个单词组成时,要求每个单词的首字母都要大写

成员变量定义的语法格式

1
2
3
4
5
6
7
8
9
10
11
12
13
//成员变量定义的语法格式
class 类名 {
数据类型 成员变量名 = 初始值; - 其中 =初始值可以省略,但分号不可以省略
}
//如:
class Person {
String name;
int age;
}

/*注意:当成员变量名由多个单词组成时,要求从第二个单词起每个单词首字母大写。
注意:局部变量 - 主要指编写在方法体内部的变量,作用范围从声明开始一直到方法体结束
成员变量 - 主要指编写在方法体外类体内部的变量,从声明开始一直到类体结束*/
  • 对象的创建

创建对象的语法格式

1
2
3
4
5
6
new 类名();
//如:
new Person(); - 表示创建Person类型的对象,匿名对象

//注意事项:a.使用new关键字创建/构造对象的过程叫做 类的实例化;
// b.对象创建的本质就是在内存区域的堆区申请一块存储空间,用于记录该对象独有的特征信息。
  • 引用

基本概念

使用引用数据类型声明的变量 叫做引用型变量,简称为"引用"。
引用变量的定义本质上就是在内存区域的栈区申请一块存储空间,用于记录对象在堆区中的内存地址信息。

语法格式

1
2
3
4
5
6
7
8
类名 引用变量名;
//如:
Person p; --表示声明Person类型的引用变量p,本质上在栈区申请存储空间
Person p = new Person(); --表示声明引用变量p来记录Person类型对象的地址信息

引用变量名.成员变量名;
//如:
p.name = "张飞"; --表示使用引用变量p访问所指向堆区对象的姓名特征
  • 成员方法

语法格式

1
2
3
4
5
6
7
8
9
10
11
12
class 类名{
返回值类型 成员方法名(形参列表){
成员方法体;
}
}
//如:
class Person{
void show(){
System.out.println("Hello,World");
}
}
//注意:当成员变量名由多个单词组成时,通常要求从第二个单词起每个单词首字母大写

方法的详解

(1)返回值类型

1
2
3
4
5
6
7
8
9
10
11
12
返回值主要指从方法体内向方法体外传出的数据内容。
返回值类型主要指返回值的数据类型,可以是基本数据类型也可以是引用数据类型。
如:
当返回的数据内容是66时,则返回值类型写为int即可;
当返回的数据内容是3.14时,则返回值类型写为double即可;
当返回的数据内容是"hello"时,则返回值类型写为String即可;

使用return关键字可以返回具体的数据内容并且结束当前方法。
如:
当返回的数据内容是66时,则方法体内写 return 66即可;
当返回的数据内容是3.14时,则方法体内写 return 3.14即可;
当方法体内不需要返回任何数据内容时,则返回值类型写void即可。

(2)形参列表

1
2
3
4
5
6
7
8
9
形式参数主要用于将方法体外的数据内容带入到方法体的内部。
形参列表主要指多个形式参数,
语法格式:数据类型 形参变量名1, 数据类型 形参变量名2, ...
如:
当传入的数据内容是66时,形参列表写为: int i即可;
当传入的数据内容是3.14时,形参列表写为:double d即可;
当传入的数据内容是"hello"时,形参列表写为:String s即可;
当传入的数据内容是66和3.14时,形参列表写为:int i, double d 即可;
当该方法不需要传入任何数据内容时,则形参列表位置啥也不写即可。

(3)方法体

1
2
3
4
方法体中主要用于编写描述该方法的功能语句。
如:
当该方法的功能是打印时,则方法体中写:System.out.println("...");
当该方法的功能是计算1+1的和并返回时,则方法体中写:return 1+1 即可;
  • 方法的调用

语法格式

1
2
3
4
5
6
7
引用变量名.成员方法名(实参列表);
//如:
p.show(); --表示使用引用变量p调用show方法

/*注意事项
实际参数列表主要用于对形式参数列表进行初始化操作,因此参数的个数、类型、顺序等都必须与形参列表保持一致;
实参可以传递直接量、变量、表达式以及方法的调用等;*/

定义Point类

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
编程实现Point类的定义和使用
*/
public class Point {
int x; // 用于描述横坐标的成员变量
int y; // 用于描述纵坐标的成员变量

// 自定义成员方法实现横纵坐标的打印
void show() {
System.out.println("横坐标:" + x + ",纵坐标:" + y);
}
// 自定义成员方法实现将横坐标设置为参数指定的数值
void setX(int i) {
x = i;
}
// 自定义成员方法实现将纵坐标设置为参数指定的数值
void setY(int j) {
y = j;
}
// 自定义成员方法实现横坐标数值的获取并返回
int getX() {
return x;
}
// 自定义成员方法实现纵坐标数值的获取并返回
int getY() {
return y;
}

public static void main(String[] args) {
// 声明引用指向对象并打印特征
Point p = new Point();
//System.out.println("横坐标:" + p.x + ",纵坐标:" + p.y); // 0 0
p.show();
System.out.println("-----------------------------------");

// 修改横纵坐标的数值后再次打印
p.x = 3;
p.y = 5;
//System.out.println("横坐标:" + p.x + ",纵坐标:" + p.y); // 3 5
p.show();
System.out.println("-----------------------------------");

// 调用成员方法实现横纵坐标的修改
p.setX(10);
p.setY(20);
p.show(); // 10 20
System.out.println("-----------------------------------");

// 调用成员方法实现横纵坐标的获取并打印
int ia = p.getX();
System.out.println("获取到的横坐标是:" + ia); // 10
int ib = p.getY();
System.out.println("获取到的纵坐标是:" + ib); // 20
}
}