当前位置: 首页 > 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;于是&…...

TCP/IP协议 【三次握手】过程简要描述

当建立TCP连接时&#xff0c;三次握手的作用简要描述如下&#xff1a; 第一次握手&#xff08;客户端向服务器发送SYN包&#xff09;&#xff1a;客户端发送SYN包给服务器&#xff0c;确认服务器是否在线并等待响应。 第二次握手&#xff08;服务器向客户端发送SYNACK包&…...

docker 数据管理,数据持久化详解 二 数据卷容器

数据卷和数据卷容器核心区别 持久性对比 数据卷&#xff1a;当您直接在启动容器时指定了一个数据卷&#xff08;例如&#xff0c;使用docker run -v /data&#xff09;&#xff0c;这个数据卷会自动创建&#xff0c;并且其内容会在容器停止或删除后继续存在。您可以随时通过Do…...

Logrotate:Linux系统日志轮转和管理的实用指南

Logrotate是Linux系统中用于自动化管理日志文件的强大工具&#xff0c;它能够高效、安全地轮转、压缩和清理日志文件&#xff0c;从而有效控制日志文件大小&#xff0c;节省磁盘空间&#xff0c;并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南&#xff0c;涵…...

八股面试3(自用)

基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数&#xff1a;int&#xff0c;long&#xff0c;short&#xff0c;byte 2.浮点类型&#xff1a;float&#xff0c;double 3.字符类型&#xff1a;char 4.布尔类型&…...

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…...

【Android】浅析OkHttp(1)

【Android】浅析OkHttp&#xff08;1&#xff09; OkHttp 是一个高效、轻量级的 HTTP 客户端库&#xff0c;主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求&#xff0c;还支持许多高级功能&#xff0c;如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…...

Generate-on-Graph

目录 摘要1 引言2 相关工作4 不完整知识图谱问答&#xff08;IKGQA&#xff09;4.1 任务介绍4.2 数据集构建 5 Generate-on-Graph (GoG) 摘要 为了解决大型语言模型&#xff08;LLMs&#xff09;在知识不足和幻觉问题上的困扰&#xff0c;众多研究探索了将LLMs与知识图谱&…...

学习笔记——交换——STP(生成树)简介

一、技术背景 1、生成树技术背景 交换机单线路组网&#xff0c;存在单点故障(上左图)&#xff0c;上行线路及设备都不具备冗余性&#xff0c;一旦链路或上行设备发生故障&#xff0c;业务将会中断。 为了使得网络更加健壮、更具有冗余性&#xff0c;将拓扑修改为(上右图)接入…...

【Linux从入门到精通一】操作系统概述与Linux初识

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…...

Git 深度解析 —— 从基础到进阶

目录 1. Git 基础概念 1.1 版本控制 (Version Control) 1.2 分布式版本控制 (Distributed Version Control) 1.3 核心概念 1.4 Git 工作流程 2. Git 常用命令 2.1 初始化仓库 2.2 添加文件 2.3 提交修改 2.4 查看状态 2.5 查看历史记录 2.6 切换分支 2.7 创建分支…...