JavaSE——面向对象基础(1/4)-面向对象编程、程序中的对象、对象的产生、对象的执行原理、类和对象的一些注意事项

news2024/11/22 23:59:52

目录

面向对象编程

程序中的对象

对象的产生

对象的执行原理

类和对象的一些注意事项


面向对象编程

  • 开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。

例如设计一个学生的对象,其中有姓名和成绩等,录入不同的信息就可以产生多个学生的数据。

学生的数据,找学生对象处理;

汽车的数据,找汽车对象处理;

手机的数据,找手机对象处理。

程序中的对象

对象本质上是一种特殊的数据结构。

对象的产生

  • class,也就是,也称为对象的设计图(或者对象的模板)。

设计 类 相当于设计一张“表”,有了“表”之后就可以新建对象了。

也就是说,先用class设计出对象的模板,然后再用class来new对象,new出一张张表格,有多少张这样的表格,就有多少个对象。

public class 类名{
    1.变量,用来说明对象可以处理什么数据
    2.方法,描述对象有什么功能,也就是可以对数据进行什么样的处理
    ...
}
类名 对象名 = new 类名();

对象的执行原理

计算机是通过虚拟机中的三块区域(方法区、栈内存、堆内存)配合来执行我们的面向对象程序的,

  1. 首先会执行Test类,因此会先把Test类加载到方法区里面
  2. 然后执行Test类里面的main方法,main方法是提到栈内存进行执行的
  3. 接着就执行main方法的第一行代码,因为此处第一行代码是在创建学生类,因此会把这个学生类也加载到方法区里面
  4. 用这个学生类定义一个s1变量,变量是放在方法里面的,因此它会在main方法里开辟一块变量空间来代表s1这个变量
  5. 执行new对象时,这个new出来的学生对象会放在堆内存里面,会在堆内存中开辟一块内存空间出来,可以把这个内存空间理解成学生表,该内存空间会有自己的地址,学生类里面创建的变量一开始都是初始值,且这个对象里面还有一个类的地址信息,该地址指向当前该学生对象是由哪个类创建的。
  6. 接着会把这个学生类的地址赋值给s1。
  7. 然后就可以根据s1中存储的地址,指向那个学生类,进而改变那个学生类的数据;再通过学生类的地址找到定义它的类,去执行方法。


  • Student s1=new Student();
  • 每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生对象。
  • s1变量里面记住的是学生对象的地址。

如何识别引用类型的变量?

Student s1=new Student();

s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量。

类和对象的一些注意事项

  • 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car...
  • 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
  • 成员变量本身存在默认值,在定义成员变量时一般来说不需要赋初始值(没有意义)。
  • 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
  • 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
  • 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。

注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。Java存在自动垃圾回收机制,会自动清楚掉垃圾对象,程序员不用操心。


END


学习自:黑马程序员——JavaSE课程

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

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

相关文章

可视化视频监控平台EasyCVR如何配置服务参数以免getbaseconfig接口信息泄露?

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台,采用了开放式的网络结构,平台支持高清视频的接入和传输、分发,可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集…

【.NET Core】C#编程规范

【.NET Core】C#编程规范 文章目录 【.NET Core】C#编程规范一、概述1.1 结构清晰第一1.2 简洁之风1.3 代码风格保持一致性 二、命名约定三、类型参数命名指南3.1 请使用描述性名称命名泛型类型参数,除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用…

Redis(03)——发布订阅

基础命令 基于频道 publish channel message:将信号发送到指定的频道pubsub subcommand [argument [argyment]]:查看订阅或发布系统状态subscribe channel [channel]:订阅一个或多个频道的信息unsubscribe [channel [channel]]:退…

CSS:BFC

BFC,Block Formatting Context,块级格式化上下文,是一个独立的渲染区域或隔离的独立容器,它决定了其子元素如何布局,并且与这个区域外部的元素无关。 形成 BFC 的条件 float 的值不为 none(left、right&a…

【Node.js和Appium server的下载安装步骤】

Node.js 是JavaScript的运行环境,是 JS 语言的解释器,之中集成了npm库。 npm 是世界上最大软件包仓库,可用于Appium server安装。 1、Node.js官方安装包及源码下载地址:Node.js 选择相应系统的安装包进行下载(.msi用…

c编译器学习02:chibicc文档翻译

目的 先粗略地看一遍作者的书籍。 原文档地址 https://www.sigbus.info/compilerbook# “低レイヤを知りたい人のためのCコンパイラ作成入門” 为想了解底层的人准备的C编译器制作入门 Rui Ueyama ruiucs.stanford.edu 2020-03-16 作者简介 https://www.sigbus.info/ 植山…

知识蒸馏实战代码教学二(代码实战部分)

一、上章原理回顾 具体过程: (1)首先我们要先训练出较大模型既teacher模型。(在图中没有出现) (2)再对teacher模型进行蒸馏,此时我们已经有一个训练好的teacher模型,所以…

C++ 二分模版 数的范围

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 n 和 q &…

QT串口通讯上位机_数据超时接收功能及定时发送功能设计

目录 1.概述2.本次内容最终实现3.代码部分4.完整工程文件下载 1.概述 基于《串口开发基础》 在该基础上增加超时时间接收功能,加入定时器循环; 例如,接收数据开始后,在100ms内未接收到任何数据,视作本次数据接收结束&…

数据结构第3章 串

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图1、基本概念1)主…

Java+SpringBoot:农业疾病防治新选择

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目,页面做的相当漂亮,所以选择了这个。可以参考2.3的效果图 惭愧,工作两年了也没个自己的博客系统,趁着过年时间,开始搭建一下. NBlog原项目的github链接:Naccl/NBlog: &#…

leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…

Sora一出 哪里又要裁员了?

上班前夕迎来大新闻,那就是Sora了,Sora是什么,有什么牛逼之处,怎么实现的,我们跟着官方文档透露出来的一点点信息,简单的捋一捋。 一、Sora是什么 官方给出的定义是:世界模拟器。这很明显有夸大…

数据结构:动态内存分配+内存分区+宏+结构体

一、作业 1.定义一个学生结构体&#xff0c;包含结构体成员&#xff1a;身高&#xff0c;姓名&#xff0c;成绩&#xff1b;定义一个结构体数组有7个成员&#xff0c;要求终端输入结构体成员的值&#xff0c;根据学生成绩&#xff0c;进行冒泡排序。 #include <stdio.h>…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题&#xff1f; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5&#xff…

如何利用Idea创建一个Servlet项目(新手向)

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…

备战蓝桥杯---动态规划(应用1)

话不多说&#xff0c;直接看题&#xff1a; 首先我们考虑暴力&#xff0c;用二维前缀和即可&#xff0c;复杂度为o(n^4). 其实&#xff0c;我们不妨枚举任意2行&#xff0c;枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来&#xff0c;相当于把一个矩阵压缩成…

观察者模式和发布订阅模式的区别

从下图中可以看出&#xff0c;观察者模式中观察者和目标直接进行交互&#xff0c;而发布订阅模式中统一由调度中心进行处理&#xff0c;订阅者和发布者互不干扰。这样一方面实现了解耦&#xff0c;还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息&#xff0c;但…

【Vue3】搭建Pinia环境及其基本使用

下载 npm i pinia引入并注册 App.vue import { createApp } from vue import { createPinia } from pinia import App from ./App.vue // 1. 引入 import { createPinia } from piniaconst app createApp(App) // 2. 创建 const pinia createPinia() // 3. 注册 app.use(p…