【模块七----面向对象基础部分】

news2024/11/17 7:52:57

面向对象基础部分

    • 面向对象的编程思想介绍:
  • 一 、类和对象:
    • 1.1类:创建对象前必须先有类的存在
      • 类和对象的关系:
      • 类的组成:属性+行为
      • 类的创建实例:
    • 1.2 对象:
      • 对象的创建格式:
      • 使用对象的成员变量格式:
      • 使用对象的成员方法格式:
      • 由类创建对象,对对象中成员变量及方法的调用实例:
      • 类和对象的使用细节:
  • 二 、对象内存图:
    • 单个对象内存图
    • 两个对象的内存图:
    • 两个引用(地址)指向相同内存图:
  • 三、 成员变量(全局变量)和局部变量:
    • 区别:
  • 四 、this关键字:
    • this关键字的作用:
    • this的省略规则:
    • this介绍:
  • 五 、构造方法:
    • 构造方法的格式:
    • 构造方法的作用:
    • 构造方法注意事项:
  • 六 、封装:
    • 封装概念:
      • 封装的好处:
    • 封装的设计规范:
      • 如何隐藏方法:
  • 七 、权限修饰符:
  • 八 、标准JavaBean:

面向对象的编程思想介绍:

一种编程的思想,如何组织代码,解决问题

生活中解决问题的思想,使编程变得简单,程序便于理解的思想

1 考试问题:万物对象

老师对象:出试卷

学生对象:考试

老师对象:改试卷

2 买手机问题:

顾客对象

售货员对象

钱对象

手机对象

3 如何在代码中体现出面向对象?

Random r=new Random();-------创建Random对象

Scanner sc=new Scanner(System.in);---------------创建Scannner对象

这两种就是创建对象(Random和Scanner是java中已经存在着的类)

创建新对象的格式:

类名 对象名 =new 类名();

重点学习内容:
(1) 自己如何设计对象
( 2) 已有的对象如何使用

一 、类和对象:

1.1类:创建对象前必须先有类的存在

类的概念:对象的设计图

在这里插入图片描述

类和对象的关系:

依赖关系:创建对象需要先有类

对象是类的实体:一个类可以创建多个对象

类的组成:属性+行为

类的本质:就是对事物的描述

例子:

对{学生}进行描述:<张三>,今年<78岁>,<180>的身高,喜欢《吃饭》《学习》

属性:用成员变量表示,和定义变量的格式一样,需要放在类中,方法外部

行为:使用成员方法表示,相比于以前的方法,去掉static关键字

什么定义为属性:对类中名词的描述

行为:对类中动词的描述

类的创建实例:

//    定义一个类
public class Student {
//    1 属性:姓名  年龄
    String name="Zpj";
    int age=20;

//   2 行为(用成员方法表示)
    public void study(){
        System.out.println("学习高数");
    }
    public void play(){
        System.out.println("练习吉他");
    }
}

1.2 对象:

对象的创建格式:

在测试类(含有主方法的类)中创建类的对象:

类名 对象名 =new 类名();

创建的对象存放在堆内存(有new进堆)

对创建的对象进行打印:结果是地址
在这里插入图片描述

使用对象的成员变量格式:

对象名.成员变量名

使用对象的成员方法格式:

对象名.成员方法名

由类创建对象,对对象中成员变量及方法的调用实例:

public class StudentTest {//测试类

    public static void main(String[] args) {
        /*
        在测试类中创建student类的对象
         */
        Student stu1=new Student()
        System.out.println(stu1.name);
        System.out.println(stu1.age);
        stu1.study();
    }
}

类和对象的使用细节:

1 打印对象名字,输出的是对象的地址(地址是堆区)
在这里插入图片描述

前面的英文字符是全类名:包名+类名(了解)

2 定义类的时候成员变量不用进行赋值(编译器会对变量进行默认初始化),才能体现出由同一类创建出的对象的差异性:

在对象创建之后测试类中才对成员变量进行赋值

二 、对象内存图:

单个对象内存图

在这里插入图片描述
方法区:两个类,编译会对应生成两个.class字节码文件

1 先在方法区加载出测试类的字节码文件(原因是包含主方法(程序的入口))
在这里插入图片描述
2 主方法在栈区中运行:主方法先进栈
在这里插入图片描述

3 进入主方法后,运行到创建对象需要先有类(再产生对应的类的字节码文件)
在这里插入图片描述
4 创建对象:

(1)等号左边:在栈内存中存放变量(数据类型+变量名)

Student是类(类本身也是一种数据类型,引用数据类型),因此对象本质上也可以称为是一个变量。
在这里插入图片描述

(2)等号右边:new Student( ); 有new进堆,在堆内存中开辟空间并产生地址
在这里插入图片描述

5 由于对象根据类创建出的:因此产生的对象中会产生成员变量区成员方法引用地址区
在这里插入图片描述
成员方法引用地址指向的是对应的类中的成员方法

6 将创建好的对象的地址赋值给变量stu
在这里插入图片描述
因此对象名(变量名)stu记录的是堆中对象的地址,打印对象名输出的结果是地址。

两个对象的内存图:

可以类比一个对象的内存图
在这里插入图片描述
栈:

步骤2: 程序进入主方法:
在这里插入图片描述
步骤4: 栈区创建对象(变量)
在这里插入图片描述
步骤6: 将对象的地址赋给引用型变量(由这个引用型变量可以找到对应的对象)
在这里插入图片描述
步骤7: 定义第二个引用型变量

步骤9: 将第二个对象的地址赋给第二个引用型变量

堆区:

步骤5 :创建对象:有new进堆->在堆中开辟内存空间(根据类产生)并产生地址,其中存放成员变量和成员方法的引用地址

步骤8: 两次创建对象(new了两次):
在这里插入图片描述

方法区:

步骤1 首先在方法区加载测试类的字节码文件:
在这里插入图片描述
步骤3: 在方法区加载其他类的字节码文件
在这里插入图片描述

总结:

多个对象中的成员变量是相互独立的

多个对象中的成员方法都是通过对象中的成员方法引用地址找到对应的成员方法,是同一个(方法公用)

两个引用(地址)指向相同内存图:

在这里插入图片描述
stu1记录的是对象的地址

将stu1赋值给引用型变量stu2

效果是:stu1和stu2指向的是同一对象

三、 成员变量(全局变量)和局部变量:

区别:

(1)位置不同:

类中方法外—成员变量

方法内部----局部变量

(2)初始化值不同:

成员变量不用进行初始化,有默认的初始化值

局部变量没有默认初始化值,需要在使用前进行手动初始化

(3) 内存中的位置不同:

成员变量在堆区创建(原因是对象的创建在堆中)

局部变量在栈中(方法内)

(4) 生命周期不同:

成员变量的声明周期随对象的创建产生,随对象的消失而消失(对象的地址记录消失后,java会对垃圾对象自动清理)

局部变量随方法的调用而存在,随方法运行结束消失

(5) 变量的作用域(也就是变量的使用范围)不同:

局部变量的作用域是所属方法内部

成员变量的作用域范围是所属的类

总结为一句话:作用域是所属的大括号中

四 、this关键字:

当局部变量和和成员变量出现重名:就近原则

如果想要使用全局变量,要使用this关键字

this关键字的作用:

区分局部变量和成员变量重名问题,

(1)调用本类的成员变量:this.本类成员变量;

(2)调用本类的成员方法:this.本类成员方法();

this的省略规则:

调用本类的成员方法时候:可以直接省略this.

调用本类的成员变量时候:方法中如果没有出现重名的变量,this才可以省略(否则会按照就近原则)

this介绍:

代表当前对象的引用(也就是当前对象的地址)

谁调用this,this就代表谁的地址(哪个对象调用方法,方法中的this就带代表这个对象的地址)

五 、构造方法:

又称构造器:作用是初始化一个对象,创建对象时候所调用的方法

类中如果没有构造方法,系统会给对象一个默认的构造方法

构造方法的格式:

(1)方法名和类名相同

(2 ) 没有返回值类型和void

(3)没有具体返回值(不能有return语句)

构造方法执行的时机:

创建对象的时候,就被执行调用每创建一次对象,就会执行一次构造方法

构造方法的作用:

作用1: 本质作用:创建对象

作用2 :可以在创建对象的时候,给对象的成员变量进行初始化(给构造方法找点事情),为了使初始的数据比较灵活(不固定),可以在创建对象的时候向构造方法中传递参数。
在这里插入图片描述

构造方法注意事项:

(1) 一个类中如果没有编写构造方法,系统会自动提供一个默认,无参无逻辑的构造方法

(2) 一个类中如果手动编写了构造方法,就不再自动提供无参构造方法,如果需要使用,要自己编写无参构造方法(构造方法也可以重载)

(3) 构造方法不能主动手动去调用

建议:编写类的时候,无参构造和带参构造都手写

有快捷键:
(1)右键,生成选项

(2)魔法插件ptg:插件一键生成get,set方法以及无参和带参构造方法

六 、封装:

面向对象三大特征:封装,继承,多态

封装概念:

数据处理数据的方法设计到对象当中

封装的好处:

(1)能够比较好的维护数据,

(2)使用者不用关心内部如何实现,只需要知道如何使用就可以

封装的设计规范:

八个大字:合理隐藏(用户用不到的),合理暴露

如何隐藏方法:

将方法中的public改为private,方法前为private后,该方法的权限仅为所属的类

七 、权限修饰符:

(1)private

(2)protected

(3)public

(4)default

修饰的是成员:成员变量成员方法

private访问权限很低,修饰的成员只能在同一个类中访问。但安全性高

比public高一级的默认权限修饰符default:能在同一个包中访问(什么都不写)

//protected:不同包的子类当中

最大的权限修饰符public,可以在同一模块任意位置进行访问

八 、标准JavaBean:

JavaBean意思是实体类:封装数据的类

标准:

(1)类中的成员变量都要设为私有,并且要对外提供相应的get,set方法

(2)类中提供无参和带参构造方法

空参带参构造方法快速生成快捷键:右键,生成

魔法ptg:插件一键生成get,set方法以及无参和带参构造方法

实体类:只负责对数据存取,数据的处理(业务代码 )交给其他的类完成

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

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

相关文章

新来的00后这么猛,这薪资我看了都吓一跳,这是正常人吗?

2023年很卷吗&#xff1f;不&#xff0c;只能说你还得学&#xff01; 都说00后已经躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷&#xff01; 这不&#xff0c;前段时间我们公司新招来了一个00后小伙&#xff0c;工作都没2年&#xff0c;跳槽到我们公司就起薪18K&…

MarkDown的基本使用方法

为了给官方的文档知识总结&#xff1a;Markdown 基本语法 | Markdown 官方教程 #空格内容&#xff1a;‘#’表示标题的等级&#xff0c;越少表示标题级别越高&#xff08;字越大&#xff09; 在一行的末尾加两个或多个空格再回车&#xff0c;就是我们普通的文本回车。【还有一…

FreeRTOS基础学习

一、学习资源&#xff1a; 1、正点原子免费教学视频&#xff1a; 原子哥&#xff0c;专注电子技术教学 2、FreeRTOS官方网站&#xff1a; FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions 3、PPT与源码…

Node.js+vue多用户个人博客网站i03nz

基于nodejs语言设计并实现了个人博客。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Vue框架&#xff0c;选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、文章分类管理、博客文章管理、留言板管理、系统管理等功能模块。要循序渐进&#xff0c;心急…

chatgpt赋能python:Python列表分割与排序:完美解决数据处理问题

Python列表分割与排序&#xff1a;完美解决数据处理问题 在Python的开发实践中&#xff0c;数据处理是一项必不可少的操作。列表&#xff08;list&#xff09;是Python语言中常用的数据类型之一&#xff0c;列表中的元素可以是任意类型。列表的分割和排序是Python中常见的操作…

Apk编译过程1 - Android Studio 与 gradle

Apk编译过程1 - Android Studio 与 gradle 文章目录 Apk编译过程1 - Android Studio 与 gradlegradlewAndroid studio 的 gradle plugingradle脚本AGP&#xff1a;Android Gradle Plugin gradle 是 Android 开发者比较熟悉的构建工具了&#xff0c;因为 Android Studio 默认使用…

Java常用类及使用方法

目录 1.String 1.String的基本概念 2.String的不可变性 3.String的实例化方式及内存解析 1.两种方式 2.new构造器的方式的内存解析 3.字符串对象的存储 4.字符串拼接后的内存解析 6.String中的常用方法 7.什么时候indexOf (str)和LastIndexOf (str)返回值相同 8.Str…

用gpt定制一个pytest接口测试框(附源码)

目的&#xff1a; 描述我的需求和目标让gpt给我写一个测试接口框架 并且让他自己完善。 我说:帮我写一个基于python语言的 pytest的接口测试框架 支持post get put delete请求 添加详细的断言&#xff0c;处理身份验证和授权&#xff0c;处理HTTP错误 加上allure2报告和有请求…

代码随想录第51天

1.最佳买卖股票时机含冷冻期 淦&#xff0c;自己写&#xff0c;用3个状态死活写不出来。 动规五部曲&#xff0c;分析如下&#xff1a; 确定dp数组以及下标的含义 dp[i][j]&#xff0c;第i天状态为j&#xff0c;所剩的最多现金为dp[i][j]。 其实本题很多同学搞的比较懵&…

SecurityAccess(0x27)服务

SecurityAccess&#xff08;0x27&#xff09;服务 此服务的目的是提供访问数据和/或诊断服务的手段&#xff0c;这些服务因安全&#xff0c;排放或安全原因而受到限制。 用于将 例程或数据下载/上传到服务器和从服务器读取特定存储器位置的诊断服务是可能需要安全访问的情况。…

使用Inkscape绘制矢量电路图

GNU Inkscape是一个免费的开源矢量图形编辑器&#xff0c;非常适合画论文中的矢量插图。 Inkscape Inkscape支持win mac linux全平台&#xff08;下载&#xff09;&#xff0c;windows端还发布了uwp版本&#xff0c;可在Windows store安装。 基本操作&#xff1a; inkscape工…

2023年前端面试题汇总-性能优化

1. CDN 1.1. CDN的概念 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是指一种通过互联网互相连接的电脑网络系统&#xff0c;利用最靠近每位用户的服务器&#xff0c;更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户&…

简谈软件版本周期 | Alpha、Beta、RC、Stable版本之间的区别

目录 &#x1f48c; 引言 ⭕ 软件版本周期 &#x1f6e0;️ 软件开发期 ⚖️ 软件完成期 &#x1f4b0; 商业软件版本 &#x1f48c; 引言 定义好版本号&#xff0c;对于产品的版本发布与持续更新很重要&#xff1b;但是对于版本怎么定义&#xff0c;规则如何确定&#x…

【微服务架构】无法在Sentinel Dashboard查看到服务的监控信息原因

&#xff08;目前项目中使用的Hystrix&#xff0c;而Hystrix已经不维护了&#xff0c;至今仍然是2018年发布的1.5.8版本。&#xff09; 开始学习一下新的服务治理框架Sentinel Sentinel官网介绍 在集成Sentinel案例中碰到的问题 微服务&#xff0c;无法在sentinel dashboard…

Oracle中的数据导出(3)

假如我现在不想再打开DOS界面输入命令导出数据&#xff0c;那又有什么简单便捷的方法实现呢&#xff1f; 我将在本篇描述一种自动化的操作方法&#xff0c;简单讲就是&#xff1a;我把需要查询的数据脚本放在桌面的一个mini&#xff0c;通过双击快捷图标直接实现数据结果导出到…

VMware ESXI7.0.3的安装

文章目录 一、VMware ESXI7.0版本的安装与配置1.1、VMware概述。1.2、VMware 解析&#xff1a;1.3、VMware ESXI解析&#xff1a;2.1、准备资料2.2.1、VMware ESXI的ISO下载 3.1、安装ESXI4.1、浏览器键入esxi上述ipv4地址&#xff1a;192.168.229.171 一、VMware ESXI7.0版本的…

VMware ESXi 8.0b Unlocker OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0b Unlocker & OEM BIOS 集成 REALTEK 网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-sysin/&#xff0c;查看最新版。原创作…

C语言——分段函数求值

一、题目描述 二、题目分析 本题是简单的分段函数的求解&#xff0c;应学会合理的运用for\if\swich函数解答问题。 三、代码实现 //for语句解题#include <stdio.h> int main() {int x,y;scanf("%d",&x);if(x<1){yx;}else if(1<x && x<…

FL Studio软件最新21中文版本安装包下载

FL Studio21集合最新FL基础操作、编曲技巧、混音技巧、乐理基础、声乐演奏等各类内容&#xff0c;编曲软件FL Studio 简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前版本是FL Studio20&#xff0c;它让你的计算机就…

章节1:远程代码执行渗透与防御

章节1&#xff1a;远程代码执行渗透与防御 01 什么是远程代码执行&#xff1f; 远程代码执行&#xff08;RCE漏洞&#xff09; 远程代码执行&#xff1a;Remote Code Execute 远程命令执行&#xff08;命令注入漏洞&#xff09;&#xff1a;Remote Command Execute 定义&a…