JAVA基础讲义06-面向对象

一、编程思想

什么是编程思想

做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。

面向过程和面向对象

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

图分析:人把大象装进冰箱
在这里插入图片描述

面向过程编程思想

面向过程思想

过程为中心的编程思想 以什么正在发生为主要目标进行编程

面向过程实现

分析出解决问题所需要的每一个步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用

应用场景

适合于功能简单、业务逻辑单一的场景,优势比较明显,效率较高

面向过程特点

参与每一个步骤 参与每一个实现 参与每一个细节

面向过程代表语言

fortan语言、C语言

面向对象介绍

面向对象编程思想

对象为核心编程思想,对象是指现实世界中所有事物。强调对象所具备的功能,需求通过对象来实现。 面向对象思想分类: 面向对象分析(Object Oriented Analysis)简称:OOA 面向对象设计(Object Oriented Design)简称:OOD 面向对象开发(Object Oriented Programming)简称:OOP

面向对象的三大特征

封装(Encapsulation) 继承(Inheritance)多态(Polymorphism)

  1. 案例分析

案例一:吃饭

案例二:洗衣服

面向对象思想总结

简单化:让复杂的事情简单化 角色转变:执行者 —> 指挥者 人性化:更加符合人类习惯思想

什么是编程

编程的目的是将现实世界的事物实现信息化,如:超市收银软件

编程是人类发明的,编程思想源于现实世界,现实世界中所看到的的事物比较具体,编程将现实世界中的事物抽取 到虚拟世界通过一种更加抽象方式展现;

面向对象分析方法分析问题的思路和步骤

① 根据问题需要,选择问题所针对的现实世界中的实体

② 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类

③ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构

④ 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具

二、类和对象

类的概述

编程都是为了将现实世界事物实现信息化,在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、long0
基本类型(浮点数)float、double0.0
基本类型(字符型)char‘\u0000’
基本类型(布尔型)booleanfalse
引用类型数组、类、接口null

类的访问机制

在一个类中的访问机制:类中的方法可以直接访问类中的成员变量(static方法访问非static成员变量,编译不通 过)

不在一个类中的访问机制:先创建要访问类的对象,再用对象访问类中的成员

练习

1、分析汽车的属性和行为,创建汽车对象和操作汽车对象 2、分析手机的属性和行为,创建手机对象和操作手机对象 3、分析狗的属性和行为,创建狗对象和操作狗对象

对象运行时内存图

Person类

class Person { // 人类
	String name;// 姓名
	int age = 10;// 年龄
	boolean isMale;// 是否男性
}
一个对象内存图

在这里插入图片描述

两个对象内存图

在这里插入图片描述

三个对象内存图(不同的引用指向同一个对象)

在这里插入图片描述

  1. 匿名对象

匿名对象即没有名字的对象

举例:

	//以下是两个对象分别调用了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关键字应用

  1. 解决局部变量隐藏成员变量时的问题 当成员变量和局部变量同名时,就近原则优先使用局部变量。如果要明确调用的是成员变量,就在变量前面加上this即可。this.变量名。
class Student{
	int age = 10;
	public void show(){
	int age = 20;
	System.out.println("局部变量age的值:"+age);
	System.out.println("成员变量age的值:"+this.age);
}
  1. 调用本类中的其他构造方法

五、封装

什么是封装

封装的原则:类中不想对外展示的属性和行为,将其隐藏起来,额外提供公共的访问方式。

为什么要封装

保证安全性

使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。封装防止了外部 随意访问,增加了安全屏障。

隐藏复杂性

隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的来 说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装的设计思想。

信息的封装和隐藏

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.方法参数传递中,基本类型传递和引用类型传递有什么区别?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立花泷的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值