首页 > 其他分享 >基础面向对象

基础面向对象

时间:2023-08-20 17:37:36浏览次数:414  
标签:变量 对象 成员 基础 构造 面向对象 内存 类中

面向对象基本概念

  • 面向对象三大特征:继承,封装,多态
  • 类就是设计图纸 对象就是根据图纸造出来的实物
  • 类:对象共同特征的描述。一般一个代码文件里只写一个类
  • 对象:真实存在的具体实例 类名 对象名=new 类名()
  • 创建对象时: 类名 对象名=new 类名()
  1. 等号左边是在给对象起名字、是在存对象的内存地址
  2. 等号右边才是真正的创建了这个对象
  3. 直接写等号右边的内容也可以创建对象 只不过这时的对象叫做匿名对象
  • 类中包含:

成员变量(属性)

成员方法(行为)

构造器

代码块

内部类

  • 同一类中的成员方法可以直接调用类中定义的成员变量
  • 有了类以后就要创建对象 通常会在测试类中(自己重新写的类)写main方法然后创建类的对象
  • 使用对象:

访问属性:对象名.成员变量名

访问行为:对象名.方法名

  • 定义类时:一个代码文件可以有很多不同的类 实际开发中一个代码文件只定义一个类 但只能有一个被public修饰 且被public修饰的类名必须与代码文件名保持一致

java内存介绍

  • 方法区:字节码文件加载时进入的内存
  • 栈:方法运行时所进入的内存
  • 堆:new出来的东西在这里开辟空间并产生地址

对象内存图

  • 对象存在堆内存中
  • 每个对象都有不同的name price 所以成员变量存在于每个具体的对象中 对象又在堆内 所以成员变量就在堆内
OopDemo01 car=new OopDemo01();
//car是变量名所以存在于栈内存中 car中的存的是对象在堆中的内存地址

复杂内存图

  • 什么叫两个变量同时指向一个对象:
  • OopDemo01 car=new OopDemo01();
  • OopDemo01 car2=car//car2和car这两个变量就指向了同一个对象
  • 其实就是给变量起了个别名 通过car2改了数据以后可以通过car访问改后的数据

构造器

  • 没学构造器之前定义对象理解为通过类直接定义对象,学了构造器以后:对象是通过构造器定义的,只是在之前没有传入参数
  • 用于初始化一个类的对象并返回对象的地址
  • 定义格式:修饰符 类名(参数列表){ }

无参构造器:类中默认就有的

有参构造器:初始化对象的时候可以为对象赋值

  • 严格来说对象是通过构造器得到的
  • 用构造器得到对象:类名 变量名 = new 构造器(构造器名=类名)
  • 在类中定义构造器,在方法中使用构造器(main)
  • 每个类中都有一个默认的无参构造器 所以类中只有无参构造器是可以不写
  • 但是当我们在类中写了一个有参构造器时 此时默认的无参构造器就会直接消失,如果想再次使用无参构造器就需要单独定义了
  • 使用构造器传参数时严格意义上传进去是不能叫做参数的 传进去的只不过是对象的初始值
  • 对象名**.方法名(参数):**这里的参数才是严格意义上的参数

this关键字

  • this出现在成员方法,构造器中代表当前对象的地址,用于访问当前对象的成员变量,成员方法
  • 谁调用这个方法/构造器this就代表谁

封装

  • 针对成员变量来说的,合理隐藏,合理暴露。
  • 封装的实现步骤
  1. 使用private关键字修饰(修饰后该成员变量就只能在当前类中访问)进行隐藏
  2. 提供public公开的getter sette方法暴露其取值和赋值
  • 即使成员变量被封装了,我们使用有参构造器时给对象赋初值时也是直接传入参数
  • 封装加强了程序的安全性
  • 适当的封装可以3提升开发效率,同时可以让程序更容易理解和维护
  • 一般我们不在getter和setter中写任何限定性的东西,那这并不能说封装没有任何意义,这是一种代码风格,也就是Java的特点

JavaBean

  • 可以理解为实体类,其对象可以用于在程序中封装数据
  • 标准JavaBean满足以下要求、
  1. 成员变量使用private修饰
  2. 提供每个成员变量对应的getter setter方法
  3. 必须有一个无参构造器

成员变量VS局部变量

区别

成员变量

局部变量

类中位置不同

类中方法外

方法中,构造器内

初始值不同

有默认初始值

无默认值,使用前需赋值

在内存中位置不同

堆内存

栈内存

生命周期

与对象同生共死随着对象的创建而存在,随着对象的消失而消失

与方法同生共死随着方法的调用而存在,随着方法结束而消失

作用域

只要有对象,在任何地方都可以访问成员变量,在同一类在成员方法可以直接访问成员变量

在其所属大括号内

标签:变量,对象,成员,基础,构造,面向对象,内存,类中
From: https://blog.51cto.com/u_16231765/7162391

相关文章

  • Linux基础命令
    Linux基础命令操作,黑马视频截图1、命令基础一、名词解释总结,名词解释:2、ls命令入门一、名词解释总结,名词解释:3、ls命令的参数和选项一、名词解释组合形式:总结,名词解释:4、cd-pwd命令一、名词解释总结,名词解释:5、相对路径、绝对路径和特殊路径符一、名......
  • 面向对象
    面向对象概述面向对象和面向过程的区别面向过程:优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象:优点:易维护、易复用......
  • 软件测试|Linux 基础教程:创建和删除目录
    简介在Linux系统中,创建和删除目录是非常常见的操作。目录是用于组织文件和其他目录的一种结构,它们是组织文件系统的重要组成部分。本文将介绍如何在Linux系统中创建和删除目录。创建目录在Linux中,可以使用mkdir命令来创建一个新的目录。mkdir是MakeDirectory(创建目录)的......
  • 面向对象--继承
    继承概述在面向对象里面,继承是对类进一步抽象的过程。当多个类中存在相同属性和行为时,将这些相同属性和行为抽取到单独一个类中,这个类就是父类,子类无需再定义这些属性和行为,只要继承父类即可。其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者*基类*。继承概念......
  • c++基础入门
    1.安装g++编译器是编译C++代码使用的编译器,不要使用gcc了。在用户目录中单独创建一个文件夹存放下载后的3个安装文件,然后进入到目录中执行下面命令cd文件夹sudodpkg-i*.deb本地安装sudoapt-getinstallg++在线安装2.C++的语言特点及优势cwithclass(类)cplusplus大型......
  • Vue基础语法
    一、插槽1、格式放在子组件<slot>内容</slot>2、内容可以放任何模块的代码3、原理父组件引用时,填写内容会被应用到插槽css模块<style>.box{width:200px;height:200px;background-color:aqua;float:left;margin-right:20px;......
  • JavaWeb程序设计基础
    基础认识1、web技术简介(1)HTML:HTML1.0->HTML5.0(H5),标签是语法(2)CSS:样式表,让页面美起来(3)JavaScript:脚本,让页面动起来(4)DOM:元素的树结2、动态网页技术(1HTML是编制静态网页的基本语言(2)动态网页:可以根据访问者的不同需要,对访问者输入的信息提供不同响应的网页不同的人、不同的时间、不同的......
  • Ansible 基础
    ansible是一个自动化的工具,所以ansible并没有服务需要进行管理;主要来实现企业级的自动化批量部署或下发配置等等,并且ansible还是一个无代理架构,可以通过应用自身的能力来管理应用本身。ansible优势:不需要去做重复的事,配置的下发和应用的部署,以及滚动更新ansible执行任务的方式......
  • XXE漏洞--xml基础知识
    一、XML基础知识可以用于配置文件、交换数据要求:XML文档必须有根元素XML文档必须有关闭标签XML标签对大小写敏感XML元素必须被正确嵌套XML属性必须加引号DTD(DocumentTypeDefinition)文档类型定义自动校验格式内容,元素ELEMENT校验实体ENTITY定义字符或值,相当于全局变......
  • 【Freertos基础入门】深入浅出freertos互斥量
    @TOC前言FreeRTOS是一款开源的实时操作系统,提供了许多基本的内核对象,其中包括互斥锁(Mutex)。互斥锁是一种常用的同步机制,用于确保在同一时间内只有一个任务可以访问共享资源,防止竞态条件等并发问题。本文将介绍FreeRTOS中的互斥锁的使用方法和注意事项。一、互斥量是什么?当多个任务......