JAVA基础讲义06-面向对象

news2024/11/25 16:42:18

面向对象

  • 一、编程思想
    • 什么是编程思想
    • 面向过程和面向对象
    • 面向过程编程思想
      • 面向过程思想
      • 面向过程实现
      • 应用场景
      • 面向过程特点
      • 面向过程代表语言
    • 面向对象介绍
      • 面向对象编程思想
      • 面向对象的三大特征
      • 面向对象思想总结
    • 什么是编程
    • 面向对象分析方法分析问题的思路和步骤
  • 二、类和对象
      • 类的概述
      • 类如何描述现实世界的事物
      • 类的定义
    • 对象
      • 对象的概述
      • 对象和类之间的关系
          • 理解:
      • 对象的创建和使用
        • 对象创建
        • 使用对象
    • 成员变量的初始化
    • 练习
    • 对象运行时内存图
          • 一个对象内存图
  • 三、属性
    • 成员变量(属性)
    • 局部变量
    • 成员变量和局部变量的区别
  • 四、this关键字
    • 什么是this
    • this关键字应用
  • 五、封装
    • 什么是封装
    • 为什么要封装
      • 保证安全性
      • 隐藏复杂性
    • 信息的封装和隐藏
      • private关键字
          • 什么是权限修饰符
          • private关键字介绍
    • 封装实现
  • 六、 方法的参数传递
    • 参数列表-基本类型
    • 参数列表-引用类型
  • 练习题

一、编程思想

什么是编程思想

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

面向过程和面向对象

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

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

面向过程编程思想

面向过程思想

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

面向过程实现

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

应用场景

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

面向过程特点

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

面向过程代表语言

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

微信公众号也会持续更新…
大家可以一起学习😊
.
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

它破解了AI作画的中文语料难题,AIGC模型讲解(以世界杯足球为例)

目录1 扩散模型与AI绘画2 中文语料的挑战3 昆仑天工&#xff1a;AIGC新思路3.1 主要特色3.2 模型蒸馏3.3 编解码与GPT3.4 stable-diffusion3.5 性能指标4 体验中文AI绘画模型5 展望1 扩散模型与AI绘画 AI绘画发展历史始于20世纪60年代&#xff0c;当时人工智能研究者们尝试使用…

springboot启动流程源码分析

一、引入思考的问题 1、springboot未出现之前&#xff0c;我们在在spring项目中如果要使用数据源&#xff08;比如我们使用druid&#xff09;&#xff0c;需要做哪些事情呢&#xff1f; &#xff08;1&#xff09;引入druid的jar包 &#xff08;2&#xff09;配置数据源的参…

微服务调用工具

微服务调用工具目录概述需求&#xff1a;设计思路实现思路分析1.A2.B3.C参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive…

Postman API测试工具 - 初认知 基本使用(一)

Postman - API测试工具 初认知&#xff08;一&#xff09; 文章目录Postman - API测试工具 初认知&#xff08;一&#xff09;一、什么是Postman&#xff1f;二、如何下载Postman&#xff1f;三、Postman的使用四、处理GET请求&#xff1a;五、处理POST请求总结一、什么是Postm…

Python 缩进语法的起源:上世纪 60-70 年代的大胆创意

上个月&#xff0c;Python 之父 Guido van Rossum 在推特上转发了一篇文章《The Origins of Python》&#xff0c;引起了我的强烈兴趣。 众所周知&#xff0c;Guido 在 1989 年圣诞节期间开始创造 Python&#xff0c;当时他就职于荷兰数学和计算机科学研究学会&#xff08;简称…

MySQL之聚合查询和联合查询

一、聚合查询&#xff08;行与行之间的计算&#xff09; 1.常见的聚合函数有&#xff1a; 函数 说明 count 查询到的数据的数量 sum 查询到的数据的总和&#xff08;针对数值&#xff0c;否则无意义&#xff09; avg 查询到的数据的平均值&#xff08;针对数值&#xf…

北京智和信通 | 无人值守的IDC机房动环综合监控运维

随着信息技术的发展和全面应用&#xff0c;数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分&#xff0c;网络设备、系统、业务应用数量与日俱增&#xff0c;规模逐渐扩大&#xff0c;一旦机房内的设备出现故障&#xff0c;将对数据处理、传输、存储以及整个业…

极光笔记 | 以静制动:行为触发营销助力用户转化

01、营销人&#xff0c;你是否饱受困扰&#xff1f; 作为营销人的你&#xff0c;从996到007&#xff0c;每天从早忙到晚&#xff0c;但还是没办法把访客转化成客户&#xff1f; 作为营销人的你&#xff0c;想通过APP通知、短信、邮件、公众号消息等方式&#xff0c;把所有能想…

牛客题霸sql入门篇之条件查询(二)

牛客题霸sql入门篇之条件查询(二) 2 基础操作符 2.1 查找学生是北大的学生信息 2.1.1 题目内容 2.1.2 示例代码 SELECT device_id,university FROM user_profile WHERE university北京大学2.1.3 运行结果 2.1.4 考察知识点 WHERE子句中可以写查询的条件,用于筛选出符合的…

java SPI机制的使用及原理

本片文章是针对dubbo SPI机制深入分析的平滑过渡的作用。当然咱们主要是学习优秀的思想&#xff0c;SPI就是一种解耦非常优秀的思想&#xff0c;我们可以思考在我们项目开发中是否可以使用、是否可以帮助我们解决某些问题、或者能够更加提升项目的框架等 一、SPI是什么 SPI&a…

新冠病毒:KN95(GB2626类型口罩)是否有效阻挡?

点击上方“青年码农”关注回复“源码”可获取各种资料​今天刷新闻&#xff0c;看到很多官方账号发布&#xff0c;只有五种编码口罩能防疫&#xff0c;分别是医用防护口罩&#xff08;GB19083-2010&#xff09;医用外科口罩&#xff08;YY0469-2011&#xff09;一次性使用医用口…

华纳音乐集团 Game Jam 来啦!

为了给 2022 年画上一个完美的句点&#xff0c;The Sandbox 与华纳音乐集团合作&#xff0c;为你们带来本年度的最后一次 Game Jam&#xff01; 我们邀请 The Sandbox 用户以音乐为题创建游戏体验。你们可以自由地创造社交体验&#xff0c;但也可以创造具有故事情节的游戏。请给…

云原生|kubernetes|CKA模拟测试-2022(1---10题)(一)

第一题&#xff1a; Task weight: 1% You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts. Next write a command to display the current context into /opt/course/1/c…

【反外挂】内存加密与监视

前言 手游防破解防外挂技术方案&#xff08;一&#xff09;客户端篇 各种作弊方案中&#xff0c;其中一种是直接修改内存数据&#xff0c;如下。 若要修改玩家当前的金币数&#xff0c;先用工具在内存中搜索当前的金币数值&#xff0c;会搜出来很多内存地址。然后消耗一些金币…

Java集合概述

集合概述 集合是一个容器,是一个载体,可以一次容纳多个对象。前面学习的数组其实就是一个集合。 集合不能直接存储基本数据类型&#xff0c;基本数据类型都是经过自动装箱后变成包装类型存放的&#xff1b; 集合也不能直接存储Java对象&#xff0c;集合中存储的是Java对象的内…

扫码点餐小程序源码 多商户外卖点餐自助扫码预约源码

智慧餐厅扫码点餐小程序系统源码&#xff0c;二维码点餐&#xff0c;微信支付宝点餐系统源码&#xff0c;外卖点餐源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Sass 模式 5. 带调试视频 6. 可付费调试服务 私信了解更多&#xff01;…

VCS3 debug的基础

1、基础知识 使用命令行进行debug。 使用VCS进行debug的三种方式&#xff1a;专门做debug的工具目前最好的是Verdi 1、系统函数的调用 2、通过命令行的方式 3、使用DVE(GUI) debug需要注意的因素&#xff1a; 1、仿真速度&#xff08;开关选项&#xff08;command_time\ru…

超长距离CDN类视频直播延时估算

超长距离RTMP视频直播延时估算值。 摘录内容如下&#xff1a; 简单估算一下大概的网络延时。众所周知&#xff0c;光在真空中的速度约为300,000km/s&#xff0c;而在其他介质中光速会大大降低&#xff0c;所以在普通光纤中&#xff0c;工程上一般认为传输速度是200,000km/s。…

jsp+ssm计算机毕业设计ssm新冠疫苗预约接种信息管理【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

Pytest框架测试用例规则和运行方式

目录 一、默认的测试用例规则 二、测试用例执行顺序 三、测试用例运行方式 3.1.主函数模式 3.1.1.主函数模式&#xff1a;4种运行方式 3.1.2.文件框架如下图 3.2.命令行模式 3.2.1.命令行模式&#xff1a;4种运行方式 3.2.2.第2种运行方式框架 3.3.通过读取配置文…