Java 入门基础篇14 - java面向对象思想以及特性
学习目标:
一、目标
- 面向对象思想
- 类和对象
- 对象的创建和使用
- 属性和方法
- 封装
开始学习:
二、编程思想
2.1 什么是编程思想
做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。
2.2 面向过程和面向对象
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
图分析:人把大象装进冰箱

2.3 面向过程(Procedure Oriented)编程思想
2.3.1面向过程思想
以过程为中心的编程思想 以什么正在发生为主要目标进行编程
2.3.2 面向过程实现
分析出解决问题所需要的每一个步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用
2.3. 3 应用场景
适合于功能简单、业务逻辑单一的场景,优势比较明显,效率较高
2.3.4 面向过程特点
参与每一个步骤 参与每一个实现 参与每一个细节
2.3.5 面向过程代表语言
fortan语言、C语言
2.4 面向对象介绍
2.4.1 面向对象(Object Oriented,OO)编程思想
以对象为核心编程思想,对象是指现实世界中所有事物。强调对象所具备的功能,需求通过对象来实现。 面向对象思想分类: 面向对象分析(Object Oriented Analysis)简称:OOA 面向对象设计(Object Oriented Design)简称:OOD 面向对象开发(Object Oriented Programming)简称:OOP
2.4.2 面向对象的三大特征
封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
2.4.3 案例分析
案例一:吃饭
自己做:打开地图搜索菜市场位置或找个大爷大妈问下菜市场在哪里->去菜市场->选菜->付款->拧菜回家->摘菜->洗菜->切菜->配菜—>炒菜 去餐馆:老板,我要吃饭,老板说你吃啥,我说来个夫妻肺片,过了一会儿夫妻肺片就做好了 O2O外卖:打开手机找到外卖app下单即可,外卖小哥回去商家取餐送上门。
案例二:洗衣服
自己洗:准备工具(盆、桶、洗衣粉、搓衣板)->加水(考虑水温)->衣服放进去(浸泡、分颜色防止染色)->......->拧干水分->找地方用晾衣架晾起来 洗衣机洗:衣服直接扔进洗衣机->加入洗衣粉->设定好洗衣模式->等待洗衣机洗完后通知声音->取出衣服晾起来 干洗店洗:找到干洗店->把衣服给到美丽的老板娘->等待通知->取回衣服 O2O互联网洗衣:打开app下单->抠脚大汉上门服务取衣服->洗完以后以后再送上门
2.4.5 面向对象思想总结
简单化:让复杂的事情简单化 角色转变:执行者 —> 指挥者 人性化:更加符合人类习惯思想
2.5 什么是编程
编程的目的是将现实世界的事物实现信息化,如:超市收银软件
做记号时代 --> 做算术时代 --> 使用纸和笔时代 --> 使用算盘时代 --> 超市收银机器
编程是人类发明的,编程思想源于现实世界,现实世界中所看到的的事物比较具体,编程将现实世界中的事物抽取到虚拟世界通过一种更加抽象方式展现;
先理解清楚现实世界的事物,实现信息化的过程就是软件开发
2.6 面向对象分析方法分析问题的思路和步骤
① 根据问题需要,选择问题所针对的现实世界中的实体
② 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
③ 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构
④ 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
三、类和对象
3.1 类
3.1.1 类的概述
编程都是为了将现实世界事物实现信息化,在Java语言中是以类(class)为单位描述现实世界的事物,将现实世界事物的属性和行为抽取到Java类中,可以理解为类是现实世界事物的抽象化
3.1.2 类如何描述现实世界的事物
| JAVA类 | 现实世界事物 |
|---|---|
| 成员变量 | 属性 |
| 成员方法 | 行为 |
成员变量:定义在类中方法外,描述现实世界某一类事物的属性。 成员方法:用于描述现实世界事物中的行为进行封装。
3.1.3 类的定义
格式:
修饰符 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("我会睡觉");} }
3.2 对象
3.2.1 对象的概述
对象是实际存在的该类事物的每个个体,因而也被称为实例。万事万物皆对象。
3.2.2 对象和类之间的关系

理解:
-
类 = 抽象概念的人 对象 = 实实在在某个人
-
类是描述现实世界事物的一组相关属性和行为的集合,对象是该类事物中的某一个具体对象
-
类只能存在想象阶段,对象比较具体,可以操作阶段
3.2.3 对象的创建和使用
3.2.3.1 对象创建
格式:
类名 对象名 = new 类名();
举例:
Person person = new Person();
3.2.3.2 使用对象
操作成员变量 赋值:
对象名.变量名 = 赋值; person.age = 10;
取值:
数据类型 变量名 = 对象名.变量名; int age = person.age;
直接输出:
输出语句(对象名.变量名); System.out.println(person.age);
操作成员方法
调用方法:
对象名.方法名(); person.sleep();
3.3 成员变量的初始化
| 类型 | 数据类型 | 默认初始化值 |
|---|---|---|
| 基本类型(整数) | byte、short、int、long | 0 |
| 基本类型(浮点数) | float、double | 0.0 |
| 基本类型(字符型) | char | '\u0000' |
| 基本类型(布尔型) | boolean | false |
| 引用类型 | 数组、类、接口 | null |
3.4 类的访问机制
在一个类中的访问机制:类中的方法可以直接访问类中的成员变量(static方法访问非static成员变量,编译不通过)
不在一个类中的访问机制:先创建要访问类的对象,再用对象访问类中的成员
3.5 练习
1、分析汽车的属性和行为,创建汽车对象和操作汽车对象 2、分析手机的属性和行为,创建手机对象和操作手机对象 3、分析狗的属性和行为,创建狗对象和操作狗对象
3.6 对象运行时内存图
Person类
class Person { // 人类String name;// 姓名int age = 10;// 年龄boolean isMale;// 是否男性
}
一个对象内存图

两个对象内存图

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

3.7 匿名对象
匿名对象即没有名字的对象
举例:
//以下是两个对象分别调用了sleep和study方法 new Person().sleep(); new Person().study(); //以下是同一个对象调用了sleep又调用了study方法 Person p = new Person(); p.study(); p.sleep();
使用场景:
① 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象
new 类名().sleep();
② 将匿名对象作为实参传递给一个方法调用
方法名(new 类名());
四、属性
4.1 成员变量(属性)
在方法体外,类体内声明的变量称为成员变量
4.2 局部变量
在方法上或方法体内部声明的变量称为局部变量
4.3 成员变量和局部变量的区别
| 成员变量 | 局部变量 | |
|---|---|---|
| 声明位置 | 直接声明在类中方法外 | 方法形参或内部、代码块内、构造器内等 |
| 修饰符 | private、public、static、final等 | 不能用权限修饰符修饰,可以用final修饰 |
| 初始化值 | 有默认初始化值 | 没有默认初始化值,必须先赋值,方可使用 |
| 内存加载位置 | 堆内存空间 或 方法区内存空间静态域内 | 栈内存空间 |
| 生命周期 | 随着类的加载或对象的存在而存在,随类的销毁或对象的销毁而销毁 | 局部变量是随着方法的调用而存在,方法的调用完毕而消失 |
| 使用范围 | 在整个类中都可以使用 | 只能在当前代码块的范围使用 |
注:
static关键字修饰的内容随着类的加载而加载,如果定义了一个static修饰的变量会在类加载的时候就已经存在。static后面详细讲解
五、this关键字
5.1 什么是this
this表示当前对象引用,类中的成员被哪个对象调用,this就代表调用的这个对象。
5.2 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);}
}
2.调用本类中的其他构造方法 构造方法部分讲解(后面讲解)
六、封装
6.1 什么是封装
封装的原则:类中不想对外展示的属性和行为,将其隐藏起来,额外提供公共的访问方式。
6.2 为什么要封装
6.2.1 保证安全性
使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。封装防止了外部随意访问,增加了安全屏障。
6.2.2 隐藏复杂性
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的来说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装的设计思想。
6.3 信息的封装和隐藏
Java中通过将数据声明为私有的(private),再提供公共的(public)方法,getXxx()和setXxx()实现对该属性的操作
6.3.1 private关键字
什么是权限修饰符
权限修饰符可以修饰类、类中成员的权限做特定的限制,当被访问时必须满足特定的要求。
private关键字介绍
private是java中最小的权限修饰符,与public、默认、protected同类。 可以修饰类中的成员(成员变量、成员方法、构造方法、内部类)等。 被private关键字修饰的成员限定只能在本类中访问。
private关键字应用 修饰成员变量
格式:private 数据类型 变量名; 例:private int age;
修饰成员方法
格式:private 返回值类型 方法名(){}
例:private void show(){}
6.4 封装实现
封装: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}
}
七 方法的参数传递
7.1 参数列表-基本类型
将实参基本数据类型变量的”数据值“传递给形参
举例:
public static void main(String[] args) {int a = 10;System.out.println("修改之前的值为:" + a); // 10change(a);System.out.println("修改之后的值为:" + a); // 10
}
public static void change(int a) {System.out.println("a修改前的值为:" + a); // 10a = 3;System.out.println("a修改后的值为:" + a); // 3
}
7.2 参数列表-引用类型
将实参基本数据类型变量的”地址值“传递给形参
举例:
public static void main(String[] args) {Person p = new Person();p.name = "Tom";System.out.println("修改之前的name值为:" + p.name); // Tomchange(p);System.out.println("修改之后的name值为:" + p.name); // Jim
}
public static void change(Person p) {System.out.println("修改之前的name值为:" + p.name); // Tomp.name = 'Jim';System.out.println("修改之后的name值为:" + p.name); // Jim
}
学习时间:
- 同学们合理安排空余时间
学习产出:
例如:
- 抓重点,记好笔记.
- 跟着案例一起敲代码
- 完成每个章节的作业
相关文章:
Java 入门基础篇14 - java面向对象思想以及特性
学习目标: 一、目标 面向对象思想类和对象对象的创建和使用属性和方法封装 开始学习: 二、编程思想 2.1 什么是编程思想 做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。 2.2 面向过程和面向对象 二…...
第15篇:网络架构优化与综合案例分析
目录 引言 15.1 网络性能优化的方法与工具 15.1.1 带宽管理与流量控制 15.1.2 负载均衡 15.1.3 缓存优化 15.2 网络故障的排查与解决 15.2.1 常用的网络故障排查工具 15.2.2 网络故障排查案例 15.3 网络安全架构的综合设计案例 15.3.1 企业网络安全架构的要求 15.3.…...
UI自动化测试实战
补充:Selenium主要用于Web页面的自动化测试,它可以模拟用户的各种操作,如点击、输入、滚动等,来测试网页的功能。而Appium是一个开源的移动端自动化测试工具。 一、自动化测试实战章节 自动化测试流程测试用例编写项目自动化测试…...
东方智者颜廷利:以哲学思想促进世界和谐与无私奉献
【本社讯】在全球化的今天,东方智慧与哲学思想正逐渐成为促进世界和谐与理解的重要力量。近日,祖籍齐鲁大地山东济南的东方智者颜廷利以其深邃的哲学思想和对人类社会的深刻洞察,引起了国际社会的广泛关注。 颜廷利,一位致力于哲学研究与实践的智者,他的思想跨越古今,融合了东…...
基于 springboot vue停车场管理系统 设计与实现
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...
如何验证ssl私钥和证书是否匹配?
从证书(CRT)文件提取公钥 openssl x509 -in server.crt -pubkey -noout | openssl sha256从证书签名请求(CSR)文件提取公钥 openssl req -in server.csr -pubkey -noout | openssl sha256从私钥(KEY)文件…...
MongoDB的基本操作
🌷数据库准备 🎈Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…...
spring mvc后端实现过程
文章目录 一、Spring mvc1、controller1.1、LoginController011.2、LoginController 2、service2.1、LoginService2.1、LoginInimplements 3、dao3.1、LoginMapper3.1、LoginMapper.xml 4、实体类 一、Spring mvc 1、controller 控制器层、处理用户的请求和响应, …...
102005
import os os.environ["CUDA_VISIBLE_DEVICES"] "0" # 设定使用的 GPUimport tensorflow as tf from dataset import generate_data import numpy as np from model import enhancednet# 检查 TensorFlow 是否可以识别 GPU gpus tf.config.list_physica…...
Cisco ACI环境给Leaf配置OOB带外管理IP方法
可以通过GUI 或CLI进行配置 通过CLI更简单,和配置传统交换机差不多, ACI中共有3大组件 APIC 控制器 SPINE 核心 LEAF 接入 下面我们将3种角色的带外IP配置方法都列出来 1 APIC配置带外IP This example shows how to configure out-of-band managemen…...
免费送源码:Java+B/S+MySQL springboot电影推荐系统 计算机毕业设计原创定制
摘 要 随着互联网与移动互联网迅速普及,网络上的电影娱乐信息数量相当庞大,人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的电影推荐系统成为一个热门。然而电影信息的表示相当复杂,己有的相似度计算方法与推荐算法都各有优势&#…...
数据清洗(脚本)
使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如Shell、Python、SQL等。这里我以 Python(Pandas库) 和 SQL 为例,演示如何通过脚本进行数据清洗。 1. 使用 Python(Pandas库) 进行数…...
jmeter中发送post请求遇到的问题
用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…...
Java中使用protobuf
一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…...
2020款Macbook Pro A2251无法充电无法开机定位及修复
问题背景 up主有一台2020年的Macbook Pro,带Touch Bar,16G512G,四核I5,型号A2251 应该是一周没充电了,之前还用的好好的,后来有一天出差想带上 打开没电,手头上有个小米的66W快充头,…...
Spring Cloud --- 引入Gateway网关
引入Gateway网关 介绍 Spring Cloud Gateway 组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway 是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点 IP 端口信息,从…...
ESP32-C3实现定时器的启停(Arduino IDE)
1概述 ESP32-C3微控制器有多个定时器,这些定时器可用于各种用途,包括计时、生成PWM信号、测量输入信号的频率等。以下是ESP32-C3上可用的定时器资源: 两个硬件定时器: 定时器0:这是一个通用定时器,通常用于…...
centos升级g++使其支持c++17
centos升级g使其支持c17 升级g的原因现象原因 升级g方法更新镜像源yum升级g版本 总结 升级g的原因 现象 编译最新版本的jsoncpp报一下错误 jsontest.h:87:37: error: ‘hexfloat’ is not a member of ‘std’oss << std::setprecision(16) << std::hexfloat &l…...
Pytest日志收集器配置
前言 在pytest框架中,日志记录(logging)是一个强大的功能,它允许我们在测试期间记录信息、警告、错误等,从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成,因此你可以很容易地在…...
Morris算法(大数据作业)
我只能说,概率证明真的好难啊!(;′⌒) 这也证明我的概率论真的学的很差劲,有时间一定要补补/(ㄒoㄒ)/~~ 算法不难证明难! 当一个数足够大时,能不能用更少的空间来近似表示这个整数n,于是&…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
