JAVA篇之类和对象
目录
一. 面向对象
1.1 面向对象和面向过程
二. 类的定义和使用
2.1 什么是类
2.2 类的定义格式
三. 类的实例化
四. this引用
4.1 this引用的作用
五. 构造方法
5.1 构造方法重载
5.2 通过this调用其他构造方法
5.3 默认初始化
结语
一. 面向对象
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引用的作用
public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = 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调用其他构造方法
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 安装࿰…...
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版本ÿ…...
合合信息:生成式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的图标规范…...
普推知产:商标初审已下,商标申请通过如何高些!
近期下来一批商标注册的初步审公告通知书,一些客户对商标下证要求比较高的,普推知产商标老杨发现,要像下证高核心还是在于名称,名称起好备用的多,让商标专业人士经检索后层层过滤后提报,通过会好很多。 普推…...
HICP--2
在area 0的路由器只生成 area 0 的数据库,只在area 1 的一样。但是既在又在的生成两个 area的 LSDB 一、区域间三类LSA 在OSPF(Open Shortest Path First)协议中,区域间三类LSA(Link-State Advertisement)…...
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. 关闭窗口 关闭当前窗口 关闭所…...
【Linux】【xmake】安装 + C/C++常用项目配置
文章目录 0. 环境准备1. 子命令create - 快速创建项目build - 构建程序config - 配置编译需要的参数show - 查看当前工程基本信息update - 程序自更新 2. C/C 项目常用配置2.1 项目目标类型2.2 添加宏定义2.3 头文件路径和链接库配置2.4 设置语言标准2.5 设置编译优化2.6 添加源…...
Android 添加菜单开关控制Camera相机和第三方相机
本文主要通过SystemProperties系统属性和Settings.System存储数据库的状态进行判断,从而实现控制相机 /vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml <!--camera--> <string name="manager_camera_switch"&…...
【Java知识】使用jacoco实现代码覆盖率测试
文章目录 1. 添加JaCoCo插件到项目2. 配置Maven Surefire Plugin3. 执行测试并生成报告4. 查看覆盖率报告注意事项 要使用JaCoCo实现代码覆盖率测试,你需要遵循以下步骤: 1. 添加JaCoCo插件到项目 在Maven项目的pom.xml文件中添加JaCoCo插件。这允许你执…...
道路车辆功能安全 ISO 26262标准(9-2)—面向汽车安全完整性等级 (ASIL) 和安全的分析
写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识,希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 9. ISO 26262-9 面向汽车安全完整…...
hutool常用方法
1、树结构工具-TreeUtil 构建Tree示例 package com.sl.transport.common.util;import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core…...
CloudSat数据产品数据下载与处理 (matlab)
CloudSat数据下载 这个数据我之前和CALIPSO弄混了,后来发现它们虽然是同一个火箭上去,但是数据产品却在不同的平台下,CloudSat的数据更加关注云的特性,包括云覆盖、云水当量、云分类数据。 数据网址在:CloudSat网址 …...
LDR6500 一拖三快充线的定义与特点
定义:LDR6500 一拖三快充线是一种具有 Type-C 接口的充电线,它的最大特点是可以同时连接三个设备进行快速充电。 特点: 高效充电:采用先进的快充技术,能够快速为设备充电,大大缩短充电时间。同时…...
Elasticsearch安装使用
ES 概述 Elasticsearch,简称为 ES,是一款非常强大的开源的高扩展的分布式全文检索引擎,可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elast…...
计算机网络的主要知识点小结
计算机网络是指将多台计算机通过通信线路连接起来,实现资源共享和信息传递的系统。 一、计算机网络概述 1. 定义和功能 - 定义:计算机网络是将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操…...
fastjson/jackson对getter,setter和constructor的区分
在复现完fastjson1.2.24-1.2.80和jackson的所有相关漏洞后,总结的一些规则 以下均指对json的反序列化过程 setter fastjson调用setter:遍历所有方法,找出所有满足setter要求的方法,再根据传入的json去反射调用 jackson调用set…...
找公司做网站注意什么/百度竞价恶意点击软件
C语言中32位二进制数相乘后得数长度为64位。...
网页游戏网站斗地主/百度直播平台
题目来源:http://www.bianchengla.com/problem/1000 题目如下: 描述 计算 ab. 输入 本题有多组测试数据。第一行为测试数据的个数。每组数据有两个整数。范围在 -231 ~ 231-1 之内。 输出 对每组数据,输出对应的ab的和。范围在 -231 ~ 231-1 …...
lamp网站开发项目文档/中国推广网站
目前中国产业园区数量较多,同质化问题严重,相互之间竞争激烈。随着大数据时代的到来,大数据和社会经济的深度融合,产业园区将向智慧产业园区发展。 智慧园区是园区引入物联网、大数据、云计算等新技术进行全面数字化的基础之上&a…...
平台网站开发公司/中国搜索引擎排名2021
我想知道如何区分具有相同名称的静态和非静态方法引用.在我的例子中,我有一个名为StringCollector的类,它有以下三种方法:StringCollector append(String string)static StringCollector append(StringCollector stringCollector,String string)StringCollector con…...
做网站字体要求/网站推广计划
01 代码下载 和 chromium 配置完全一致,只是 fetch 参数指定为 webrtc 本次编译采用 4664 分支(版本号96) fetch --no-history webrtc cd src #git checkout -b b4664 remotes/branch-heads/4664 # 4664 可以编译过,没跑起来 git checkout -b b4515 re…...
一个网站做局打水/bt种子搜索
一、MeanAbsoluteError类 tf.keras.losses.MeanAbsoluteError(reduction=losses_utils.ReductionV2.AUTO, name=mean_absolute_error )下面举几个例子 mae = tf.keras.losses.MeanAbsoluteError()...