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类的定义

在我们当前阶段,我们只需要了解类由以下主要几个部分组成:

  1. 类名:使用class关键字后跟类名来声明一个类。类名应该是一个有效的标识符,并且习惯上首字母大写,采用驼峰命名法。

  2. 成员变量(也称为属性):在类中声明的变量,用于描述对象的特征或状态。成员变量可以是任何类型,包括基本数据类型和引用数据类型。

  3. 方法:类中定义的方法描述了对象的行为。方法包含方法声明和方法体。方法声明包括方法名、返回类型(如果方法不返回任何值,则为void)、以及参数列表(如果方法不接受任何参数,则为空)。方法体包含执行特定操作的语句。

  4. 构造方法:一种特殊类型的方法,用于初始化新创建的对象。构造器的名称必须与类名完全相同,并且没有返回类型(连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访问修饰符

封装主要通过访问修饰符(如publicprivateprotected和默认的包访问级别)来实现。这些访问修饰符用于控制类、成员变量和成员方法的访问权限。

  • 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.小结

今天的分享到这里就结束了哦,如果感觉今天有收获的话点点赞点点关注,你的支持就是对我最大的鼓励!

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

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

相关文章

“卷”智能, 从高质量算力开始

算力即国力,这已是产业共识。 当人工智能浪潮席卷全球之际,大家深刻感受到发展算力产业的重要性和紧迫性,高质量的人工智能算力已经与国家竞争、产业升级和企业转型息息相关。 去年,《算力基础设施高质量发展行动计划》的颁布&a…

网络安全中的 EDR 是什么:概述和功能

专业知识:EDR、XDR、NDR 和 MDR_xdr edr ndr-CSDN博客 端点检测和响应 (EDR) 是一种先进的安全系统,用于检测、调查和解决端点上的网络攻击。它可以检查事件、检查行为并将系统恢复到攻击前的状态。EDR 使用人工智能、机器学习和威胁情报来避免再次发生攻…

CentOS7 离线部署docker和docker-compose环境

一、Docker 离线安装 1. 下载docker tar.gz包 下载地址: Index of linux/static/stable/x86_64/ 本文选择版本:23.0.6 2.创建docker.service文件 vi docker.service文件内容如下: [Unit] DescriptionDocker Application Container Engi…

【MySQL】数据库的介绍以及数据库基础

目录 🌳介绍 🎄数据库操作 🚩显示当前数据库 🚩创建数据库 ​编辑🚩使用/选中 数据库 🚩删除数据库 🌴常用的数据类型 🚩数值类型 🚩字符串类型 &#x1f6a9…

【自用软件】IDM下载器 Internet Download Manager v6.42 Build 10

下载IDM&pj安装教程 Internet Download Manager,简称 IDM,是国外的一款优秀下载工具。目前凭借着下载计算的速度优势在外媒网站中均受好评,现在已被多数国人熟知。Internet Download Manager 提升你的下载速度最多达5倍,安排下…

【HarmonyOS】深入理解LocalStorage之逻辑处理存取

【HarmonyOS】深入理解LocalStorage 一、前言 鸿蒙应用中关于状态管理的处理机制有很多。从状态装饰器State prop等,LocalStrong,AppStrong到首选项,再到数据库。内存到持久化。轻量级到重量级。全方位覆盖。 学习和记忆技术点&#xff0c…

Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )

文本目录: ❄️一、哈希表: ☑ 1、概念: ☑ 2、冲突-概念: ☑ 3、冲突-避免: ☞ 1)、避免冲突-哈希函数的设计: ☞ 2)、避免冲突-负载因子调节(重点): ☑ 4、冲突-解决&…

那年我双手插兜,使用IPv6+DDNS动态域名解析访问NAS

估计有很多科技宅和我一样,会买一个NAS存储或者自己折腾刷一下黑群晖玩玩,由于运营商不给分配固定的公网IP,就导致我在外出的时候无法访问家里的NAS,于是远程访问常常受到IP地址频繁变动的困扰。为了解决这一问题,结合…

element 输入框文字+对应签进行长度 和 的判断

输入文字长度 指定标签的长度 &#xff08;判断长度并提示&#xff09; <div style"position: relative;" classchangyongyu><el-input type"textarea" :autosize"{ minRows: 8, maxRows: 8 }" style"margin-bottom:10px;"…

【React】useEffect

1. 基本介绍 概念 语法 副作用函数依赖项数组&#xff08;空数组时&#xff0c;只会在组件渲染完毕后执行一次副作用函数&#xff09; 2. 使用 import { useEffect, useState } from reactfunction App() {const [value, setValue] useState(0)useEffect(() > {console…

如何使用ssm实现小区物业管理系统

TOC ssm733小区物业管理系统jsp 第一章 绪论 1.1 研究背景 在现在社会&#xff0c;对于信息处理方面&#xff0c;是有很高的要求的&#xff0c;因为信息的产生是无时无刻的&#xff0c;并且信息产生的数量是呈几何形式的增加&#xff0c;而增加的信息如何存储以及短时间分析…

基于微信小程序的美食外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

SPI驱动学习七(SPI_Slave_Mode驱动程序框架)

目录 一、SPI_Slave_Mode驱动程序框架1. Master和Slave模式差别1.1 主设备 (Master)1.2 从设备 (Slave)1.3 示例 2. SPI传输概述2.1 数据组织方式2.2 SPI控制器数据结构 3. SPI Slave Mode数据传输过程4. 如何编写程序4.1 设备树4.2 内核相关4.3 简单的示例代码4.3.1 master和s…

Anaconda虚拟环境默认路径在C盘怎么更改

笔者已经新建好了虚拟环境并且安装了对应库&#xff0c;输入conda env list查询发现虚拟环境竟然安装到了C盘(&#xff61;•́︿•̀&#xff61;)&#xff0c;为避免下一次创建虚拟环境出错&#xff0c;笔者现在修改默认路径置D盘&#xff08;软件安装盘&#xff09; 参考两…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录&#xff1f;二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录&#xff1f; 单点登录&#xff08;Single Sign On&…

【YOLO目标检测车牌数据集】共10000张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;10000&#xff08;2000张绿牌、8000张蓝牌&#xff09; 标注数量(txt文件个数)&#xff1a;10000 标注类别数&#xff1a;1 标注类别名称&#xff1a;licence 数据集下载&#xff1a;车牌数据…

小程序-生命周期与WXS脚本

生命周期 什么是生命周期 生命周期&#xff08;Life Cycle&#xff09;是指一个对象从创建 -> 运行 -> 销毁的整个阶段&#xff0c;强调的是一个时间段。 我们可以把每个小程序运行的过程&#xff0c;也概括为生命周期&#xff1a; 小程序的启动&#xff0c;表示生命…

ant design vue中带勾选表格报Tree missing follow keys: ‘undefined‘解决方法

1、这里一定要给columns和data-source设置key即可。 <div><a-table:row-selection"rowSelection":dataSource"tableList":columns"columns":scroll"{ x: 100% }":pagination"false":loading"loading"&g…

C++ -- 异常

C中的异常是用于处理程序执行过程中出现的错误情况。通过异常处理&#xff0c;程序可以在遇到错误时优雅地处理这些问题&#xff0c;而不是直接崩溃。 C语言处理错误的方式 C语言传统的处理错误的方式主要有两种&#xff1a; 终止程序&#xff1a;使用如assert这样的宏来检查…

隐藏SpringBoot自动生成的文件

第一种方法——删除 第二种方法——Settings——Editor——fail types