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.rhkb.cn/news/435343.html

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

相关文章

初学Vue

文章目录 简介特点 初识Vue模板语法两大类插值语法指令语法 两种数据绑定方式单项绑定(v-bind)双向绑定(v-model) 数据代理事件处理基本使用事件修饰符 键盘事件计算属性 computed 简介 一套用于构建用户界面的渐进式JavaScript框…

【面试题】软件测试实习(含答案)

软件测试实习常见面试题,主要是功能测试相关的基础问题 目录 一、软件测试基础 1、介绍一下你最近的项目,以及工作职责 2、软件项目的测试流程? 3、黑盒测试与白盒测试的区别? 4、黑盒测试常见的设计方法?怎么理解等价类方法和边界值方法 1&…

服务器几核几G几M是什么意思?如何选择?

服务器几核几G几M是什么意思?我们建站、搭建网络平台都要用到云服务器,不管在腾讯云、阿里云还是别的云服务平台选购,都会接触到服务器配置。云服务器就是把物理服务器(俗称“母鸡”),用虚拟机技术虚拟出多…

FreeRTOS学习笔记一——FreeRTOS介绍

RTOS学习笔记,主要参考正点原子教程 目录 FreeRTOS特点任务调度方式抢占式调度时间片调度 任务状态状态转换任务列表 FreeRTOS特点 实现多个任务功能划分延时函数实现任务调度高优先级抢占低优先级每个任务都有自己的栈空间 注意: 中断可以打断任意任务…

设计模式之享元(Flyweight)模式

前言 面向对象很好地解决了 “抽象” 的问题,但是不可避免的要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理 具体需要自己根据需求去评估 定义 “对象性能” 模式。运用…

探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿

0.概述 论文地址:https://arxiv.org/abs/2404.06571 本研究探讨了制造系统集成商如何构建知识图谱来识别新的制造合作伙伴,并通过供应链多样化来降低风险。它提出了一种使用制造服务知识图谱(MSKG)提高 ChatGPT 响应准确性和完整…

探索顶级低代码开发平台,实现创新

文章盘点ZohoCreator、OutSystems等10款顶尖低代码开发平台,各平台以快速开发、集成、数据安全等为主要特点,适用于不同企业需求,助力数字化转型。 一、Zoho Creator Zoho Creator 是一个低代码开发平台,它简化了应用开发中的复杂…

小程序视频编辑SDK解决方案,轻量化视频制作解决方案

面对小程序、网页、HTML5等多样化平台,如何轻松实现视频编辑的轻量化与高效化,成为了众多开发者和内容创作者共同面临的挑战。正是洞察到这一市场需求,美摄科技推出了其领先的小程序视频编辑SDK解决方案,为创意插上翅膀&#xff0…

2024前端技术发展概况

当前前端技术呈现出多方面的发展态势,以下是详细介绍: 前端框架不断演进: React:作为流行的前端框架之一,React 依旧保持着强大的生命力。它具有高效的虚拟 DOM 机制,能够快速更新和渲染页面,极…

pdf页面尺寸裁减

1、编辑pdf 2、点击裁减页面,并在空白区域双击裁减 3、输入裁减数据:

【易上手快捷开发新框架技术】nicegui标签组件lable用法庖丁解牛深度解读和示例源代码IDE运行和调试通过截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

Angular基础学习(入门 --> 入坑)

目录 一、Angular 环境搭建 二、创建Angular新项目 三、数据绑定 四、ngFor循环、ngIf、ngSwitch、[ngClass]、[ngStyle]、管道、事件、双向数据绑定--MVVM 五、DOM 操作 (ViewChild) 六、组件通讯 七、生命周期 八、Rxjs 异步数据流 九、Http …

关于vue2+uniapp+uview+vuex 私募基金项目小程序总结

1.关于权限不同tabbar处理 uniapp 实现不同用户展示不同的tabbar(底部导航栏)_uniapp tabbar-CSDN博客 但是里面还有两个问题 一个是role应该被本地存储并且初始化 第二个问题是假设我有3个角色 每个角色每个tabbar不一样的,点击tabbar时候会导致错乱 第三个问题…

Windows11安装Docker Desktop教程

目录 一.安装前置步骤 ▐ 开启虚拟化 ▐ 安装WSL2 ▐ 安装Linux环境 二.Windows上安装Docker 一.安装前置步骤 ▐ 开启虚拟化 首先确保虚拟化的开启,打开任务管理器后查看: 确保图中的虚拟化是已启用,没有开启的需要通过BIOS进行开启&…

基于php的在线租房管理系统

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

MySQL-联合查询

1.简介 1.1为什么要使用联合查询 在数据设计时由于范式的要求,数据被拆分到多个表中,那么要查询⼀个条数据的完整信息,就 要从多个表中获取数据,如下图所⽰:要获取学⽣的基本信息和班级信息就要从学⽣表和班级表中获…

全网最全软件测试面试题(含答案解析+文档)

一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到开发成功投入使用,并在使用中不断地修改、增补和完善,直到停止该软件的使用的全过程(从酝酿到…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间,你可以按照如下步骤修改SessionAge 这个参数: 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错,则执行步骤4;如果没有报错则执行第5步如果第2步…

react-问卷星项目(2)

流程 husky 一个git hook 工具,即在git commit之前执行自定义的命令,将规范流程化,如执行代码风格的检查,避免提交非规范的代码,在github搜索即可。 这两条是接着执行的,表示创建husky,在文档…

C++【类和对象】(取地址运算符重载与实现Date类)

文章目录 取地址运算符重载const成员函数取地址运算符重载 Date类的实现Date.hDate.cpp1.检查日期合法性2. 构造函数/赋值运算符重载3.得到某月的天数4. Date类 - 天数的操作4.1 日期 天数4.2 日期 天数4.3 日期 - 天数4.4 日期 - 天数 5. Date的前后置/--5.1 前置5.2 后置5.…