面向对象
- 一、编程思想
- 什么是编程思想
- 面向过程和面向对象
- 面向过程编程思想
- 面向过程思想
- 面向过程实现
- 应用场景
- 面向过程特点
- 面向过程代表语言
- 面向对象介绍
- 面向对象编程思想
- 面向对象的三大特征
- 面向对象思想总结
- 什么是编程
- 面向对象分析方法分析问题的思路和步骤
- 二、类和对象
- 类
- 类的概述
- 类如何描述现实世界的事物
- 类的定义
- 对象
- 对象的概述
- 对象和类之间的关系
- 理解:
- 对象的创建和使用
- 对象创建
- 使用对象
- 成员变量的初始化
- 练习
- 对象运行时内存图
- 一个对象内存图
- 三、属性
- 成员变量(属性)
- 局部变量
- 成员变量和局部变量的区别
- 四、this关键字
- 什么是this
- this关键字应用
- 五、封装
- 什么是封装
- 为什么要封装
- 保证安全性
- 隐藏复杂性
- 信息的封装和隐藏
- private关键字
- 什么是权限修饰符
- private关键字介绍
- 封装实现
- 六、 方法的参数传递
- 参数列表-基本类型
- 参数列表-引用类型
- 练习题
一、编程思想
什么是编程思想
做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。
面向过程和面向对象
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑 怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
图分析:人把大象装进冰箱
面向过程编程思想
面向过程思想
以过程为中心的编程思想 以什么正在发生为主要目标进行编程
面向过程实现
分析出解决问题所需要的每一个步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用
应用场景
适合于功能简单、业务逻辑单一的场景,优势比较明显,效率较高
面向过程特点
参与每一个步骤 参与每一个实现 参与每一个细节
面向过程代表语言
fortan语言、C语言
面向对象介绍
面向对象编程思想
以对象为核心编程思想,对象是指现实世界中所有事物。强调对象所具备的功能,需求通过对象来实现。 面向对象思想分类: 面向对象分析(Object Oriented Analysis)简称:OOA 面向对象设计(Object Oriented Design)简称:OOD 面向对象开发(Object Oriented Programming)简称:OOP
面向对象的三大特征
封装(Encapsulation) 继承(Inheritance)多态(Polymorphism)
- 案例分析
案例一:吃饭
案例二:洗衣服
面向对象思想总结
简单化:让复杂的事情简单化 角色转变:执行者 —> 指挥者 人性化:更加符合人类习惯思想
什么是编程
编程的目的是将现实世界的事物实现信息化,如:超市收银软件
编程是人类发明的,编程思想源于现实世界,现实世界中所看到的的事物比较具体,编程将现实世界中的事物抽取 到虚拟世界通过一种更加抽象方式展现;
面向对象分析方法分析问题的思路和步骤
① 根据问题需要,选择问题所针对的现实世界中的实体
② 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
③ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构
④ 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
二、类和对象
类
类的概述
编程都是为了将现实世界事物实现信息化,在Java语言中是以类(class)为单位描述现实世界的事物,将现实世界事物的属性和行为抽取到Java类中,可以理解为类是现实世界事物的抽象化
类如何描述现实世界的事物
java类 | 现实事物 |
---|---|
成员变量 | 属性 |
成员方法 | 行为 |
**成员变量:**定义在类中方法外,描述现实世界某一类事物的属性。 **成员方法:**用于描述现实世界事物中的行为进行封装。
类的定义
格式:
修饰符 class 类名 {
// 成员变量
// 成员方法
}
举例:用类描述学生类
public class Student {
String name; // 学生姓名
int age; // 学生年龄
String gender; // 学生性别
// 吃饭行为
public void eat() {
System.out.println("我会吃饭");
}
// 学习行为
public void study() {
System.out.println("我会学习");
}
// 睡觉行为
public void sleep() {
System.out.println("我会睡觉");
}
}
对象
对象的概述
对象是实际存在的该类事物的每个个体,因而也被称为实例。万事万物皆对象。
对象和类之间的关系
理解:
类 = 抽象概念的人 对象 = 实实在在某个人
类是描述现实世界事物的一组相关属性和行为的集合,对象是该类事物中的某一个具体对象 类只能存在想象阶段,对象比较具体,可以操作阶段
对象的创建和使用
对象创建
格式:类名 对象名 = new 类名();
举例:
Person person = new Person();
使用对象
操作成员变量 赋值:
对象名.变量名 = 赋值;
person.age = 10;取值:
数据类型 变量名 = 对象名.变量名;
int age = person.age;
直接输出:
输出语句(对象名.变量名);
System.out.println(person.age);
操作成员方法调用方法:
对象名.方法名();
person.sleep();
成员变量的初始化
类型 | 数据类型 | 默认初始化值 |
---|---|---|
基本类型(整数) | byte、short、int、long | 0 |
基本类型(浮点数) | float、double | 0.0 |
基本类型(字符型) | char | ‘\u0000’ |
基本类型(布尔型) | boolean | false |
引用类型 | 数组、类、接口 | null |
类的访问机制
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量(static方法访问非static成员变量,编译不通 过)
不在一个类中的访问机制:先创建要访问类的对象,再用对象访问类中的成员
练习
1、分析汽车的属性和行为,创建汽车对象和操作汽车对象 2、分析手机的属性和行为,创建手机对象和操作手机对象 3、分析狗的属性和行为,创建狗对象和操作狗对象
对象运行时内存图
Person类
class Person { // 人类
String name;// 姓名
int age = 10;// 年龄
boolean isMale;// 是否男性
}
一个对象内存图
两个对象内存图
三个对象内存图(不同的引用指向同一个对象)
- 匿名对象
匿名对象即没有名字的对象
举例:
//以下是两个对象分别调用了sleep和study方法
new Person().sleep();
new Person().study();
//以下是同一个对象调用了sleep又调用了study方法
Person p = new Person();
p.study();
p.sleep();
使用场景:
① 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
new 类名().sleep();
② 将匿名对象作为实参传递给一个方法调用
方法名(new 类名());
三、属性
成员变量(属性)
在方法体外,类体内声明的变量称为成员变量
局部变量
在方法上或方法体内部声明的变量称为局部变量
成员变量和局部变量的区别
/ | 成员变量 | 局部变量 |
---|---|---|
声明位置 | 直接声明在类中方法外 | 方法形参或内部、代码块内、构造器内等 |
修饰符 | private、public、static、final等 | 不能用权限修饰符修饰,可以用final修饰 |
初始化值 | 有默认初始化值 | 没有默认初始化值,必须先赋值,方可使用 |
内存加载位置 | 堆内存空间 或 方法区内存空间静态域内 | 栈内存空间 |
生命周期 | 随着类的加载或对象的存在而存在,随类的销毁或对象的销毁而销毁 | 局部变量是随着方法的调用而存在,方法的调用完毕而消失 |
使用范围 | 在整个类中都可以使用 | 只能在当前代码块的范围使用 |
注:static关键字修饰的内容随着类的加载而加载,如果定义了一个static修饰的变量会在类加载的时候就已经存在。
四、this关键字
什么是this
this表示当前对象引用,类中的成员被哪个对象调用,this就代表调用的这个对象。
this关键字应用
- 解决局部变量隐藏成员变量时的问题 当成员变量和局部变量同名时,就近原则优先使用局部变量。如果要明确调用的是成员变量,就在变量前面加上this即可。this.变量名。
class Student{
int age = 10;
public void show(){
int age = 20;
System.out.println("局部变量age的值:"+age);
System.out.println("成员变量age的值:"+this.age);
}
- 调用本类中的其他构造方法
五、封装
什么是封装
封装的原则:类中不想对外展示的属性和行为,将其隐藏起来,额外提供公共的访问方式。
为什么要封装
保证安全性
使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。封装防止了外部 随意访问,增加了安全屏障。
隐藏复杂性
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的来 说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装的设计思想。
信息的封装和隐藏
Java中通过将数据声明为私有的(private),再提供公共的(public)方法,getXxx()和setXxx()实现对该属性的操作
private关键字
什么是权限修饰符
权限修饰符可以修饰类、类中成员的权限做特定的限制,当被访问时必须满足特定的要求。
private关键字介绍
private是java中最小的权限修饰符,与public、默认、protected同类。 可以修饰类中的成员(成员变量、成员方法、构造方法、内部类)等。 被private关键字修饰的成员限定只能在本类中访问。
private关键字应用 修饰成员变量
格式:private 数据类型 变量名;
例:private int age;
修饰成员方法
格式:private 返回值类型 方法名(){}
例:private void show(){}
封装实现
封装:private关键字修饰隐藏修饰要隐藏的属性和方法。 访问: 成员变量:公共setXxx(参数列表)方法为成员变量赋值,公共getXxx()方法返回成员变量的值。 成员方法:公共方法中访问
封装成员变量:
class Student {
public String name; // name定义为private,只能被Student类内部访问
private int age;// age定义为private,只能被Student类内部访问
// 提供getAge方法获取age的值
public int getAge() {
return age;
}
// 提供setAge方法给age赋值
public void setAge(int age) {
//可以在这里做一些判断,判断权限、判断数据合法性等
if(age <= 0 || age > 120){
System.out.println("您输入的数据不合法!");
return;
}
this.age = age;
}
}
封装成员方法
class Student {
public String name; // name定义为private,只能被Student类内部访问
private int age;// age定义为private,只能被Student类内部访问
// 提供getAge方法获取age的值
public int getAge() {
return age;
}
// 提供setAge方法给age赋值
public void setAge(int age) {
//可以在这里做一些判断,判断权限、判断数据合法性等
if(age <= 0 || age > 120){
System.out.println("您输入的数据不合法!");
return;
}
this.age = age;
}
//以下是对成员方法进行封装
private void method(){
System.out.println("我是私有方法");
}
public void method1(){
method();//调用私有方法
}
}
测试
public class PersonTest {
public static void main(String[] args) {
Student student = new Student();
//错误姿势
student.age = 18;//报错,编译不通过
student.method();//报错,编译不通过
//正确姿势
student.setAge(18);//正确姿势设置变量值
int age = student.getAge();//获取变量值
System.out.println(age);
student.method1();//访问method1方法,由方法内部调用method
}
}
六、 方法的参数传递
参数列表-基本类型
将实参基本数据类型变量的"数据值"传递给形参
举例:
public static void main(String[] args) {
int a = 10;
System.out.println("修改之前的值为:" + a); // 10
change(a);
System.out.println("修改之后的值为:" + a); // 10
}
public static void change(int a) {
System.out.println("a修改前的值为:" + a); // 10
a = 3;
System.out.println("a修改后的值为:" + a); // 3
}
参数列表-引用类型
将实参基本数据类型变量的"地址值"传递给形参
举例:
public static void main(String[] args) {
Person p = new Person();
p.name = "Tom";
System.out.println("修改之前的name值为:" + p.name); // Tom
change(p);
System.out.println("修改之后的name值为:" + p.name); // Jim
}
public static void change(Person p) {
System.out.println("修改之前的name值为:" + p.name); // Tom
p.name = 'Jim';
System.out.println("修改之后的name值为:" + p.name); // Jim
}
练习题
1.说说对编程思想的理解?
2.面向对象的特征?
3.什么是类?
4.什么是对象?
5.如何操作对象中的成员变量和成员方法?
6.什么是成员变量?有什么作用?
7.什么是成员方法?有什么作用?
8.类如何描述现实世界事物的属性和行为?
9.什么是匿名对象?匿名对象有什么特点?什么场景下应用?
10.请画出对象在内存中的运行内存图,并说出每一个步骤?
11.成员变量和局部变量有什么区别?
12.this关键字理解,this关键字有什么作用?
13.什么是封装?封装哪些好处?
14.private关键字的作用?
15.方法参数传递中,基本类型传递和引用类型传递有什么区别?
微信公众号也会持续更新…
大家可以一起学习😊
.