当前位置: 首页 > news >正文

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、long0
基本类型(浮点数)float、double0.0
基本类型(字符型)char'\u0000'
基本类型(布尔型)booleanfalse
引用类型数组、类、接口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面向对象思想以及特性

学习目标&#xff1a; 一、目标 面向对象思想类和对象对象的创建和使用属性和方法封装 开始学习&#xff1a; 二、编程思想 2.1 什么是编程思想 做人有做人的原则&#xff0c;编程也有编程的原则。这些编程的原则&#xff0c;就叫做编程思想。 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自动化测试实战

补充&#xff1a;Selenium主要用于Web页面的自动化测试&#xff0c;它可以模拟用户的各种操作&#xff0c;如点击、输入、滚动等&#xff0c;来测试网页的功能。而Appium是一个开源的移动端自动化测试工具。 一、自动化测试实战章节 自动化测试流程测试用例编写项目自动化测试…...

东方智者颜廷利:以哲学思想促进世界和谐与无私奉献

【本社讯】在全球化的今天,东方智慧与哲学思想正逐渐成为促进世界和谐与理解的重要力量。近日,祖籍齐鲁大地山东济南的东方智者颜廷利以其深邃的哲学思想和对人类社会的深刻洞察,引起了国际社会的广泛关注。 颜廷利,一位致力于哲学研究与实践的智者,他的思想跨越古今,融合了东…...

基于 springboot vue停车场管理系统 设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

如何验证ssl私钥和证书是否匹配?

从证书&#xff08;CRT&#xff09;文件提取公钥 openssl x509 -in server.crt -pubkey -noout | openssl sha256从证书签名请求&#xff08;CSR&#xff09;文件提取公钥 openssl req -in server.csr -pubkey -noout | openssl sha256从私钥&#xff08;KEY&#xff09;文件…...

MongoDB的基本操作

&#x1f337;数据库准备 &#x1f388;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 控制器层、处理用户的请求和响应&#xff0c; …...

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更简单&#xff0c;和配置传统交换机差不多&#xff0c; 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电影推荐系统 计算机毕业设计原创定制

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的电影推荐系统成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各有优势&#…...

数据清洗(脚本)

使用脚本清洗数据时&#xff0c;可以根据具体的数据问题选择编程语言&#xff0c;如Shell、Python、SQL等。这里我以 Python&#xff08;Pandas库&#xff09; 和 SQL 为例&#xff0c;演示如何通过脚本进行数据清洗。 1. 使用 Python&#xff08;Pandas库&#xff09; 进行数…...

jmeter中发送post请求遇到的问题

用jmeter发送post请求&#xff0c;把请求参数放在Body Data处&#xff0c;参数都写得正确&#xff0c;但没想到结果每次都报错&#xff0c;直接响应结果乱七八糟&#xff0c;改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…...

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 Protocol B…...

2020款Macbook Pro A2251无法充电无法开机定位及修复

问题背景 up主有一台2020年的Macbook Pro&#xff0c;带Touch Bar&#xff0c;16G512G&#xff0c;四核I5&#xff0c;型号A2251 应该是一周没充电了&#xff0c;之前还用的好好的&#xff0c;后来有一天出差想带上 打开没电&#xff0c;手头上有个小米的66W快充头&#xff0c…...

Spring Cloud --- 引入Gateway网关

引入Gateway网关 介绍 Spring Cloud Gateway 组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway 是加在整个微服务最前沿的防火墙和代理器&#xff0c;隐藏微服务结点 IP 端口信息&#xff0c;从…...

ESP32-C3实现定时器的启停(Arduino IDE)

1概述 ESP32-C3微控制器有多个定时器&#xff0c;这些定时器可用于各种用途&#xff0c;包括计时、生成PWM信号、测量输入信号的频率等。以下是ESP32-C3上可用的定时器资源&#xff1a; 两个硬件定时器&#xff1a; 定时器0&#xff1a;这是一个通用定时器&#xff0c;通常用于…...

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框架中&#xff0c;日志记录&#xff08;logging&#xff09;是一个强大的功能&#xff0c;它允许我们在测试期间记录信息、警告、错误等&#xff0c;从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成&#xff0c;因此你可以很容易地在…...

Morris算法(大数据作业)

我只能说&#xff0c;概率证明真的好难啊&#xff01;(&#xff1b;′⌒) 这也证明我的概率论真的学的很差劲&#xff0c;有时间一定要补补/(ㄒoㄒ)/~~ 算法不难证明难&#xff01; 当一个数足够大时&#xff0c;能不能用更少的空间来近似表示这个整数n&#xff0c;于是&…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...