java基础(4)类和对象

目录
1.前言
2.正文
2.1类的定义与使用
2.1.1类的定义
2.1.2类的实例化
2.1.3this引用
2.1.3.1 访问当前对象的成员变量
2.1.3.2调用当前对象的成员方法
2.1.3.3构造函数中的 this
2.1.3.4归纳this
2.2封装
2.2.1封装的定义
2.2.2访问修饰符
2.3static
2.3.1static修饰成员变量
2.3.2static修饰成员方法
2.3.3具体代码
3.小结
1.前言
哈喽大家好,今天博主来给大家分享java当中体现面向对象的特点的一章————类和对象,后文再讲一下封装的概念,相关的限定符,以及static关键字,干货多多,希望大家都可以继续努力,加油学习。
2.正文
2.1类的定义与使用
2.1.1类的定义
在我们当前阶段,我们只需要了解类由以下主要几个部分组成:
类名:使用
class关键字后跟类名来声明一个类。类名应该是一个有效的标识符,并且习惯上首字母大写,采用驼峰命名法。成员变量(也称为属性):在类中声明的变量,用于描述对象的特征或状态。成员变量可以是任何类型,包括基本数据类型和引用数据类型。
方法:类中定义的方法描述了对象的行为。方法包含方法声明和方法体。方法声明包括方法名、返回类型(如果方法不返回任何值,则为
void)、以及参数列表(如果方法不接受任何参数,则为空)。方法体包含执行特定操作的语句。构造方法:一种特殊类型的方法,用于初始化新创建的对象。构造器的名称必须与类名完全相同,并且没有返回类型(连
void也没有)。
下面为大家附上一段代码来让大家更加清楚的知晓类的组成部分:
public class Book {public String bookNo;public String bookTitle;public String author;public int yearPublished;public Book(String bookNo,String bookTitle,String author,int yearPublished){this.bookNo = bookNo;this.bookTitle = bookTitle;this.author = author;this.yearPublished = yearPublished;}public void showBookTitle() {System.out.println(bookTitle);}}
接下来详细分析以上这段代码:
类名
Book:这是类的名称,代表了一个书籍的抽象表示。
成员变量
public String bookNo;:类型为String,用于存储书籍的编号。
public String bookTitle;:类型为String,用于存储书籍的标题。
public String author;:类型为String,用于存储书籍的作者。
public int yearPublished;:类型为int,用于存储书籍的出版年份。以上四个都为公开的成员变量,置于何为公开下文会讲。
方法
public void showBookTitle() { ... }:这是一个公开的方法,没有返回值(void类型),用于打印书籍的标题。方法体内通过System.out.println(bookTitle);语句实现了这一功能。
构造方法
public Book(String bookNo,String bookTitle,String author,int yearPublished){ ... }:这是一个公开的构造方法,用于创建Book类的实例。它接收四个参数,分别对应于书籍的编号、标题、作者和出版年份,并将这些参数的值分别赋给类的成员变量。构造方法没有返回值,并且其名称必须与类名完全相同。
2.1.2类的实例化
类的实例化离不开new关键字,接下来是详细描述当new关键字出现时,计算机内部的操作,记住,下文只需了解,不需要严格掌握:
- 当
new关键字被调用时,JVM(Java虚拟机)会在堆内存中为新的对象实例分配足够的内存空间。这个空间的大小取决于对象的类型以及它所包含的数据类型的大小。- 接下来,JVM会调用类的构造方法来初始化对象的状态。如果提供了参数,这些参数会被传递给构造方法。构造方法中的代码会执行,用于设置对象的初始状态。
- 构造方法执行完毕后,JVM会将新创建的对象实例的引用(即对象的内存地址)返回给调用者。这个引用可以被存储在变量中,以便后续对对象进行操作。
附上一段实际的代码:
public class Main { public static void main(String[] args) { // 类的实例化 Book book1 = new Book("12345", "Java Programming", "John Doe", 2023); // 使用对象 book1.showBookTitle(); // 另一个实例 Book book2 = new Book("67890", "Python Basics", "Jane Smith", 2022); }
}
2.1.3this引用
介绍完了通过new关键字来实例化对象,接下来我们来介绍this关键字引用。
2.1.3.1 访问当前对象的成员变量
例如这里我们有这样一段代码:
public class Person { String name; // 成员变量 public Person(String name) { this.name = name; // 使用this引用成员变量name,并将其值设置为参数name的值 } public void sayHello() { System.out.println("Hello, my name is " + this.name); // 使用this引用成员变量name }
}
在这个例子中,
this.name指的是Person类的成员变量name,而构造方法参数name是一个局部变量。通过使用this.name,我们能够明确指出我们想要访问的是成员变量name而不是参数name。
2.1.3.2调用当前对象的成员方法
虽然调用当前对象的成员方法时通常不需要显式地使用 this 关键字(除非存在方法重载并且需要区分调用哪个方法),但在某些情况下,使用 this 可以使代码更加清晰,例如下文:
public class Calculator { public int add(int a, int b) { return a + b; } public int addThreeNumbers(int a, int b, int c) { // 调用另一个成员方法 return this.add(a, b) + c; }
}
这个this并不刚需,但有的时候加上去可以是我们为后面浏览代码的时候,看着更加流畅。
2.1.3.3构造函数中的 this
在构造函数中,this 关键字可以用于调用同一类的另一个构造函数。但是,这种调用必须是构造函数中的第一条语句。
public class Rectangle { int width, height; // 构造函数1 public Rectangle(int width, int height) { this.width = width; this.height = height; } // 构造函数2,使用另一个构造函数初始化 public Rectangle(int size) { this(size, size); // 调用具有两个参数的构造函数 }
}
2.1.3.4归纳this
那么应用场景讲了这么多,那它到底本质是什么呢。
this实际上是一个指向当前对象的引用。在对象的方法内部,this引用总是可用的,并且它指向调用该方法的对象。因此,你可以使用this来访问类的成员变量和方法,尽管无关紧要是加上也是良好代码习惯的体现。
2.2封装
接下来就让我们来引入一个非常重要的环节——封装。
2.2.1封装的定义
封装是一种信息隐藏技术,它通过将对象的内部状态(属性)和对这些状态的操作(方法)封装在一个类中,使得外界只能通过类的接口(即公开的方法)来访问和操作对象的状态,而无法直接访问对象的内部实现细节。这样做的好处包括提高代码的安全性、可维护性和可复用性。
2.2.2访问修饰符
封装主要通过访问修饰符(如
public、private、protected和默认的包访问级别)来实现。这些访问修饰符用于控制类、成员变量和成员方法的访问权限。
- public:表示公开的,可以被任何其他类访问。
- private:表示私有的,只能被当前类访问,不能被子类或其他类访问。
- protected:表示受保护的,可以被当前类、同一个包中的其他类以及子类访问。
- 默认(无修饰符):也称为包访问级别,表示该成员只能被同一个包中的类访问。
通过将类的成员变量设置为
private,并提供公共的getter和setter方法来访问和修改这些变量,可以实现封装。这样,外部代码就只能通过这些公共的方法来与对象交互,而无法直接访问或修改对象的内部状态。
public class BookPrivate { // private成员变量,只能在BookPrivate类内部被访问 // public成员变量,可以在任何地方被访问 private String title; public int num;// public构造方法 public BookPrivate(String title) { this.title = title; } // public getter方法,用于外部访问private成员变量 public String getTitle() { return title; } // public方法,可以在任何地方被调用 public void displayTitle() { System.out.println("Book Title: " + title); }
}
2.3static
static修饰符用于声明类变量和类方法。使用static修饰的成员属于类本身,而不是类的某个特定对象。因此,它们可以在没有创建类实例的情况下被访问和修改。
2.3.1static修饰成员变量
当成员变量被声明为
static时,该变量不再是某个对象的实例变量,而是成为类的变量。这意味着无论创建了多少个类的对象,皆被所有对象共享。
2.3.2static修饰成员方法
当成员方法被声明为
static时,该方法属于类而不是类的某个特定对象。因此,它可以在没有创建类实例的情况下被调用。静态方法不能直接访问类的非静态成员(变量和方法),因为非静态成员属于类的特定实例,而静态方法不依赖于任何特定实例。
2.3.3具体代码
public class count {// 静态变量 private static int counter = 0;// 静态方法,用于增加计数器的值并返回新的值public static int moreGetCounter() {return ++counter;}// 只获取计数器的值public static int getCounter() {return counter;}// 主方法,用于演示静态变量和静态方法的使用 public static void main(String[] args) {// 直接通过类名调用静态方法 System.out.println(count.moreGetCounter()); // 再次增加计数器的值并获取 System.out.println(count.moreGetCounter()); // 输出是2 // 单独获取计数器的值 System.out.println(count.getCounter()); // 输出也是2 // 注意:我们仍然没有创建count类的实例,但静态变量和方法依然可以访问和修改 }}
3.小结
今天的分享到这里就结束了哦,如果感觉今天有收获的话点点赞点点关注,你的支持就是对我最大的鼓励!
相关文章:
java基础(4)类和对象
目录 1.前言 2.正文 2.1类的定义与使用 2.1.1类的定义 2.1.2类的实例化 2.1.3this引用 2.1.3.1 访问当前对象的成员变量 2.1.3.2调用当前对象的成员方法 2.1.3.3构造函数中的 this 2.1.3.4归纳this 2.2封装 2.2.1封装的定义 2.2.2访问修饰符 2.3static 2.3.1sta…...
[Linux]:线程(二)
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 与Windows环境不同,我们在linux环境下需要通过指令进行各操作&…...
【unity进阶知识3】封装一个事件管理系统
前言 框架的事件系统主要负责高效的方法调用与数据传递,实现各功能之间的解耦,通常在调用某个实例的方法时,必须先获得这个实例的引用或者新实例化一个对象,低耦合度的框架结构希望程序本身不去关注被调用的方法所依托的实例对象…...
服务器使用frp做内网穿透详细教程,请码住
目录 1.内网穿透的定义 2.前提条件 3.frp下载地址 4.配置服务器端的frps.toml文件 5. 配置客户端,即物理服务器或者是电脑本机地址 6.添加服务端启动命令startServerFrp.sh 7.添加客户端启动命令startClientFrp.sh 8. 查看服务端启动日志 9.查看客户端启…...
小程序视频编辑SDK解决方案,轻量化视频制作解决方案
面对小程序、网页、HTML5等多样化平台,如何轻松实现视频编辑的轻量化与高效化,成为了众多开发者和内容创作者共同面临的挑战。正是洞察到这一市场需求,美摄科技推出了其领先的小程序视频编辑SDK解决方案,为创意插上翅膀࿰…...
ERROR [internal] load metadata for docker.io/library/openjdk:8
ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: openjdk:8: failed to do request: Head “https://registry-1.docker.io/v2/library/openjdk/manifests/8”: dial tcp 202.160.129.6:443: i/o timeout 在构建docker镜像时从docker.io/libr…...
Wed前端--HTML基础
目录 一、开发工具 二、HTML文档结构 2.1头部head 2.1.1title标记 2.1.2元信息meta标记 具体实例 编辑 一、开发工具 最基础的开发工具是:HBuilder 二、HTML文档结构 HTML文档由头部head和主体body组成 头部head标记中可以定义标题样式,头部信…...
Latex 自定义运算符加限定条件的实现
“\operatorname{mean}\limits_{n \in N}” 的效果 mean n ∈ N \operatorname{mean}\limits_{n \in N} meann∈N “\operatorname*{mean}\limits_{n \in N}” 的效果 mean n ∈ N \operatorname*{mean}\limits_{n \in N} n∈Nmean 参考这篇文章...
大数据实时数仓Hologres(三):存储格式介绍
文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指…...
关于vue2+uniapp+uview+vuex 私募基金项目小程序总结
1.关于权限不同tabbar处理 uniapp 实现不同用户展示不同的tabbar(底部导航栏)_uniapp tabbar-CSDN博客 但是里面还有两个问题 一个是role应该被本地存储并且初始化 第二个问题是假设我有3个角色 每个角色每个tabbar不一样的,点击tabbar时候会导致错乱 第三个问题…...
多线程(一):线程的基本特点线程安全问题ThreadRunnable
目录 1、线程的引入 2、什么是线程 3、线程的基本特点 4、线程安全问题 5、创建线程 5.1 继承Thread类,重写run 5.1.1 创建Thread类对象 5.1.2 重写run方法 5.1.3 start方法创建线程 5.1.4 抢占式执行 5.2 实现Runnable,重写run【解耦合】★…...
启动hadoop集群出现there is no HDFS_NAMENODE_USER defined.Aborting operation
解决方案 在hadoop-env.sh中添加 export HDFS_DATANODE_USERroot export HDFS_NAMENODE_USERroot export HDFS_SECONDARYNAMENODE_USERroot export YARN_RESOURCEMANAGER_USERroot export YARN_NODEMANAGER_USERroot 再次运行即可。...
Redis实现短信登录解决状态登录刷新的问题
Redis实现短信登录 获取验证码控制层 /*** 发送手机验证码*/PostMapping("/code")public Result sendCode(RequestParam("phone") String phone) {// TODO 发送短信验证码并保存验证码return userService.sendCode(phone);} 获取验证码服务层 Result sendC…...
33. java快速排序
1. 前言 排序算法是数据结构中最基础的算法,快速排序则是面试中最常见的排序算法。无论是校招面试还是社招面试,快速排序算法的出现频率远高于其他算法,而且经常会要求候选人白板手写实现算法。快速排序算法的核心是分治处理,重点是分析时间复杂度。 2. 快速排序算法 面试…...
普通二叉搜索树的模拟实现【C++】
二叉搜素树简单介绍 二叉搜索树又称二叉排序树,是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 注意…...
unity 介绍Visual Scripting Scene Variables
Visual Scripting中的场景变量是指在Unity中使用可视化脚本时,能够在不同场景间传递和存储数据的变量。这些变量可以用来跟踪游戏状态、玩家信息或其他动态数据,允许开发者在不编写代码的情况下创建复杂的游戏逻辑。 场景变量的优势包括: 1…...
linux服务器部署filebeat
# 下载filebeat curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.23-linux-x86_64.tar.gz # 解压 tar xzvf filebeat-7.17.23-linux-x86_64.tar.gz# 所在位置(自定义) /opt/filebeat-7.17.23-linux-x86_64/filebeat.ym…...
个人获取Wiley 、ScienceDirect、SpringerLink三个数据库文献的方法
在同学们的求助文献中经常出现Wiley 、ScienceDirect、SpringerLink这三个数据库文献。本文下面就讲解一下个人如何不用求助他人自己搞定这三个数据库文献下载的方法。 个人下载文献首先要先获取数据库资源,小编平时下载文献是通过科研工具——文献党下载器获取的数…...
Java五子棋
目录 一:案例要求: 二:代码: 三:结果: 一:案例要求: 实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘,把每个元素赋值位“┼”可以画出棋…...
【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面
【从0开始自动驾驶】用python做一个简单的自动驾驶仿真可视化界面 废话几句废话不多说,直接上源码目录结构init.pysimulator.pysimple_simulator_app.pyvehicle_config.json 废话几句 自动驾驶开发离不开仿真软件成品仿真软件种类多https://zhuanlan.zhihu.com/p/3…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
