Java 类与对象的详细讲解
引言
在Java中,类(Class)和对象(Object)是面向对象编程(OOP)的核心组成部分。通过它们,我们可以创建复杂的数据结构,并实现代码的重用性和可维护性。本文将深入探讨Java中的类与对象,包括其定义、属性、方法、构造函数、访问控制以及如何使用这些元素来构建程序。
1. 类(Class)
1.1 定义
- 类 是一种用户自定义的数据类型,它描述了一组具有相同属性和行为的对象。类就像是一个模板或蓝图,用来生成具体实例——即对象。
- 在Java中,所有类都是
Object
类的子类,这使得所有的对象都继承了Object
类的一些基本功能。
1.2 声明类
// 简单的类声明
class ClassName {// 数据成员(字段)type field1;type field2;// 构造器(Constructor),用于初始化对象public ClassName(parameters) {// 初始化代码}// 成员方法(Methods),定义行为return_type methodName(parameters) {// 方法体}
}
1.3 类的构成
- 字段(Fields):也称为属性,代表类的状态。可以是私有的(private)、保护的(protected)、默认的(package-private)或公共的(public)。通常,我们更倾向于将字段设置为私有,以确保封装性。
- 构造器(Constructors):用于初始化新创建的对象。每个类都可以有一个或多个构造器,它们的名字必须与类名相同,且没有返回值类型。如果类中没有显式地定义任何构造器,Java会自动提供一个无参的默认构造器。
- 方法(Methods):表示类的行为。可以是实例方法(操作特定对象的数据)或静态方法(与类本身相关联)。方法可以接受参数并可能返回结果。
1.4 访问修饰符
Java提供了四种访问级别来控制类成员的可见性:
访问修饰符 | 同一包内 | 子类 | 其他包 |
| √ | √ | √ |
| √ | √ | × |
默认(无修饰符) | √ | × | × |
| × | × | × |
2. 对象(Object)
2.1 定义
- 对象 是类的具体实例。它是根据类的定义创建的实际实体,拥有自己的状态(由类的字段决定)和行为(由类的方法实现)。
2.2 创建对象
要创建一个对象,你需要做两件事:
- 声明引用变量:这是指向对象的指针,但此时并没有实际分配内存。
- 使用
new
关键字:为对象分配内存空间,并调用构造器进行初始化。
ClassName objectReference = new ClassName(parameters);
2.3 使用对象
一旦创建了对象,就可以通过引用变量来访问它的字段和调用方法。对于私有字段,应该使用提供的getter/setter方法来读取或修改值。
3. 示例详解
我们将通过一系列详细的案例来展示如何定义类、创建对象以及管理它们之间的关系。
案例 1:简单的类和对象
// 定义一个名为 Person 的类
class Person {private String name; // 私有字段private int age;// 构造器public Person(String name, int age) {this.name = name;this.age = age;}// Getter 和 Setter 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age > 0 && age < 150) { // 验证年龄合理性this.age = age;} else {System.out.println("无效的年龄!");}}// 行为方法public void sayHello() {System.out.println("你好,我叫 " + name + ",今年 " + age + " 岁。");}
}public class Main {public static void main(String[] args) {// 创建 Person 类的一个对象Person person = new Person("李华", 28);// 调用对象的方法person.sayHello(); // 输出: 你好,我叫 李华,今年 28 岁。// 修改对象的属性person.setAge(29);person.setName("李四");// 再次调用sayHello方法person.sayHello(); // 输出: 你好,我叫 李四,今年 29 岁。}
}
在这个例子中,Person
类包含了两个私有字段 name
和 age
,以及相应的 getter 和 setter 方法。此外,还有一个行为方法 sayHello
。我们在 Main
类中创建了一个 Person
对象,并演示了如何使用这个对象。
案例 2:带静态成员的类
// 定义一个带有静态成员的类
class Counter {private static int count = 0; // 静态字段// 构造器public Counter() {count++;}// 静态方法public static int getCount() {return count;}
}public class Main {public static void main(String[] args) {// 创建多个 Counter 对象Counter c1 = new Counter();Counter c2 = new Counter();// 调用静态方法获取计数System.out.println("Counter 对象的数量:" + Counter.getCount()); // 输出: Counter 对象的数量:2}
}
此案例展示了如何使用静态成员。静态字段和方法属于整个类而不是某个特定的对象实例。因此,无论创建多少个 Counter
对象,count
字段都会共享相同的值,而 getCount
方法可以直接通过类名调用。
案例 3:继承与多态
// 定义基类 Animal
class Animal {public void makeSound() {System.out.println("动物发出声音...");}
}// 定义子类 Dog 继承自 Animal
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("汪!"); // 覆盖父类方法}public void fetch() {System.out.println("捡回东西...");}
}public class Main {public static void main(String[] args) {// 多态性演示Animal myDog = new Dog(); // 父类引用指向子类对象myDog.makeSound(); // 输出: 汪!// 强制类型转换后可以访问子类特有的方法((Dog) myDog).fetch(); // 输出: 捡回东西...}
}
在这个例子中,Dog
类继承了 Animal
类,并覆盖了 makeSound
方法。当我们在 Main
类中使用 Animal
类型的变量 myDog
来引用 Dog
类的对象时,调用 makeSound
方法会执行 Dog
类中的版本,这就是多态性的体现。同时,我们也展示了如何通过强制类型转换来访问子类特有的方法。
4. 总结
类和对象是Java编程语言的基础构件,理解它们的工作原理对于编写高效、灵活的应用程序至关重要。通过合理的设计,我们可以利用类来组织代码,提高代码的可读性和可维护性;而对象则使我们能够模拟现实世界中的实体及其交互方式。希望这篇文章能帮助你更加深入地了解Java中的类与对象概念。
相关文章:
Java 类与对象的详细讲解
引言 在Java中,类(Class)和对象(Object)是面向对象编程(OOP)的核心组成部分。通过它们,我们可以创建复杂的数据结构,并实现代码的重用性和可维护性。本文将深入探讨Java…...
Python爬虫之使用BeautifulSoup进行HTML Document文档的解析
BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库,它为开发者提供了一种简单的方式来查找、遍历和修改文档树。BeautifulSoup 特别擅长处理不规则或格式不佳的标记语言,可以自动更正无效的 HTML,因此在网页抓取(Web Sc…...
vue2 纯前端实现像chatGpt一样的文字流式输出
1、先展示一下效果啦 文字流输出 2、首先确定接口返回的是字符串,那就先调取接口 // 由于需求关系 有很多个文本需要一起逐字输出 所以这里就采用了Promise.all的形式 async getThreeTextarea() {let taskArray [ "重点项目文本","应用领域文本&qu…...
基于PHP课堂签到系统的设计与实现
摘 要 随着教育业的迅速发展和学生人数的不断增加,导致在班级登记制度中传统的“点到”方式不能适应学校的实际需要。从而需要设计一个好的课堂签到系统将会对课堂签到管理工作带来事半功倍的效果。文章着重介绍了基于实践应用的班级签到系统的开发流程,…...
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略
LLMs之APE:基于Claude的Prompt Improver的简介、使用方法、案例应用之详细攻略 目录 Prompt Improver的简介 0、背景痛点 1、优势 2、实现思路 Prompt优化 示例管理 提示词评估 Prompt Improver的使用方法 1、使用方法 Prompt Improver的案例应用 1、Kap…...
51c深度学习~合集9
我自己的原文哦~ https://blog.51cto.com/whaosoft/12750420 #傅里叶特征 (Fourier Feature)与核回归 位置编码背后的理论解释 本文探讨了位置编码背后的理论基础,特别是傅里叶特征(Fourier Feature)与核回归(Kern…...
前端流式播放TTS语音:技术细节与实现
摘要 本文将介绍如何在前端实现流式播放文本到语音(TTS)的语音,并加入确保语音播放不重叠的改进方案。我们将探讨使用Web Audio API和WebSocket进行实时语音播放的技术细节,并提供相应的代码示例。 一、引言 在之前的讨论中&am…...
数据结构面试题整理
1. 简述什么是数据结构? 数据结构就是一种组织和存储数据的方式,使得我们可以高效地访问和修改数据。就像你整理房间一样,不同的物品有不同的收纳方式,数据也有不同的存储和管理方法。 比如,数组就像一个排成一排的抽…...
前端实现浏览器自定义滚动条
前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结ÿ…...
Oracel 统计信息收集
1. 常规的通过PLSQL客户端进行统计信息收集,需要指定用户名和表名 begin dbms_stats.gather_table_stats(ownname > &owner, tabname > &tablename, estimate_percent > DBMS_STATS.AUTO_SAMPLE_SIZE, cascade > TRUE, degree > 4, m…...
openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection
文章目录 openpnp - Too many misdetects - retry and verify fiducial/nozzle tip detection概述笔记环境光最好弱一些在设备标定时,吸嘴上不要装绿色屏蔽片如果吸嘴不在底部相机中间,先检查设置底部相机坐标调整底部相机坐标 吸嘴校验的细节底部相机坐…...
Windows安装WSL子系统及docker,以及WSL和docker配置、使用及问题解决
在Windows操作系统中,Ubuntu子系统(也称为Windows Subsystem for Linux, WSL)为开发者提供了一个在Windows环境下运行Linux环境的平台。然而,有时用户在按照Ubuntu子系统或者使用WSL时,可能会遇到各种问题,下面总结一下解决方式。 想要在Windows上安装Docker(实际上是基…...
光伏电站建设成本利润估算
截至2024年9月底,全国光伏发电装机容量达到7.7亿千瓦,同比增长48.4%。其中集中式光伏4.3亿千瓦,分布式光伏3.4亿千瓦。2024年前三季度,全国光伏发电量6359亿千瓦时,同比增长45.5%。全国光伏发电利用率97.2%,同比下降1.1个百分点.早在今年2月份,中国光伏行业协会名誉理…...
TimesFM(Time Series Foundation Model)安装(2)
TimesFM(Time Series Foundation Model)安装简介 readme TimesFM(Time Series Foundation Model)安装简介(1)-CSDN博客https://blog.csdn.net/chenchihwen/article/details/144359861?spm1001.2014.3001…...
【Golang】Go语言编程思想(六):Channel,第六节,并发编程模式
并发模式 下例重新对 channel 的用法进行回顾: package mainimport ("fmt""math/rand""time" )func msgGen(name string) chan string {c : make(chan string)go func(name string) { // 在这个 goroutine 当中向外发送数据i : 0fo…...
Blue Ocean 在Jenkins上创建Pipeline使用详解
BlueOcean是Jenkins的一个插件,它提供了一套可视化操作界面来帮助用户创建、编辑Pipeline任务。以下是对BlueOcean中Pipeline操作的详细解释: 一、安装与启动BlueOcean 安装:在Jenkins的“系统管理”->“插件管理”->“可选插件”中搜索“BlueOcean”,然后点击“Ins…...
【数字花园】个人知识库网站搭建:②本地部署数字花园
目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案数字花园网站的本地部署方案数字花园网站本地手动部署方案1. 获取网站源码2.2 安装 Node.js 3. 项目部署3.1 安装项目依赖3.2 构建项目3.3 启动http服务器 4. 本地预览5. 在笔记更新后:更新本地源码…...
监听H5页面在微信浏览器异常退出
参考文章 onBeforeUnmount(() > {unNormalExit(); });//---------------------------异常退出---------------------- function unNormalExit() {enterOrExitRoom({type: 37,roomId: roomId.value,userId: userId.value,nickName: name.value,loginUserType: 2, //0 专家 1…...
【汽车】-- 常见的汽车悬挂系统
汽车悬挂系统是车辆的重要组成部分,其主要功能是连接车轮和车身,减缓路面颠簸对车身的影响,提高行驶的平顺性、舒适性和操控性。以下是常见的汽车悬挂系统类型及其特点: 1. 独立悬挂系统 每个车轮可以独立上下运动,不…...
路由器、二层交换机与三层交换机的区别与应用
路由器、二层交换机和三层交换机是常见的网络设备,常常协同工作。它们都可以转发数据,但在功能、工作层级以及应用场景上存在差异。 1. 工作层级 三者在OSI模型中的工作层级不同: 路由器: 工作在 网络层(第三层&#…...
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测
CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测 目录 CPO-CNN-LSTM-Attention、CNN-LSTM-Attention、CPO-CNN-LSTM、CNN-LSTM四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测任务中实现…...
xss原理分析与剖析
001 URL编码 URL只允许用US-ASCII字符集中可打印的字符(020—0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用。这里有个需要注意的,加号代表URL编码的空格,%20也是。 URL编码最长见的是在用GET/POST传输时&…...
如何使用PageAdmin CMS网站管理系统搭建网站?
一、什么叫CMS? CMS,即内容管理系统,是一种位于网站前台界面与后台数据库之间的软件系统。它能够实现网站内容的发布、编辑、管理、维护等操作,使得非专业人员也能轻松进行网站内容的更新与维护。 二、如何使用PageAdmin CMS网站管…...
Linux: shell: bash: set -x;调试使用
man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...
高级排序算法(二):归并排序与堆排序详解
引言 在上一章中,我们探讨了高效的快速排序及其分治思想。这一次,我们将继续探索两种同样重要的排序算法:归并排序(Merge Sort) 和 堆排序(Heap Sort)。 它们与快速排序一样,都是O(…...
doxygen–自动生成文档工具
原文地址:doxygen–自动生成文档工具 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 简介 doxygen是软件开发中广泛使用的文档生成工具。它可以从源代码注释中自动生成文档,解析类、函数、参数相关信息,并生…...
5G学习笔记之SNPN系列之ID和广播消息
目录 1. 概述 2. SNPN ID 3. SNPN广播消息 1. 概述 SNPN:Stand-alone Non-Public Network,独立的非公共网络,由NPN独立运营,不依赖与PLMN网络。 SNPN不支持的5GS特性: 与EPS交互 emergency services when the UE acce…...
登录授权的实现:json web token + redis + springboot
文章目录 引言I token实现思路传统JWT TOKEN认证方式改进的JWT TOKEN认证方式redis设计II java代码实现登录接口退出登录接口登录之后接口(token解析和校验)III 常见问题400引言 应用场景: 登录认证 I token实现思路 传统JWT TOKEN认证方式 RESTful API TOKEN认证方式:…...
AlexNet:开启深度学习图像识别新纪元
一、引言 在深度学习的璀璨星空中,AlexNet 无疑是一颗极为耀眼的明星。它于 2012 年横空出世,并在 ImageNet 竞赛中一举夺冠,这一历史性的突破彻底改变了计算机视觉领域的发展轨迹,让全世界深刻认识到深度卷积神经网络在图像识别任…...
鸿蒙面试-----鸿蒙组件生命周期详解
不同颜色的是必须要会的,黑色的参考一下,只写了一些用过的还有很多组件的生命周期都没写 组件的生命周期有那些? 我了解的有、系统组件的生命周期、页面和自定义组件的生命周期、UIAbility组件的生命周期,Navigation组件生命周期…...
Meta Llama 3.3 70B:性能卓越且成本效益的新选择
Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...
asp.net老项目运维,出现的问题6之数据库
数据库会有很多张表,表内一般会有自增列,如果想统一管理这个自增数值,可以使用如下方法,放在一个存储过程中,想用的时候调用存储过程即可生成数据库层面的全局唯一值: create procedure [dbo].[P_getSeqID…...
WADesk 升级 Webpack5 一些技术细节认识5和4的区别在哪里
背景 升级过程中发现有很多新的知识点,虽然未来可能永远都不会再遇到,但是仍然是一次学习的好机会,可以让自己知道,打包软件的进化之路,和原来 Webpack 4 版本的差异在哪里。 移除的依赖记录 babel/register: 在 Nod…...
什么是JVM即时编译
什么是JVM即时编译 即时编译是JVM的核心功能,他让java在性能上不输于C/C JVM(Java Virtual Machine)即 Java 虚拟机,是一种用于执行 Java 字节码的虚拟计算机。它是 Java 程序的运行核心,提供了一个独立于底层操作系统…...
《经验分享 · 软考系统分析师》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
HC-SR04 超声波测距模块驱动总结
一、基本原理 1.1. 引脚功能 VCC电源 (需要5V直流电源)GND地Trig信号触发脉冲 (>10us TTL脉冲)Echo输出TTL电平信号, 电平持续时间与距离程正比 1.2. 电气特性 工作电压5V工作电流15mA工作频率40kHz射程范围0.02 ~ 4m (参考值,不同厂家质量可能也不一样)测量精度1mm (理…...
VMware:CentOS 7.* 连不上网络
1、修改网络适配 2、修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-e33# 修改 ONBOOTyes 3、重启网卡 service network restart 直接虚拟机中【ping 宿主机】,能PING通说明centOS和宿主机网络通了,只要宿主机有网,则 Ce…...
【自动驾驶】单目摄像头实现自动驾驶3D目标检测
🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理(自动选择CPU或GPU&#x…...
40分钟学 Go 语言高并发:微服务架构设计
微服务架构设计 一、知识要点总览 核心模块重要性掌握程度服务拆分高深入理解DDD领域驱动设计接口设计高掌握RESTful和gRPC设计规范服务治理高理解服务注册、发现、熔断、限流等机制部署策略中掌握DockerK8s容器化部署方案 二、详细内容讲解 1. 服务拆分 服务拆分是微服务…...
【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟
这几年蓝桥杯比赛比较适合学生技能学习,考虑板子功能,提出完成的任务。 要求在液晶完成如下图效果: 主要是实现液晶显示时钟和数字时钟,具体样式可以依据实际情况微调。 实现过程: 1.需要画圆(外圆、内圆…...
Micropython 扩展C模块<HelloWorld>
开发环境 MCU:Pico1(无wifi版)使用固件:自编译版本开发环境:MacBook Pro Sonoma 14.5开发工具:Thonny 4.1.6开发语言:MicroPython 1.24 执行示例 在github上获取micropython,我使…...
数据分析学习Day1-使用matplotlib生成2小时每分钟的气温可视化分析图
注意:需要提前下载matplotlib包 pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple import matplotlib.pyplot as plt import random# 数据准备 x list(range(121)) # 使用 list() 转换为列表 y [random.randint(15,28) for i in range(121)]…...
域渗透-域内密码喷洒
域内密码喷洒 密码喷洒配合用户枚举使用,先进行枚举再进行喷洒 为什么不爆破,而是喷洒: 规避账户锁定策略 学习怎么设置密码锁定策略: 在工具找到组策略管理,在域下的Default Domain右键点击编辑 在计算机配置>…...
5G Multi-TRP R16~R18演进历程
提升小区边缘用户的性能,在覆盖范围内提供更为均衡的服务质量,NR中引入了多TRP协作传输的方案。多TRP协作传输通过多个TRP之间进行非相干联合传输(Non Coherent-Joint Transmission,NC-JT)、重复传输/接收或…...
Android 屏幕采集并编码为H.264
前言 我们前面基于摄像机的图像采集以及编解码已经完成了,那么接下来计划后面的三篇博文分别实现Android屏幕采集实现并进行H.264编解码、MIC音频采集并编码为AAC以及AAC解码播放,希冀可以通过这六篇博文能够对Android上面的音视频编解码有一个初步的学…...
xuggle操作视频
文章目录 xuggle操作视频 xuggle操作视频 有个需求是要读取视频的宽高,找到了Xuggle和FFmpeg两种方式,FFmpeg很强大,但是我并不需要那些功能,所以使用了轻量一点的Xuggle 引入依赖 <dependency><groupId>xuggle<…...
Python|Pyppeteer实现自动获取eBay商品数据【进阶版】(27)
前言 本文是该专栏的第27篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 在本专栏的上一篇文章中,笔者有详细介绍基于python中的pyppeteer,“根据目标关键词,来实现自动获取eBay的商品数据”。而本文,笔者将在上一篇文章《Python|Pyppeteer实现自动获取eBa…...
Android Studio新版本的一个资源id无法找到的bug解决
Android Studio新版本的一个资源id无法找到的bug解决 文章目录 Android Studio新版本的一个资源id无法找到的bug解决一、前言二、Android Studio的无法获取到资源id的bug1、一段简单的Java代码1、错误现象2、错误解决方法 三、其他1、小结2、gradle.properties文件 其他相关属性…...
CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置
在CANoe中创建网络节点作为以太网主机时,可以给其配置独立的TCP/IP Stack。 配置的协议栈有一些底层配置参数可以在界面上设置或修改,比如: MTU上图中MTU显示500只是图形界面显示错误,正确值是1500。 TCP延迟确认这些参数也可以通过CAPL动态配置,甚至CAPL还可以配置很多界…...
【git】--- 通过 git 和 gitolite 管理单仓库的 SDK
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…...