当前位置: 首页 > news >正文

JAVA篇之类和对象

目录

一. 面向对象

1.1 面向对象和面向过程

二. 类的定义和使用

2.1 什么是类

2.2 类的定义格式

 三. 类的实例化

四. this引用 

4.1 this引用的作用

 五. 构造方法

5.1 构造方法重载

5.2 通过this调用其他构造方法

 5.3 默认初始化

结语


一. 面向对象

Java 是一门面向对象的编程语言 (Object Oriented Program ,简称OOP),面向对象编程的核心思想是将数据(属性)和操作数据的方法封装成一个整体,即对象。对象之间通过信息传递来相互协作,从而实现特定的功能。

1.1 面向对象和面向过程

面向过程注重解决问题的步骤和操作,面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

举例说明:将大象装进冰箱

(1) 面向过程

第一步:打开冰箱

第二步:将大象塞进冰箱

第三步:关上冰箱

那么以上三个步骤就是就是把大象塞进冰箱的过程,我们注重这一件事的过程,那么这种解决问题的方法我们就叫做面向过程。

(2) 面向对象

那么此时只有人、大象、冰箱三个对象,将大象装进冰箱的整个过程是:人、大象、冰箱三个对象之间交互完成的,我们不需要关心大象是如何被装进冰箱的,那么这种不关注过程,通过对象之间的交互完成的解决问题的方式我们叫做面向对象。

注意面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

二. 类的定义和使用

什么是类呢?我们一起来简单认识一下

2.1 什么是类

类就是用来对一个对象进行描述的,主要描述该对象有哪些属性,哪些功能等

例如:学生

属性:年龄、姓名、性别......

行为:上学、吃饭、考试......

 那么我们知道了类的作用,那么该如何定义类呢?

2.2 类的定义格式

在JAVA中定义类的时候需要用到class关键字,语法格式如下:

class ClassName {    //ClassName表示类的名称

        field;       //表示成员变量(属性)

        method;      //表示行为或者成员方法
}

 那么我们来创建一个上述提到的学生类:

public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println("正在吃饭......");}public void exam(){System.out.println("正在考试......");}}

那么一个简单的学生类就创建好了,里面描述了学生的属性和行为。

定义类的注意事项:

1. 类型采用大驼峰定义

2.成员前写法统一为public ,后面会介绍其他的访问修饰限定符

 三. 类的实例化

通过上述描述我们知道 类 只是用来对一个实体进行描述的,通过实例化才能够创造出对象,那么在JAVA中我们该如何实例化出一个对象呢?这时候就要用到new这个关键字来进行实例化

以上述的学生类示范:

​
​
public class Student {public String name;//学生姓名public int age ;//学生年龄public int score ;//学生成绩public void eat(){System.out.println(name+"正在吃饭......");}public void exam(){System.out.println(name+"正在考试......");}public static void main(String[] args) {Student student1=new Student();student1.name="张三";student1.age=10;student1.score=99;student1.eat();student1.exam();}
}​​

 类实例化的注意事项:

1. new 关键字用于创建一个对象的实例 .
2. 使用 . 来访问对象中的属性和方法 .
3. 同一个类可以创建多个实例对象

四. this引用 

接下来我们看看这个日期类的代码和运行结果,让我们带着问题来探索this的用法。

​
​
public class Day {public int year;public int month;public int day;public void setDay(int year, int month, int day){year = year;month = month;day = day;}public void printDay(){System.out.println(year + "/" + month + "/" + day);}public static void main(String[] args) {Day d1 = new Day();Day d2 = new Day();Day d3 = new Day();d1.setDay(2020,9,15);d2.setDay(2020,9,16);d3.setDay(2020,9,17);d1.printDay();d2.printDay();d3.printDay();}
}​​

 通过运行结果可以看见,我们明明利用setDay方法d1、d2、d3都进行的赋值,那么打印出来的结果为什么还是0/0/0呢?

第一个问题:形参名与成员变量名相同时,形参究竟是给成员变量赋值呢还是形参自己对自己赋值呢?

第二个问题:此时我们的d1、d2、d3都在调用printDay方法,该方法是如何知道打印的是哪个对象的数据呢?

那么带着这两个问题,我们一起来探索一下this的用法。

4.1 this引用的作用

this 引用指向当前对象 ( 成员方法运行时调用该成员方法的对象),那么我们来看一下this是怎么解决上述问题的:
问题一:
public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}

通过运行结果可以看见此时的结果是正确的,这是因为之前的代码中没有加上this引用,那时的赋值操作是 形参自己对自己进行赋值,成员变量的值还是默认值。而此时我们加上了this引用,那么此时带this引用的year、month、day就是当前类的成员变量, 此时的赋值操作就是形参对成员变量进行赋值。
问题二:
public void printDay(){System.out.println(this.year + "/" + this.month + "/" + this.day);}

 printDay方法通过this引用就能够知道打印的是当前对象的数据。

 总结:
        1. 当形参名和成员变量名字相同时,通过this引用表示该变量是当前类的成员变量

        2. this是成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。

 五. 构造方法

构造方法是一个特殊的成员方法,方法名必须与类名相同,构造方法可以直接给成员变量进行初始化

public class Day {public int year;public int month;public int day;public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day(2024,10,10);d1.printDay();}
}

 注意事项:

1. 名字必须与类名相同
2. 没有返回值类型,设置为 void 也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
4. 如果不写构造方法,编译器会主动添加一个不带参数的构造方法
public class Day {public int year;public int month;public int day;public Day(){......}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}

 那么如果我们自己写了一个构造方法,那么编译器就不会自动生成构造方法,正所谓救急不救穷。

5.1 构造方法重载

我们可以定义多个不同参数的构造方法,这样就实现了构造方法的重载,方便用于多种情况

public class Day {public int year;public int month;public int day;public Day(){}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}
}

5.2 通过this调用其他构造方法

. 构造方法中,可以通过 this 调用其他构造方法来简化代码
public class Day {public int year;public int month;public int day;public Day(){this(2020,10,31);}public Day(int year,int month,int day){this.year=year;this.month=month;this.day=day;}public void printDay(){System.out.println(year + "/" + month + "/" +day);}public static void main(String[] args) {Day d1=new Day();d1.printDay();}
}

注意事项:

1. this(...)必须是构造方法中第一条语句

2. 构造方法之间不能互相调用形成环

 5.3 默认初始化

在使用局部变量之前是必须进行初始化的,否则会进行报错。但是使用成员变量时,可以不进行初始化,当我们实例化一个对象后,对象空间被申请好之后,对象中包含的成员其实已经设置好了初始值。

结语

以上就是部分类和对象的内容,希望大家看完本篇后能够理解类和对象的概念,在此小新感谢大家的观看!!!

 

相关文章:

JAVA篇之类和对象

目录 一. 面向对象 1.1 面向对象和面向过程 二. 类的定义和使用 2.1 什么是类 2.2 类的定义格式 三. 类的实例化 四. this引用 4.1 this引用的作用 五. 构造方法 5.1 构造方法重载 5.2 通过this调用其他构造方法 5.3 默认初始化 结语 一. 面向对象 Java 是一门面向对…...

IO流详解_CoderLix

主要内容 File类IO流字节流字符流异常处理Properties缓冲流转换流序列化流打印流 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) :通过…...

241023-RHEL非管理员安装Docker并开放指定宿主机端口部署Gitlab

A. RHEL非管理员安装Docker 要在没有管理员权限的情况下离线安装 Docker 和 Docker Compose,虽然受到一定限制,仍有一些可行的步骤可以帮助你在有限权限下完成这项任务。需要注意的是,这种方式适用于本地用户环境下的 Docker 安装&#xff0…...

python ubuntu安装加速

ubuntu升级python到python3.11(可能是全网最靠谱的方法,亲测有效)_ubuntu python3.11-CSDN博客 python-release安装包下载_开源镜像站-阿里云...

100种算法【Python版】第12篇——快速幂算法

本文目录 1 基本原理2 基本步骤3 数学示例4 python代码1 基本原理 快速幂算法(Fast Exponentiation)是一种高效计算整数幂的方法,尤其适用于计算大数的幂。其主要思想是利用分治法和二进制表示来减少乘法运算的次数,从而加快计算速度。 计算 x n x^n x...

Java多线程详解②(全程干货!!!)Thread Runnable

这里是Themberfue 上节主要讲完了多线程的一些基础知识,这节通过代码进一步理解多线程🫡 多线程 Java标准库中提供了Thread类,以程序员们编写多线程代码,我们可以查看官方文档进一步了解Thread的特性以及提供的接口。 类似于Sy…...

机器学习——图神经网络

图神经网络(GNN):理解复杂网络数据的有效工具 图神经网络(Graph Neural Network, GNN)是近年来机器学习领域的热门话题。GNN 以图结构数据为核心,能够高效地捕捉节点和边的复杂关系,广泛应用于社交网络、推荐系统、生…...

一、在cubemx下RTC配置调试实例测试

一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时,注意将时间信息存储起来,防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过,没有则进…...

【Nas】X-DOC:Mac mini Docker部署中国特供版Jellyfin

【Nas】X-DOC:Mac mini Docker部署中国特供版Jellyfin 1、拉取镜像:2、启动镜像3、访问服务4、参考文档 Mac mini Docker部署中国特供版Jellyfin 1、拉取镜像: docker pull nyanmisaka/jellyfin:230901-amd64jellyfin 10.8.10版本&#xff…...

合合信息:生成式Al时代的内容安全与系统构建加速,开启智能文档的全新潜能

文章目录 写在前面图像内容安全图像篡改应用场景伪造文档/证照检测伪造人脸检测 GAI时代系统构建加速通用文档解析 合合信息 写在前面 随着人工智能技术的飞速发展,生成式AI已经悄然步入了我们的日常生活,以其强大的内容生成能力,重塑了信息…...

京东双十一高并发场景下的分布式锁性能优化

背景 在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。分布式锁作为一种有效的解决方案,能够在多…...

华为ICT题库-AI 人工智能部分

1178、以下哪个选项是华为的云端AI芯片?(云服务考点) (A)Inferentia (B)MLU100 (C)Cloud TPU (D)Ascend 910 答案:D 解析:华为的云端AI芯片被称为Ascend芯片系列,其中Ascend 910是其旗舰产品。Ascend 910…...

React Native 修改安卓应用图片和名称

在React Native(RN)项目中,修改安卓应用图标和名称通常涉及对Android原生代码的一些修改。以下是详细步骤: 修改应用图标 准备图标资源: 创建或获取你想要的图标,并确保它们符合Android的图标规范&#xf…...

普推知产:商标初审已下,商标申请通过如何高些!

近期下来一批商标注册的初步审公告通知书,一些客户对商标下证要求比较高的,普推知产商标老杨发现,要像下证高核心还是在于名称,名称起好备用的多,让商标专业人士经检索后层层过滤后提报,通过会好很多。 普推…...

HICP--2

在area 0的路由器只生成 area 0 的数据库,只在area 1 的一样。但是既在又在的生成两个 area的 LSDB 一、区域间三类LSA 在OSPF(Open Shortest Path First)协议中,区域间三类LSA(Link-State Advertisement&#xff09…...

sheng的学习笔记-AI基础-正确率/召回率/F1指标/ROC曲线

AI目录:sheng的学习笔记-AI目录-CSDN博客 分类准确度问题 假设有一个癌症预测系统,输入体检信息,可以判断是否有癌症。如果癌症产生的概率只有0.1%,那么系统预测所有人都是健康,即可达到99.9%的准确率。 但显然这样的…...

Linux -- 共享内存(2)

目录 命令 ipcs -m : 命令 ipcrm -m shmid: 共享内存的通信: 为什么共享内存更高效? 代码: ShmClient.cc: ShmServer.cc: 结果: 如何让共享内存实现同步? 代码&a…...

云函数实现发送邮件,以qq邮箱为例

云函数实现发送邮件,前端传参调用发送邮件即可。以qq邮箱为例。 1、开启qq邮箱的smtp服务并且生成授权码,操作界面如下图: 2、在腾讯云新建一个云函数代码如下: const nodemailer require("nodemailer");// 云函数入口函数 export…...

Kafka如何控制消费的位置?

大家好,我是锋哥。今天分享关于【Kafka如何控制消费的位置?】面试题?希望对大家有帮助; Kafka如何控制消费的位置? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中,控制消费位置主要通过以下几个机制来实…...

python爬虫——Selenium的基本使用

目录 一、Selenium的介绍 二、环境准备 1.安装Selenium 2.安装WebDriver 三、元素定位 1.常用定位元素的方法 2. 通过指定方式定位元素 四、窗口操作 1.最大化浏览器窗口 2.设置浏览器窗口大小 3.切换窗口或标签页 切换回主窗口 4. 关闭窗口 关闭当前窗口 关闭所…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...