Java 入门基础篇14 - java面向对象思想以及特性

news2024/10/19 23:02:08

学习目标:

一、目标

  • 面向对象思想
  • 类和对象
  • 对象的创建和使用
  • 属性和方法
  • 封装

开始学习:

二、编程思想

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); // 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
}

7.2 参数列表-引用类型

将实参基本数据类型变量的”地址值“传递给形参

举例:

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
}

学习时间:

  • 同学们合理安排空余时间

学习产出:

例如:

  • 抓重点,记好笔记.
  • 跟着案例一起敲代码
  • 完成每个章节的作业

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

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

相关文章

卡尔曼讲解与各种典型进阶MATLAB编程(专栏目录,持续更新……)

专栏链接&#xff1a;https://blog.csdn.net/callmeup/category_12574912.html 文章目录 专栏介绍重点文章卡尔曼滤波的原理卡尔曼滤波的例程 进阶MATLAB编程后续更新 专栏介绍 本专栏旨在深入探讨卡尔曼滤波及其在各类应用中的实现&#xff0c;尤其是通过MATLAB编程进行的典…

C++实现 对象移动 移动语义(什么是右值引用)

右值引用 为了支持移动操作&#xff0c;C11增加了右值引用。 使用&&来定义 //int &num100;//错误的使用方法&#xff0c;引用不能引用常量int &&num100;//正确的//同样 int b10; //int &mb*93;//错误的 int &&mb*93;//正确的//当然&#xff0…

什么是DevOps,如何才能获取DevOps相关实践

DevOps 是 “Development”&#xff08;开发&#xff09;和 “Operations”&#xff08;运维&#xff09;的缩写&#xff0c;代表一种融合开发和运维的文化和实践。它强调开发团队与运维团队的协作&#xff0c;通过自动化流程和持续交付&#xff0c;提高软件交付的速度、质量和…

通过Express + Vue3从零构建一个用户认证与授权系统(三)前端应用工程构建

前言 接下来&#xff0c;我们将使用 Vue 3、TypeScript 和 Vite 构建一个前端应用&#xff0c;与之前构建的后端 API 无缝对接。此前端将处理用户认证、显示用户数据、管理角色和权限&#xff0c;并确保与后端的安全通信。首先&#xff0c;我们来构建一个满足基本开发的前端应…

Spring6梳理14——依赖注入之P命名空间

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建bean-dip.xml文件 ④创建课程类文件 ⑤创建学生…

【C++】string类(2)

&#x1f973;个人主页: 起名字真南 &#x1f973;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 引言1 模拟实现string类基本框架2 实现string类中的主要成员函数2.1 Push_Back 函数2.2 reserve 函数2.3 append 函数2.4 c_str 函数2.5 begin ,end 函数2.5 operator 函数2.6…

FileLink内外网文件交换——致力企业高效安全文件共享

随着数字化转型的推进&#xff0c;企业之间的文件交流需求日益增加。然而&#xff0c;传统的文件传输方式往往无法满足速度和安全性的双重要求。FileLink作为一款专注于跨网文件交换的工具&#xff0c;致力于为企业提供高效、安全的文件共享解决方案。 应用场景一&#xff1a;项…

Python酷玩之旅_数据分析入门(matplotlib)

导览 前言matplotlib入门1. 简介1.1 Pairwise data1.2 Statistical distributions1.3 Gridded data1.4 Irregularly gridded data1.5 3D and volumetric data 2. 实践2.1 安装2.2 示例 结语系列回顾 前言 翻看日历&#xff0c;今年的日子已划到了2024年10月19日&#xff0c;今天…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(一:渗透测试行业术语扫盲)作者——LJS

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advanc…

vue登录页面

这里写目录标题 登录业务流程表单如何进行校验自定义校验规则整个表单的统一内容校验 封装登录接口axios的二次封装整个项目api的统一管理 调用接口 登录业务流程 表单如何进行校验 ElementPlus表单组件内置了表单校验功能&#xff0c;只需要按照组件要求配置必要参数即可 1.…

【880线代】线性代数一刷错题整理

第一章 行列式 2024.8.20日 1. 2. 3. 第二章 矩阵 2024.8.23日 1. 2024.8.26日 1. 2. 3. 4. 5. 2024.8.28日 1. 2. 3. 4. 第四章 线性方程组 2024.9.13日 1. 2. 3. 4. 5. 2024.9.14日 1. 第五章 相似矩阵 2024.9.14日 1. 2024.9.15日 1. 2. 3. 4. 5. 6. 7. 2024.9.…

蚂蚁华东师范大学:从零开始学习定义和解决一般优化问题LLMOPT

&#x1f3af; 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f; &#x1f4d6; title&#xff1a;LLMOPT: Learning to Define and Solve General Optimization Problems from Scratch &#x1f525; code&#xff1a;https://github.com/caigaojiang/LLMOPT &am…

YOLOv11改进-卷积-空间和通道重构卷积SCConv

本篇文章将介绍一个新的改进模块——SCConv&#xff08;小波空间和通道重构卷积&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。为了减少YOLOv11模型的空间和通道维度上的冗余&#xff0c;我们引入空间和通道重构卷积。首先&#xff0c;…

如何开启华为交换机 http

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

pc轨迹回放制作

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;pc轨迹回放制作 主要内容&#xff1a;制作车辆轨迹操作页&#xff0c;包括查询条件、动态轨迹回放、车辆轨迹详情表单等 应用场景&#xff1a;车辆…

14.归一化——关键的数据预处理方法

引言 在人工智能&#xff08;AI&#xff09;和机器学习中&#xff0c;归一化&#xff08;Normalization&#xff09;是一个重要的预处理步骤。它的主要目的是将数据转换到某个特定的范围。归一化可以帮助模型更高效地学习和提高预测的准确性。归一化在数据预处理方法中占据核心…

Jupyter Notebook中 Save and Export Notebook As不显示选项

问题 Jupyter Notebook中 Save and Export Notebook As 不显示选项&#xff08;保存和导出没有选项&#xff09; 解决 在jupyter notebook所在环境卸载jupyter_contrib_nbextensions&#xff0c;这是我之前安装的一个扩展工具集&#xff0c;从而导致上面的问题。 pip unin…

自动化数据处理:使用Selenium与Excel打造的数据爬取管道

随着互联网信息爆炸式增长&#xff0c;获取有效数据成为决策者的重要任务。人工爬取数据不仅耗时且效率低下&#xff0c;因此自动化数据处理成为一种高效解决方案。本文将介绍如何使用Selenium与Excel实现数据爬取与处理&#xff0c;结合代理IP技术构建一个可稳定运行的数据爬取…

Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备&#xff1a; https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1buHvw58&ftt&id22173428704 Javascript源码 //引用http模块创建web服务器&#xff0c;监听指定的端口获取以GET、POST、JSON等方式上传的数据&#xff0c;并回应驱动读卡…

图像梯度-Sobel算子、scharrx算子和lapkacian算子

文章目录 一、认识什么是图像梯度和Sobel算子二、Sobel算子的具体使用三、scharrx算子与lapkacian(拉普拉斯)算子 一、认识什么是图像梯度和Sobel算子 图像的梯度是指图像亮度变化的空间导数&#xff0c;它描述了图像在不同方向上的强度变化。在图像处理和计算机视觉中&#x…