JavaSE基础语法--类和对象

news2024/11/14 13:45:08

在Java中,一切皆为对象,类和对象是一个抽象的概念。我们可以从面向过程来过渡到面向对象。

那么什么是面向过程呢?

举一个简单的例子,现实生活中,你需要买一台手机的时候会经历如下步骤:

 这里的每一步都可以理解为一个过程。完成这件事或者说这件任务,需要分步骤去完成。因此这就是我们面向过程的思想,C语言就是典型的面向过程。因为在存粹的C语言中,是没有类和对象这个概念的,只有函数的封装思想。那么一个个的函数封装其实就是一个过程,一个步骤。当我想通过代码完成一件完整的功能的时候,我是需要通过调用这些函数一个个按步骤去完成的。是不是可以很好的理解什么是面向过程。


那么什么是面向对象呢?

还是买手机这个例子,假设你是一个老板,老板一般都会有秘书。秘书的任务就是帮助老板完成一些繁琐复杂的事。现在老板想要买一台手机。它不需要思考上面那么繁琐的步骤,他会直接告诉秘书,我需要一台手机,你帮我买。那么秘书就会买回来,老板就能使用。而这个过程中,繁琐的步骤其实是交给了秘书去干。大大简化了这个过程。

 面向对象的思想就是这些实体之间相互合作,比如老板,秘书,手机。这三个实体也称为三个对象。而在面向过程的时候你更关注的是过程(一个个函数)是如何运作的。在面向对象中,比如说我们前面数组中常用到的Arrays.toSting这个方法。(参考数组章节),我们并不关心它到底干了什么,我们关心的是它能完成什么任务,它的功能是什么。至于它的实现步骤,我们并没有关心。这就是面向对象的思想,也是面向对象和面向过程的区别。

那么如何拿到一个对象呢?

这就涉及到类的问题了,想要有一个对象,我们必须现有一个类。类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别。比如说人,是可以看成是一个对象。那么你也是人我也是人,如何把人给描述出来呢,这就靠类,其实我的理解是类就是一个模板。

 这就是模板,我们通过这个模板能定义出不同的对象来。现在我们通过这个例子用代码去实现一下,定义一个类:

class Person{
    public String name;
    public int age;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
}

看到我们定义了一个类,有属性有行为。行为也称之为方法。现在我们有类了,就可以拿到对象,这个过程我们叫实例化对象。

 类其实是一个类型,是用户自定义的。它是一个引用类型,我们前面讲数组的时候强调过什么是引用类型,说白了就是存的是地址。那么就需要用new关键字,在堆上开辟一块空间用于存放这个对象。

如何通过对象去访问成员变量和方法呢?

通过点号就能访问我们定义在类里面的成员变量和方法:

 

 


 下面我们针对实例化对象,看看内存是如何布局的:

这和我们讲数组是引用类型的布局是很类似的。都是通过地址来找到引用的那块内存,这块在堆上开辟的内存空间是属于对象的。但是这块空间只存属性,也就是只存储了成员变量。那么成员方法在哪呢,它是在另外一片空间名叫方法区。而且 方法是不占用内存的。只有调用的时候才会占用内存。而且是在栈上。类是不占用内存的。只有实例化一个对象的时候,才会出现上图所示的情况。

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

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

相关文章

【python程序设计】——期末大作业

【python程序设计】——期末大作业😎 前言🙌一、所用技术:二、 系统设计三、 系统实现3.1 核心功能代码实现:3.2 演示结果展示 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭&am…

yaffs格式的根文件系统制作

linux内核启动后,它接下来要做的事就是启动应用程序,而应用程序在哪里呢,类比windows,启动时要读取c盘,所以linux的文件系统就类似于c盘,并且我们使用的ls、cp等一些类命令(本质是应用程序&…

JavaScript 手写代码 第二期

文章目录 1.为什么要手写代码?2. 手写代码2.1 手写实现判断类型函数2.1.1 前置知识2.1.1 手写实现 2.2 手写实现aplly,call,bind方法2.2.1 基本使用2.2.2 实现思路2.2.3 手写实现 1.为什么要手写代码? 我们在日常开发过程中,往往都是取出来直…

Linux(centos7)缺失.bashrc文件登录出现bash-4.2

一、问题描述 最近遇到几次登陆linux(centos7.5)系统后,虽然在/root用户下,但出现了如下界面: 二、解决思路 使用不同的linux发行版本,(比如:IP为*...90,以下简称90)会…

课程19:个人中心功能与提示优化

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

Android中加载一张大图,如何正常显示且不发生OOM ?

问题 在Android中,获取一个1000*20000(宽1000px,高20000px)的大图,如何正常加载显示且不发生OOM呢? 分析 Android系统会为应用分配一定大小的堆内存 而如果遇到高分辨率图片时,如果它的配置为ARGB(每个像素占4Byte) 那么它要消…

深度学习(23)——YOLO系列(2)

深度学习(23)——YOLO系列(2) 文章目录 深度学习(23)——YOLO系列(2)1. model2. dataset3. utils4. test/detect5. detect全过程 今天先写YOLO v3的代码,后面再出v5&…

【PCB专题】案例:PCB板厂说焊盘宽度太小容易沉金不良,但加宽又可能导致阻焊桥在阻焊为黑色油墨下无法做出?

此案例是最近在Layout一块PCB板卡,使用了一个以前我没有接触过的器件,此器件的封装是QFN128。 总的问题是:PCB板厂说如果按原稿制作的话,焊盘宽度太小沉金容易不良,但电话里和我说如果加宽又可能导致阻焊桥在黑色油墨情况下无法做出? 板厂给的EQ如下所示,表示TOP面设计…

【Unity之IMGUI】—编译模式下控件可视化及其封装

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

【从零开始开发一个线上网课系统-01】账号登录及退出登录功能开发

文章目录 1 视图层开发2 form表单验证3 配置urls.py4 模板层开发 实际上在系统开发的博客中应该先描述数据库设计,但由于设计的表比较多,其理解简单,但撰写和描述较为麻烦,所以我以可视化方式来呈现这些数据表以及其中的关系&…

RISCV Reader笔记_1 RISCV的意义

RISCV Reader RISCV的诞生 出众之处 RISCV架构被设计的目的就是成为一个通用的指令集架构 ISA。不仅支持从微控制器到高性能计算机的各种处理器,兼容各种编程语言,还适应FPGA ASIC等所有实现技术,稳定…… 计算机体系结构为了在指令集更新…

Iceberg从入门到精通系列之一:Iceberg核心概念理解

Iceberg从入门到精通系列之一:Iceberg核心概念理解 一、Iceberg核心概念二、Iceberg表结构三、数据文件四、表快照Snapshot五、清单列表Manifest list六、表快照、数据文件和清单列表之间的关系七、Catalog八、Hive Catalog九、Hadoop Catalog十、Hive Catalog和Had…

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序

Alamouti,MRC以及beam三种方式的误码率对比MATLAB仿真程序 完整程序: clc; clear; close all; warning off; addpath(genpath(pwd)); %%%%%%%%%%%%%%%%%%%%%%%%% Initialization %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N = 10^6; r_n = rand(1,N)>0.5; BPSK = 2*r_n-1; E_n_d…

chatgpt赋能python:Python生成GUI的步骤和工具

Python生成GUI的步骤和工具 Python是一种广泛使用的编程语言,其语法简洁、易学、可读性强等特点深受程序员喜爱。 Python的GUI编程让我们可以为用户提供友好的界面,帮助用户更好地理解和使用程序。Python生成GUI的过程并不复杂,本文将为您介…

代码随想录算法训练营第42天 | 01背包问题理论基础 + 416.分割等和子集

今日任务 目录 01背包问题 二维数组 01背包问题 一维/滚动数组 416.分割等和子集 - Medium 01背包问题 二维数组 理论基础:代码随想录 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品…

课程18:角色权限功能实现

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

chatgpt赋能python:Python生成C++代码-提高生产力的利器

Python 生成 C 代码 - 提高生产力的利器 Python 作为一种高级编程语言,在数据分析、机器学习等领域都有着广泛的应用。但是,Python 被认为速度慢,无法处理一些高性能的任务。此时,C这种低级语言就被用来替代 Python,以…

实战:构建工具-共享库配置实践-2023.6.22(测试成功)

实战:构建工具-共享库配置实践-2023.6.22(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11实验软件 链接:https://pan.baidu.com/…

Flutter Dart操作符

常见的操作符大家都知道就不多介绍了,主要来看看Java所没有的。 类型判定操作符 as、 is、 和 is! 操作符是在运行时判定对象 类型的操作符 操作符解释as类型转换is如果对象是指定的类型返回 Trueis!如果对象是指定的类型返回 False as 操作符把对象转换为特定的类…

如何加入开源社

开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、项目孵化” 为使命的开源社区联合体。开源社积极…