当前位置: 首页 > 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. 关闭窗口 关闭当前窗口 关闭所…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...