【JavaSE】类和对象

面向对象概述

面向对象编程(简称POP),其核心思想就是参照现实中的事物,将事物的属性特征、行为特征抽象出来,使用类来表示,当涉及到一个具体的实例时,就将类进行实例化,使用一个对象来表示。

简而言之,计算机是一个不能独立思考的物品。当使用者赋予某种权利的同时,计算机才能获得并使用该种权利。因此程序员想要计算机呈现某种事物时,就需要将此种事物的特征给抽象出来,而这些特征就会构造成一个整体,这个整体程序员使用类来形容。于是,当使用者进行使用时,直接去调用它的特征即可。此时需要考虑的一个问题就是每个人拥有相同的特征,但是特征的内容不尽相同,例如人们都拥有身份证,但是内容却不相同。对于此类问题,既然某种事物拥有相同的特征,那么就使用这种特征来表示这类事物,对于这类事物的个体,将这些特征实例化,每个具体的个体使用一个对象来表示即可。

举例:对与CSDN这个系统来说,其核心事物就是用户,因此可以将其抽象成类:用户类。对于用户类来说,其属性特征就是用户名、用户密码以及文章数等其他,其行为特征就是看文章、写文章以及修改文章等其他。对于我们使用者来说,都是用户,因此我们的属性特征和行为特征正是上述内容,但是其特征的内容对于每个人来说都不相同,因此一个用户使用CSDN时,都会使用上述事物来构建成一个对象,每个用户属于一个对象。所谓的类和对象,就是面向对象的核心概念。

类和对象

类和对象是面向对象的核心概念。对于Java来说,面向对象的程序设计思想贯穿始终,无论是现在学习的JavaSE,还是后续学习的JavaEE,都离不开类和对象。

什么是类?

类是具有相同特征事物的抽象描述,是抽象的、概念上的定义。

什么是对象?

对象是实际存在的该类事物的具体个体,是具体的。因此也被称为实例。

类的成员概述

面向对象程序设计的重点是类的设计;

类的设计,其实就是类的成员的设计。

  •  现实世界中的生物体,大到鲸鱼、小到蚂蚁,都是由最基本的细胞构成的。同理,Java代码世界是由诸多个不同功能的类构成的。
  • 现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质 ... 
  • Java中用类class来描述事物也是如此。类,是一组相关属性和行为的集合,这也是类两个最基本的成员之一。

        a. 属性:该类事物的状态信息。对应类中的成员变量。

        b. 行为:该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的成员方法。

public class Person {

    // 属性,也被称为成员变量
    public String name; // 姓名
    public int age; // 年龄
    public char gender; // 性别

    // 行为,也被称为成员方法
    public void sayHi() {
        System.out.println("早上好!");
    }

    public void sing() {
        System.out.println("我非常喜欢唱歌!");
    }

    public void dance() {
        System.out.println("我非常喜欢跳舞!");
    }
    
}

类的实例化

类表示的是一类事物的特征,而对象就是类实例化的产物。

格式:类型   对象名   =   new   类型()   ;

面向对象完成具体功能的三步骤

步骤一:创建类,并设计类的内部成员。

步骤二:创建类的对象。

步骤三:通过对象,调用其内部的属性或方法。

内存解析

JVM中使用到的内存区域

虚拟机栈:用于存储局部变量等。局部变量表存放了编译器可知长度的各种基本数据类型和对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。

堆:此内存的唯一目的就是存放对象实例,几乎所有的对象实例都在这里进行分配内存。在Java虚拟机中的描述是,所有的对象实例以及数组都要在堆上分配。

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

创建类的一个对象

创建类的多个对象

通过上述的内存解析,可以看出,对象和数组的内存位置大致相同。两者都是在虚拟机栈中存放数组名/类名的地址,然后地址再对应到堆内存中存放具体的数据。对于这种存放方式,导致的一个问题就是如果不new一个新的空间,那么可能存在几个变量对应的都是一个地址,即同一个对象。这使得若多个变量对应一个地址,那么进行修改时,其他变量的值也会同时被改变。

创建类的多个对象时,每个对象在堆空间中会有一个对象实体。每个对象实体中保存着一份类的属性,也就是成员变量、这里就包含着一个成员变量和局部变量的区别:成员变量会有一个默认初始值,初始值的大小和数组的一致;局部变量则没有默认初始值。

属性/成员变量

成员变量是类的成员之一,描述的是事物的状态信息。例如在用户类中的用户名、密码以及年龄等都属于成员变量。

变量的分类

按照数据类型来分:基本数据类型(8种),引用数据类型(6种)。

按照变量在类中声明的位置不同:成员变量,局部变量(方法内、方法形参、构造器内、构造器形参以及代码块内)。

成员变量 VS 局部变量

概念

成员变量:在方法体外、类体内声明的变量。

局部变量:在方法体内部等位置声明的变量。

public class User {

    // 成员变量
    private String username; // 姓名
    private String password; // 密码
    private int age; // 年龄
    private String gender; // 性别

    public void sleep(int hour) { // 形参,相当于是局部变量
        System.out.println(username + "的睡眠时间是" + hour + "小时!");
    }

    public void eat() {
        String food = "鱼香肉丝"; // 局部变量
        System.out.println("我最喜欢吃的菜是" + food + "!");
    }
    
}

相同点

1. 变量声明的格式相同:数据类型   变量名   =   变量值;

2. 变量都有其有效的作用域,出了作用域就失效了;

3. 变量必须先声明,后赋值,再使用。

不同点

1. 声明的位置不同

    成员变量:方法体外,类体内。

    局部变量:声明在方法内、方法形参、构造器内、构造器形参、代码块内。

2. 内存位置不同

    成员变量:随着对象的创建,存储在堆内存中。

    局部变量:存储在栈空间中。

3. 生命周期不同

    成员变量:随着对象的创建而创建,随着对象的消亡而消亡。

    局部变量:随着方法对应的栈帧入栈,局部变量会在栈中进行分配,随着方法对应的栈帧出栈,局部变量消亡。

4. 作用域不同

    成员变量:在整个类的内部都是有效的。

    局部变量:仅限于声明此变量所在的方法(或构造器内、或代码块内)。

5. 权限修饰符不同

    成员变量:可以使用权限修饰符。

    局部变量:不可以使用权限修饰符。

6. 默认值不同

    成员变量:存在初始默认值。

    局部变量:没有初始默认值。

    换句话说,如果没有给成员变量进行显式初始化赋值,则会有默认初始化值;而使用局部变量之前,必须要显式的赋值,否则报错。

方法

成员方法是类的成员之一,描述的是该类事物对应的操作。例如用户类可以修改自己的信息,可以进行吃饭的动作等行为。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程。以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。由于现在Selenium在自动化测试的统治地位,并且随着Selenium 4的即将发布,在未来很长的一段时间里…

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 引言:探索命令模式的奥秘 软件设计领域充满挑战与机遇,命令模式…

Android下SF合成流程重学习之Refresh流程

Android下SF合成流程重学习之Refresh流程 引言 在前面初步分析完成了Android下SF合成流程重学习之Invalidate流程,我们接下来继续下面的分析。当有事务的更新或者有Buffer的更新便会触发后面刷新的流程,即Refresh流程! 一. onMessageRefresh 文件&…

Vue24 收集表单数据 实例

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>收集表单数据</title><script type"text/javascript" src"../js/vue.js"></script></head><body><!-- 收集…

线性回归-使用ClickHouse机器学习函数

本文字数&#xff1a;5923&#xff1b;估计阅读时间&#xff1a;15 分钟 作者&#xff1a;Ensemble 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 这原本是转发的ensemble analytics的文章。 【https://ensembleanalytics.io/blog/l…

校园流浪猫信息记录和分享的小程序源码/微信云开发中大猫谱小程序源码

这是一套用于校园流浪猫信息记录和分享的小程序源码&#xff0c;微信云开发中大猫谱小程序源码。主要功能是创建校园猫猫档案&#xff0c;为猫猫上传照片&#xff0c;以及照片审核&#xff0c;人员管理等&#xff0c;并且可以拍照记录校园内猫猫的成长轨迹&#xff0c;该程序由…

【Java EE初阶十三】网络初识

1. 网络发展史 网络发展的几个主要时期&#xff1a; 单机时代->局域网时代->广域网时代->移动互联网时代 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同工作来完成 业务&#xff0c;就有了网络互…

代码随想录算法训练营第43天(动态规划05 ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

动态规划 part05 1049. 最后一块石头的重量 II解题思路 494. 目标和解题思路 474.一和零解题思路总结 详细布置 1049. 最后一块石头的重量 II 本题就和 昨天的 416. 分割等和子集 很像了&#xff0c;可以尝试先自己思考做一做。 题目链接&#xff1a; 1049. 最后一块石头的重量…

十五、环境变量和代理跨域及api的定义

环境变量的定义 在根目录下新建三个环境变量配置文件 .env.development&#xff08;开发环境&#xff09;.env.test&#xff08;测试环境&#xff09;.evn.production&#xff08;生产环境&#xff09;分别定义开发环境、线上环境和测试环境的变量 webpack VUE_APP_TITLE 学…

第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录前言一、三种语音引擎支持介绍和示例代码二、SAPI5引擎适用场景介绍和示例代码三、nsss引擎适用场景介绍和示例代码四、eSpeak适用场景介绍和示例代码五、归纳总结 系列短博文目…

PPT怎么输出PDF(不留白)

1、首先选中所有元素&#xff0c;右键点击“组合”形成一个对象。然后查看该对象的高度和宽度。 2、在设计->自定义->幻灯片大小中-->选择“自定义”&#xff0c;然后修改高度和宽度稍稍大于选中对象的值。点击“最大化”。 3、输出为PDF即可

【Java EE初阶十七】网络原理(二)

2. 传输层 2.2 TCP协议 2.2.2 关于可靠传输 4.滑动窗口 前面的三个机制&#xff0c;都是在保证 tcp 的可靠性&#xff1b; TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了)&#xff1b; 滑动窗口,就让可靠传输对性能的影响,更…

sora的理解

1、背景 近期, openai紧跟Runway、 Google、Meta等公司, 发布了视频生成模型Sora, 全面进军视频领域。官网的视频效果炸裂&#xff0c;连贯性优秀&#xff0c;生成视频时长可达60秒&#xff0c;但模拟复杂物理场景仍有瑕疵。相对Pika、Runway的效果还是有进一步提升。考虑到这…

哪种台灯的灯光适合学生用?明基/书客/松下等护眼台灯推荐

目前近视人群越来越多&#xff0c;并且有低龄化的倾向。针对护眼这一卖点&#xff0c;市面上出现了很多护眼台灯品牌&#xff0c;但是很多不知名的网红品牌生产出来的产品质量没有办法得到保障。在挑选护眼台灯时&#xff0c;还是要先做好攻略才不会踩雷。 一、使用护眼台灯更…

基于Java SSM框架实现留学生交流互动论坛网站项目【项目源码+论文说明】计算机毕业设计

摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

量化交易开发之循环、多股策略语法(六)

量化交易开发之循环、多股策略语法&#xff08;六&#xff09; 一、用list数据类型存储多个股票 以如下这个简单的策略为例&#xff0c;学习在策略中操作多个股票&#xff1a; def initialize(context):run_daily(period, timeevery_bar)g.security 000001.XSHEdef period(c…

java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvetdaobean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…

聚道云软件连接器助力生产制作行业实现数字化升级

在数字经济时代&#xff0c;生产制造行业迫切需要进行数字化转型&#xff0c;通过数字化技术手段打通各系统之间的数据壁垒&#xff0c;实现生产全流程数字化管理&#xff0c;提高企业的整体运营效率&#xff0c;进一步增强企业竞争力。聚道云为此推出了生产制造行业的集成管理…

哎呀,当时怎么没有想到 | 京东云技术团队

在我们的测试工作中&#xff0c;是不是经常遇到这样的情形&#xff0c;发生了线上问题&#xff0c;产品、研发或者测试同学一拍脑袋&#xff1a;当时怎么没有想到&#xff0c;怎么给漏掉了呢&#xff1f;明明是一个非常简单的事情&#xff0c;用大拇指都能想到的验证场景&#…

Linux-ls命令

目录 ls&#xff1a;查看目录下文件/文件夹 ls -l&#xff1a;列表显示文件 ls -a&#xff1a;显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la&#xff1a;以列表形式显示所有文件包括隐藏文件 ls -lt&#xff1a;按时间倒序查看文件 ls -R&#xff1a;递归方式…
最新文章