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…...
一拖二快充线:单接与双接的多场景应用
在当代社会,随着智能手机等电子设备的普及,充电问题成为了人们关注的焦点。一拖二快充线作为一种创新的充电解决方案,因其便捷性与高效性而受到广泛关注。本文将深入探讨一拖二快充线的定义、原理以及在单接与双接手机场景下的应用࿰…...
接口自动化测试概述
目录 1 接口自动化测试简介 1.1 什么是接口 1.2 什么是接口测试 1.3 为什么要做接口测试 1.4 什么是接口测试自动化 1.5 为什么要做接口测试自动化 2 接口自动化测试规范 2.1 文档准备 2.1.1 需求文档 2.1.2 接口文档 2.1.3 UI 交互图 2.1.4 数据表设计文档 2.2 明…...
Fingerprint.js:精准用户识别的浏览器指纹技术
在数字化时代,用户识别成为互联网服务中不可或缺的一环。随着隐私保护意识的增强,传统的用户识别方法如Cookies和本地存储面临着越来越多的挑战。而Fingerprint.js作为一种创新的浏览器指纹技术,以其高效、隐私友好的特性,逐渐在个…...
Gson将对象转换为JSON(学习笔记)
JSON有两种表示结构,对象和数组。对象结构以"{"大括号开始,以"}"大括号结束。中间部分由0或多个以”,"分隔的”key(关键字)/value(值)"对构成,关键字和值之间以":"分隔,语法结…...
什么是IPv6
目前国内的网络正在快速的向IPv6升级中,从网络基础设施如运营商骨干网、城域网,到互联网服务商如各类云服务,以及各类终端设备厂商如手机、电脑、路由器、交换机等。目前运营商提供的IPv6线路主要分为支持前缀授权和不支持前缀授权两种。 说…...
python画图|放大和缩小图像
在较多的画图场景中,需要对图像进行局部放大,掌握相关方法非常有用,因此我们很有必要一起学习 【1】官网教程 首先是进入官网教程,找到学习资料: https://matplotlib.org/stable/gallery/subplots_axes_and_figures…...
Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版
CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容,流畅地…...
资质申请中常见的错误有哪些?
在申请建筑资质的过程中,企业可能会犯一些常见的错误,以下是一些需要避免的错误: 1. 资料准备不充分: 申请资质需要提交大量的资料,包括企业法人资料、财务报表、业绩证明等。资料不齐全或不准确都可能导致申请失败。…...
基于单片机的多路温度检测系统
**单片机设计介绍,基于单片机CAN总线的多路温度检测系统设计 文章目录 前言概要功能设计设计思路 软件设计效果图 程序设计程序 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探…...
面试题:通过栈实现队列
题目描述: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素i…...
做医院网站公司/线上销售平台如何推广
单播:单播MAC地址是从源到目的的唯一地址。 广播:就是一个主机向所有主机发送一个数据包。 组播:就是把数据发送给一组主机或者发送给感兴趣的主机。(组播的MAC地址是以:01-00-5E开头的,组播的IP地址224.0.…...
中国做外贸的网站/免费建网站最新视频教程
大连益盛达智能科技有限公司 主要产品有1-26寸AOI粒子压痕检测机、1-26寸系列全自动COG邦定机(国家立项项目)、中大尺寸COG返修机、1-26寸系列全自动FOG热压机、1-21寸系列全自动背光组装机、IR镜座组装机、全自动清洗机、自动上料机、智能机器人、陶瓷…...
wordpress sql优化/百度站长平台
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.一,遇到问题二,解决问题一,遇到问题 预将图集编辑分为单图片做了如下操作: 将“Texture Type”设置为“Sprite&…...
网站建设代理开发科技企业服务/长沙百度搜索网站排名
首先说一下坑的地方就是python2和python3的模块改变问题,当然精通python的可以略过。这个在网上百度一下吧,第二个是导入xlsx文件的时候需要xlrd模块,而这个模块最好跟着我下面的方法走,那个python2 就可以用我下边的脚本了。 1.安…...
成品网站建设价格/绍兴seo排名收费
凭证纸尺寸自定义纸张尺寸对照表纸张类型自定义纸张大小()备 注凭 证账 簿6.02420127038202790US Std Fanfold(37782794)平PJ7.0Legal纸型或 标准法律用纸Legal纸型或 标准法律用纸系统自带,无须自定义其大小为21593556PJ7.02420115038302930PJ7.12420115038302930账…...