第四节——面向对象编程

1.基本概念

1、学习面向对象内容的三条主线(贯穿456章):

  1. Java类及类的成员:属性、方法、构造器;代码块,内部类
  2. 面向对象的三大特征:封装性、继承性、多态性
  3. 其他关键字:this super static final abstract interface package import等

2、何谓“面向对象”的编程思想?
做人有做人的原则,编程有编程的原则,这些编程的原则,就是编程思想。

3、面向过程(POP)与面向对象(OOP)
二者都是一种思想,面向对象是相对于面向过程而言的,面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

面向对象 面向过程
最小单位 函数 类/对象

人把大象放进冰箱?

  • 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
  1. 把冰箱门打开
  2. 抬起大象,塞进冰箱
  3. 把冰箱门关闭
  • 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
    对象:人、大象、冰箱,一般用类来刻画。
{
    
    
	打开(冰箱){
    
    
	冰箱,开开();
	}
	抬起(大象){
    
    
		大象.进入(冰箱);
	}
	关闭(冰箱){
    
    
		冰箱.闭合();
	}
}

冰箱{
    
    
	开开(){
    
    }
	闭合(){
    
    }
}

大象{
    
    
	进入(冰箱);{
    
    
	进入细节;
	}
}

在这里插入图片描述

2.面向对象两个要素——类和对象

类(Class)和对象(Object)是面向对象的核心概念。

  • 类是对一类事物的描述,是抽象的、概念上的定义
  • 对象是实际存在的该类事物的每个个体,因而也称为实例

理解:

  • 类 = 抽象概念的人;对象 = 实实在在的某个人
  • 面向对象程序设计的重点是类的设计
  • 类的设计,其实就是类的成员的设计

2.1 类的结构:属性和方法

设计类,其实就是类的成员的设计
现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同理,Java代码世界是由许多功能不同的类构成的。
现实生物世界中的细胞又是由什么构成的?细胞核、细胞质、…那么,Java中用类class来描述事物也是如此,常见的类成员(内部结构)有:

  • 属性:对应类中的成员变量。属性也称为:成员变量、域、字段、field
  • 行为:对应类中的成员方法。方法也称为:成员方法、函数、method

生活中描述事物无非就是描述事物的属性和行为。如:人有身高、体重等属性,有说话、打球等行为

class Person{
    
    
	//属性
	String name;
	int age;
	boolean isMarried;
	//方法(或函数)
	public void talk(){
    
    
		System.out.println("人讲话");
	}
}

实际上,类比较完整的成员有:属性、构造器、方法、代码块、内部类

2.2类和对象的创建

类和对象的创建是面向对象思想落地的实现

  1. 创建类、设计类的成员
  2. 创建类的对象(即类的实例化,通过new的方式)
  3. 通过“对象.属性”或“对象.方法”调用对象的结构

如果创建了一个类的多个对象,则每个对象都独立地拥有一套类的属性(非static的),意味着,如果修改一个对象的属性a,则不影响另外一个对象该属性a的值。
在这里插入图片描述

//测试类
public class PersonTest{
    
    
	public static void main(String[] args){
    
    
	//创建Person类的对象,即类的实例化
	Person p1 = new Person();
	//调用对象的结构:属性、方法
	//调用属性:“对象.属性”
	p1.name = "Tom";
	p1.age = 10;
	p1.isMarried = true;
	System.out.println(p1.name);
	//调用方法:“对象.方法”
	p1.talk();
	//***如果创建了一个类的多个对象,则每个对象都独立地拥有一套类的属性***
	Person p2 = new Person();	
	System.out.println(p2.name);//结果输出null,而不是Tom
	//将p1变量保存的对象地址值赋给p3,此时p1和p3指向了堆空间中的同一个对象实体。
	Person p3 = p1;
	System.out.println(p3.name);//Tom
	p3.age = 20;
	System.out.println(p1.age);//20
	
	}

}
class Person{
    
    
	//属性
	String name;
	int age;
	boolean isMarried;
	//方法(或函数)
	public void talk(){
    
    
		System.out.println("人可以讲话");
	}
}

2.3 对象的内存解析

在这里插入图片描述
在这里插入图片描述

3.类中属性的使用

1、属性(成员变量) VS 局部变量
相同点:

  • 定义变量的格式:数据类型 变量名 = 变量值
  • 先声明,后使用
  • 变量都有其对应的作用域

不同点:

  • 在类中声明的位置不同
    属性:直接定义在类的一对{}内
    局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
  • 关于权限修饰符的不同
    属性:可以在声明属性时,指明其权限,使用权限修饰符。
    常用的权限修饰符:private、public、缺省、protected。
    目前,声明属性时,使用缺省就可以了。
    局部变量:不可以使用权限修饰符。
  • 默认初始化值的不同
    数据类型 变量名 = 变量值
    变量值会牵扯到默认初始化值的情况
    属性:根据其类型,都有默认初始化值,和一维数组的初始化值情况相同
    整型(byte short int long):0
    浮点型(float double):0.0
    字符型(char):0(或’\u0000’)
    布尔型(boolean):false
    引用数据类型(类、数组、接口):null
    局部变量:没有默认初始化值。
    意味着,我们在调用局部变量之前,一定要显式赋值。
    特别地,形参在调用时赋值即可。
  • 二者在内存中加载的位置不同
    属性(非static的):加载到堆空间中
    局部变量:加载到栈空间中
class User{
    
    
	//属性(或成员变量)
	String name;
	int age;
	boolean isMale;
	public void talk(String language){
    
    //language:形参,也是局部变量
		System.out.println("我们使用" + language + "进行交流");
	public void eat(){
    
    
		String food = "烙饼";//局部变量
		System.out.println("北方人爱吃" + food);
	}
	} 
	
}

4.类中方法的声明和使用

方法:描述类该具有的功能。
比如:Math类:sqrt()、random()…
Scanner类:nextXxx()…
Array类:sort()、binarySearch()、toString()、equals()…
在这里插入图片描述
1、举例:
public void eat(){}
public void sleep(int hour){}
public String getName(){}
public String getNation(String nation){}
2、方法的声明

方法的声明:权限修饰符 返回值类型 方法名(形参列表){
    
    
				方法体;
}
class Customer{
    
    
	//属性
	String name;
	int age;
	boolean isMale;
	//方法
	public void eat(){
    
    
		System.out.println("客户吃饭");
	}
	public void sleep(int hour){
    
    
		System.out.println("休息了" + hour + "个小时");
	}
	public String getName(){
    
    
		return name;
	}
	public String getNation(String nation){
    
    
		String info = "我的国籍是:" + nation;
		return info;
	}

4.1方法声明的说明

方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
1、 关于权限修饰符:
Java规定的4种权限修饰符:private、public、缺省、protected
2、返回值类型:有返回值 VS 没有返回值

  • 如果方法有返回值,则必须在方法声明时,指定返回值类型,同时,方法中,需要使用return关键字来返回指定类型的变量或常量,“return 数据”。
  • 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不使用return。但是,如果使用的话,只能“return;”表示结束此方法的意思。注意,此时return的作用是结束此方法,return后面的语句将无法执行。

3、方法名:属于标识符,起名时注意标识符的规则和规范。“见名知意”
4、形参列表:方法可以声明0个,1个,或多个形参。
格式: 数据类型1 形参1,数据类型2 形参2,…
5、方法体:方法功能的实现

注意1:return关键字的使用:

  1. 使用范围:使用在方法体中
  2. 作用:a.结束方法;b.针对有返回值类型的方法,使用"return 数据"方法返回所要的数据。
  3. 注意点:return关键字后面不可以声明执行语句。

注意2:

  • 方法的使用中,可以调用当前类的属性或方法;
    特殊的:方法A 中又调用了方法A:递归方法。
  • 方法中:不可以定义方法。

5. 理解“万事万物皆对象”

  1. 在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
  2. 涉及到Java语言与前端HTML、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

6. 匿名对象

  1. 理解:我们创建的对象没有显式的赋给一个变量名,即为匿名对象
  2. 特征:匿名对象只能调用一次

猜你喜欢

转载自blog.csdn.net/weixin_46138661/article/details/111993394