JAVASE之类和对象(1)

路虽远,行则将至;事虽难,做则必成。

主页:趋早——Step
专栏:JAVASE
gitte:https://gitee.com/good-thg

在这里插入图片描述
引言:
这篇文章我们只介绍前半部分,下一篇文章会介绍剩下的部分。

一、面向对象

1、什么是面向对象

面向对象是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的状态和行为。在面向对象的编程中,程序通过定义对象的属性和方法来描述问题的解决方案。对象可以通过与其他对象进行交互来实现特定的功能。面向对象的编程主要包括封装、继承和多态三个特性,通过这些特性可以使程序更加模块化、可维护和可复用。
我们学习的Java是一门纯面向对象的语言,在面向对象的世界里,一切皆为对象,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来设计程序,更符合人们对事物的认知,对于大型程序的设计、扩展及维护都非常友好。

2、面向对象与面向过程

我们都知道曹操称象的故事吧!我们分别用面向对象和面向过程来讲述一下这个过程:
(1)面向过程:我们要准备一艘可以装的下大象的船,接着我们将大象赶到船上,然后乘坐另一艘小船,在水位处划一条线,再把大象从船上赶下来,我们继续在同一条船上搬石头,一块,两块…,直到船的水位下降到到我们之前划的线上,然后我们准备一个称,将船上的石头卸下来分批放到称上,并且记录每一批石头的重量,最后将所有数据全部相加,这时候就可以计算出大象的重量了。
(2)面向对象:把大象赶到船上(…),在船上放上石头(…),在称上放石头(…),得到大象重量。
通过这个故事,我们知道了面向过程是把事情分成一步一步的,然后按照步骤一步一步的做出来,而面向对象是给对象相应的方法,最后得出结果。以面向对象的方式来处理,就不用关心过程了,是通过对象之间的交互来完成的。

二、类定义和使用

1、认识类

类是用来对一个实体进行描述的,主要关注该实体具有哪些属性,哪些功能,描述完成以后计算机就可以识别出结果了。

2、类的定义格式

在这里插入图片描述

注意事项:
1、类名采用大驼峰定义;
2、成员前写法统一为public。

3、定义一个学生类

public class Student {// 成员变量public String name;public int age;// 成员方法public void Exam(){}
}

三、类的实例化

1、什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是Java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上面定义的Student类。有了这些自定义类型之后,就可以使用这些类来定义实例。
用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。

class Student {public String name;public int age;public void Exam(){System.out.println("考试......");}
}
public class Test {public static void main(String[] args) {// 通过 new 实例化对象Student student = new Student();student.name = "Tom";student.age = 12;}
}

注意事项:

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

2、类和对象的说明

(1)类只是一个模型一样的东西,用来对一个实体进行描述,限定了有哪些成员;
(2)类是一种自定义的类型,可以用来定义变量;
(3)一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。

四、this引用

1、为什么要有this引用

在这里,我们定义一个Date类来进行演示:

public class Date {public int year;public int month;public int day;// 设置日期public void setDate(int y, int m, int d){year = y;month = m;day = d;}// 打印日期public void printDate(){System.out.println(year + "年" + month + "月" + day + "日");}}

这个时候,我们该如何打印他们呢?看下面代码:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
但是,如果我们不想这样一个一个进行赋值,而是一次性的赋值,该怎么办呢?
我们在上面的代码中,已经定义了setDate,所以,我们可以调用setDate来进行赋值。代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
通过以上的两种方法,就可以进行赋值和打印了,然而,这跟this引用有什么关系呢?我们继续往下学习。
我们想想,现在我们的setDate是这样的:
在这里插入图片描述
假如说,我们把setDate改成下面这样:
在这里插入图片描述
在这个时候,到底是谁给谁赋值,到底设置的是哪个对象呢?
我们运行代码试试:
在这里插入图片描述
这是什么原因呢?
这是因为局部变量优先,是形参自己改自己赋值了,没有赋值到成员变量当中。
在这个时候,我们的this就派上用处了,他可以让他赋值到成员变量当中。我们看下一部分:

2、什么是this引用

我们将this加入到我们的setDate中:
在这里插入图片描述
我们将main方法中写成这样:
在这里插入图片描述
代码运行结果如下:
在这里插入图片描述
这个时候,我们有问题了:成员函数执行的时候,他是怎么知到打印的是哪个对象,设置的是哪个对象?
这就是this的作用,我们认为:

this引用指向当前对象

通俗来讲,谁调用setDate,谁就是当前对象。
这时候,我们就可以知道什么是this引用了

this引用指向当前对象,在成员方法中所有成员变量的操作,都是通过该引用去访问。

3、this引用的特性

(1)this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型;

(2)this只能在“成员方法”中使用;

(3)在“成员方法”中,this只能引用当前对象,不能引用其他对象;

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

接下来,我们把完整代码展示出来:

public class Date {public int year;public int month;public int day;// 设置日期public void setDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}// 打印日期public void printDate() {System.out.println(this.year + "年" + this.month + "月" + this.day + "日");}public static void main(String[] args) {Date date = new Date();// 赋值date.setDate(2024, 5, 24);// 打印date.printDate();Date date1 = new Date();date1.setDate(2023, 5, 24);date1.printDate();}}

五、对象的构造和初始化

1、如何初始化对象

我们来看下面这个代码:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
这是因为没有初始化报错,但是我们来看下面的代码:
在这里插入图片描述
运行一下:
在这里插入图片描述我们发现,每次对象创建好之后,要调用setStudent才能设置具体姓名和年龄,这是很麻烦的,但是我们到底该如何初始化呢?我们继续学习:

2、默认初始化

我们同样来看下面的代码:
在这里插入图片描述
在这个代码中,我们初始化了吗?没有,但是他会报错吗?我们看运行结果:
在这里插入图片描述
没有,这是为什么呢?
哇,好多为什么,那就让我们继续回答这一个一个的问题吧!
在这里,就是因为发生了默认初始化,所以才不会报错。我们看到的只是程序层面简单的一条语句,但是,在JVM层面就需要做好多事情,下面简单介绍:
(1)检测对象对应的类是否加载了,如果没有加载则加载;
(2)为对象分配内存空间;
(3)处理并发问题;
(4)初始化所分配的空间
就是对象空间被申请好之后,对象中包含的成员已经设置好了初始值,比如:

在这里插入图片描述

在这里,我们暂时知道这是默认初始化就好,至于为什么,我们可以后期学习。

3、就地初始化

就地初始化就是在声明成员变量时,就直接给出了初始值。
我们看代码:
在这里插入图片描述
这样运行会是什么结果呢?我们运行试试:
在这里插入图片描述
这就是我们的就地初始化,需要注意的是:代码编译完成后,编译器会将所有给初始化的这些语句添加到各个构造函数中。

4、构造方法

在我们学习了以上两种初始化方法,我们再来学习另一种初始化方法,叫做构造方法。

(1)概念

构造方法(也称构造器)是一个特殊的成员方法,这个方法没有返回值,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的声明周期内只调用一次。
在这里插入图片描述

现在问题来了,我们该怎么调用该构造方法呢?我们看下面的代码并且运行:
在这里插入图片描述

运行结果如下:
在这里插入图片描述
这是什么原因呢?我们将main方法改成如下这样:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
我们再来调用带两个参数的构造方法:
将main方法写为这样:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
所以我们认为:当构造方法调用完成之后,对象实际上才产生了。
其实我们还需要知道,当没有提供任何构造方法的时候,编译器会默认提供一个不带参数的构造方法,但是当我们有构造方法提供的时候,编译器就不会提供了。

(2)特性

<1> 名字必须与类名相同
<2> 没有返回值类型,设置为void也不行
<3> 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
<4> 构造方法可以重载
<5> 如果用户没有显示定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
<6> 在构造方法中,可以通过this调用其他构造方法来简化代码。

在这里插入图片描述
运行结构如下:
在这里插入图片描述
我们还要注意一点,this不能形成环。看下面代码:
在这里插入图片描述

<7> 绝大多数情况下使用public来修饰,特殊场景下会被private修饰。

好的,JAVASE第一部分到此就结束了,让我们期待下一篇吧!

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

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

相关文章

Python操作MySQL数据库的工具--sqlalchemy

文章目录 一、pymysql和sqlalchemy的区别二、sqlalchemy的详细使用1.安装库2.核心思想3.整体思路4.sqlalchemy需要连接数据库5.使用步骤1.手动提前创建数据库2.使用代码创建数据表3.用代码操作数据表3.1 增加数据3.2 查询数据3.3 删除数据3.4 修改数据 一、pymysql和sqlalchemy…

2025秋招深度学习基础面试题(一)

01. 卷积和BN如何融合提升推理速度 Conv和BN的融合:在网络的推理阶段,可以将BN层的运算融合到Conv层中,减少运算量,加速推理。本质上是修改了卷积核的参数,在不增加Conv层计算量的同时,略去了BN层的计算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

探索Facebook:数字社交的新时代

Facebook&#xff0c;作为全球最大的社交网络平台之一&#xff0c;一直在引领着数字社交的发展潮流。随着科技的不断进步和社会的不断变迁&#xff0c;Facebook也在不断演进和创新&#xff0c;迎接着数字社交的新时代。本文将探索Facebook在数字社交领域的新发展&#xff0c;以…

Behind the Code:Polkadot 如何重塑 Web3 未来

2024 年 5 月 17 日 Polkadot 生态 Behind the Code 第二季第一集 《创造 Web3 的未来》正式上线。第一集深入探讨了 Polkadot 和 Web3 技术在解决数字身份、数据所有权和去中心化治理方面的巨大潜力。 &#x1f50d; 查看完整视频&#xff1a; https://youtu.be/_gP-M5nUidc?…

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具 抖音视频去水印保存部分源码&#xff1a; 通过使用Python中的requests、re和os等库&#xff0c;可以编写如下代码来实现抖音视频去水印保存的功能。 短视频爬虫提取手机下载工具的使用方法&#xff1a; 该工具主…

安科瑞为河南省促进分布式光伏发电健康持续发展提供解决方案

1 光伏、储能运维市场分析 在光伏、储能行业飞速发展的同时&#xff0c;已建的光伏、风力发电站和储能系统的监控、运维管理项目的招标也非常多&#xff0c;2023年上半年&#xff0c;光伏电站开发企业运维招标规模28.6GW&#xff0c;同比增长204.3%&#xff0c;上述28.6GW招标…

Blender导出fbx模型,导入到ue5中模型丢失纹理材质

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、最终效果 前言 Blender导出fbx模型&#xff0c;导入到ue5中&#xff0c;发现模型丢失纹理材质&#xff0c;里面的原神人物模型妮露居然是白模&#xff0c;郁闷了大半天 一、问题原因 我在Blender导出fbx文件时…

C中十进制转十六进制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通过以下…

嵌入式科普(18)Ubuntu在移动硬盘的安装和启动

目录 一、概述 二、应用场景 三、移动硬盘安装Ubuntu 3.1 移动硬盘格式化 3.2 VMware安装Ubuntu到移动硬盘 四、电脑BIOS启动移动硬盘Ubuntu 五、从VMware启动移动硬盘Ubuntu 六、问题解决(坑)和思考提问 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动 一、概述 在移动硬…

在R中赞扬下努力工作的你,奖励一份CheetShet

传说有个R&#xff0c;R里有个包&#xff0c;包的名字叫praise&#xff0c;会一直不停地夸赞你。 > praise() [1] "You are sensational!" > praise() [1] "You are luminous!" > praise() [1] "You are pioneering!" > praise() […

P1【知识点】【数据结构】【链表LinkedList】C++版

链表是一种逻辑上连续&#xff0c;内存上分散的线性表数据结构&#xff0c;是用一组任意的空间&#xff08;可以连续&#xff0c;也可以不连续&#xff09;来存放数据元素。每个数据元素成为一个”结点“&#xff0c;每个结点由数据域和指针域组成。 访问元素&#xff08;Acce…

ABAP Json解析案例

ABAP解析返回的JSON 案例 DATA:LTOKEN TYPE STRING.DATA: LL_LINES(10),"行数LL_TABIX(10),"循环标号LL_PECNT TYPE P LENGTH 6 DECIMALS 2, "百分比LL_PECET(6),"百分数LL_TEXT(40)."消息CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.* …

JVM优化之使用Jstack命令查找JVM死锁

JVM优化之使用Jstack命令查找JVM死锁 示例代码 public class DeadLockDemo {private static Object lock1 new Object();private static Object lock2 new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lock1) {try {System.out.p…

老的 IIS + MSSQL 网站迁移实例

因为公司需要从云上迁移回本地&#xff0c;但云平台不愿意导出虚拟机文件&#xff0c;所以公司需要手工迁移。 查看了一下云主机&#xff0c;安装了IIS&#xff0c;还有MSSQL数据库&#xff0c;于是在本地搭建好相同的OSIISMSSQL 环境&#xff0c;在把数据库导入完成、 IIS 搭建…

HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池芯片IC

一般描述 该HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池。HX6203为快速充电锂离子电池提供了一种小巧、简单、高效的解决方案。一个外部检测电阻以高精度设置充电电流。 内部电阻分压器和精密参考设置的最终浮动电压为8.4V时&#xff0c;输入…

全面提升工业物联网的安全问题——青创智通

工业物联网解决方案-工业IOT-青创智通 工业物联网&#xff0c;作为现代工业制造领域的新兴技术&#xff0c;正在引领一场全新的工业革命。它将传感器、控制器、移动通信、智能分析等先进技术融入到工业生产过程的各个环节&#xff0c;极大地提高了制造效率&#xff0c;改善了产…

什么是谷歌留痕?

其实它就是指你的网站在谷歌中留下的种种痕迹&#xff0c;无论你是在做外链&#xff0c;还是优化网站内容&#xff0c;或是改善用户体验&#xff0c;所有这些都会在谷歌的搜索引擎里留下一些“脚印”&#xff0c;用比较seo一点的说法&#xff0c;指的是网站在其构建和优化过程中…

el-table 划入划出方法

<template><div><el-table :data"tableData" style"width: 100%" cell-mouse-enter"handleMouseEnter" cell-mouse-leave"handleMouseLeave"><el-table-column prop"ddd" label"日期2" widt…

数据分析案例——电商平台数据集

数据来源于阿里云天池&#xff0c;为淘宝app平台在2014年11月18日-12月18日的数据。 数据处理 导入相关的包&#xff0c;设置seaborn的绘图风格&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set()使用o…

Little Snitch for Mac(小飞贼防火墙软件)v5.7.6注册激活版

Little Snitch for Mac&#xff0c;也被称为“小飞贼”防火墙软件&#xff0c;是一款专为Mac用户设计的网络安全工具。以下是关于Little Snitch for Mac的一些主要特点&#xff1a; Little Snitch for Mac(小飞贼防火墙软件)v5.7.6注册激活版下载 强大的监控能力&#xff1a;Li…