当前位置: 首页 > news >正文

Java 面向对象基础

文章目录

    • 一、类和对象
      • 1. 类的定义
      • 2. 对象的使用
    • 二、对象内存图
    • 三、成员变量和局部变量
    • 四、封装
      • 1. private 关键字
      • 2. this 关键字
    • 五、构造方法
    • 六、标准类制作

一、类和对象

在此之前,我们先了解两个概念,对象和类。

万物皆对象,客观存在的事物皆为对象。
类是对象的数据类型,是对现实生活中一类具有共同属性和行为的事物的抽象。

类是对象的抽象,对象是类的实体!

1. 类的定义

类是 Java 程序的基本组成单位。
是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为。

① 属性:在类中通过成员变量来体现(类中方法外的变量);
② 行为:在类中通过成员方法来体现(和前面的方法相比去掉 static 关键字即可)。

public class Phone {//成员变量String brand;int price;//成员方法public void call() {System.out.println("打电话");}public void sendMessage() {System.out.println("发短信");}
}

2. 对象的使用

① 创建对象

Phone p = new Phone();

② 使用对象

//使用成员变量
p.brand;
//使用成员方法
p.call();
public class PhoneDemo {public static void main(String[] args) {//创建对象Phone p = new Phone();//给成员变量赋值p.brand = "华为";p.price = "2999";//使用成员变量System.out.println(p.brand);System.out.println(p.price);//使用成员方法p.call();p.sendMessage();}
}

二、对象内存图

public class StudentTest {public static void main(String[] args) {//创建第一个对象并使用Student s1 = new Student();s1.name = "林青霞";s1.age = 30;System.out.println(s1.name + "," + s1.age);//把第一个对象的地址赋值给第二个对象Student s2 = s1;s2.name = "张曼玉";s2.age = 28;System.out.println(s1.name + "," + s1.age);System.out.println(s2.name + "," + s2.age);}
}

在这里插入图片描述
输出:
林青霞,30
张曼玉,28
张曼玉,28

多个对象指向相同的地址!

三、成员变量和局部变量

成员变量:类中方法外的变量;
局部变量:方法中的变量。

public class Phone {String brand;int price;public void call() {int i = 0;System.out.println("打电话");}public void sendMessage() {int j = 0;System.out.println("发短信");}int k;
}

如上代码,其中 brand、price 和 k 是成员变量,i 和 j 是局部变量。

成员变量和局部变量的区别:

在这里插入图片描述

四、封装

1. private 关键字

① 是一个权限修饰符;
② 可以修饰成员变量和成员方法;
③ 作用是保护成员不被别的类使用,被 private 修饰的成员只在本类中才能被访问。

针对 private 修饰的成员变量,如果需要被其他类使用,应提供相应的操作:
(1)提供 get变量名() 方法,用于获取成员变量的值,方法用 public 修饰;
(2)提供 set变量名(参数) 方法,用于设置成员变量的值,方法用 public 修饰。

//学生类
public class Student {String name;private int age;//提供get、set方法public void setAge(int a) {if (a < 0 || a > 120) {System.out.println("年龄不正确!");} else {age = a;} }public int getAge() {return age;}public void show() {System.out.println(name + "," + age);}
}
//学生测试类
public class StudentTest {public static void main(String[] args) {//创建对象Student s = new Student();//给成变量赋值s1.name = "刘德华";s1.setAge(60);//调用show方法s.show();}
}

一个标准类的编写:
① 把成员变量用 private 修饰;
② 提供对应的 get、set 方法。

set、get 后面单词首字母要大写!

2. this 关键字

private String name;
private int age;
public void setName(String name) {this.name = name;
}
public String getName() {return name;
}
public void setAge(int age) {this.age = age;
}
public int getAge() {return age;
}public void show() {System。out.println(name + "," + age);
}

局部变量与成员变量同名时,this 修饰的变量用于指代成员变量,this.age = age 左成员右局部!

(1)封装原则:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
(2)封装好处:
通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性。

五、构造方法

构造方法是一种特殊的方法,用于创建对象。

private String name;
private int age;public Student() {
}public void show() {System.out.println(name + "," + age);
}
Student s = new Student();
s1.setName("刘德华");
s1.setAge(60);
s1.show(); //刘德华,60 

当一个类中没有给任何的构造方法时,系统将会自动给出一个默认的无参构造方法,这就是为什么我们前面即使没写构造方法,程序也可以正常执行。

但是当需要传递参数时,系统将无法给出我们有参构造,需要自己去写:

private String name;
private int age;public Student(String name, int age) {this.name = name;this.age = age;
}public void show() {System.out.println(name + "," + age);
}
Student s = new Student("刘德华", 60);
s.show(); //刘德华,60 

注意事项:
① 如果没有定义构造方法,系统将给出一个默认的无参构造方法;
② 如果定义了构造方法,系统将不再提供默认的构造方法;
③ 如果自定义了带参构造方法,还需要使用无参构造方法时,就必须再写一个无参构造方法;
④ 推荐使用方式,无论是否使用,都手动书写无参构造方法。

六、标准类制作

//学生类package com.zxe;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void show() {System.out.println(name + "," + age);}}
//学生测试类package com.zxe;public class StudentDemo {public static void main(String[] args) {//无参构造方法创建对象Student s1 = new Student();s1.setName("张三");s1.setAge(23);s1.show();//有参构造方法创建对象Student s2 = new Student("刘德华",60);s2.show();}
}

在这里插入图片描述

相关文章:

Java 面向对象基础

文章目录一、类和对象1. 类的定义2. 对象的使用二、对象内存图三、成员变量和局部变量四、封装1. private 关键字2. this 关键字五、构造方法六、标准类制作一、类和对象 在此之前&#xff0c;我们先了解两个概念&#xff0c;对象和类。 万物皆对象&#xff0c;客观存在的事物…...

RocketMQ源码(21)—ConsumeMessageConcurrentlyService并发消费消息源码

基于RocketMQ release-4.9.3&#xff0c;深入的介绍了ConsumeMessageConcurrentlyService并发消费消息源码。 此前我们学习了consumer消息的拉取流程源码&#xff1a; RocketMQ源码(18)—DefaultMQPushConsumer消费者发起拉取消息请求源码RocketMQ源码(19)—Broker处理Default…...

基于 STM32+FPGA 的多轴运动控制器的设计

运动控制器是数控机床、高端机器人等自动化设备控制系统的核心。为保证控制器的实用性、实时性和稳定 性&#xff0c;提出一种以 STM32 为主控制器、FPGA 为辅助控制器的多轴运动控制器设计方案。给出了运动控制器的硬件电路设计&#xff0c; 将 S 形加减速算法融入运动控制器&…...

《爆肝整理》保姆级系列教程python接口自动化(十三)--cookie绕过验证码登录(详解

python接口自动化&#xff08;十三&#xff09;--cookie绕过验证码登录&#xff08;详解 简介 有些登录的接口会有验证码&#xff1a;短信验证码&#xff0c;图形验证码等&#xff0c;这种登录的话验证码参数可以从后台获取的&#xff08;或者查数据库最直接&#xff09;。获取…...

soapui + groovy 接口自动化测试

1.操作excel的groovy脚本 package pubimport jxl.* import jxl.write.Label import jxl.write.WritableWorkbookclass ExcelOperation {def xlsFiledef workbookdef writableWorkbookdef ExcelOperation(){}//设置xlsFile文件路径def ExcelOperation(xlsFile){this.xlsFile x…...

Linux内存管理(三十五):内存规整简介

源码基于:Linux5.4 0. 前言 伙伴系统以页面为单位来管理内存,内存碎片也是基于页面的,即由大量离散且不连续的页面组成的。从内核角度来看,出现内存碎片不是好事情,有些情况下物理设备需要大段的连续的物理内存,如果内核无法满足,则会发生内核错误。内存规整就是为了解…...

Java连接Redis

Jedis是Redis官方推荐的Java连接开发工具。api&#xff1a;https://tool.oschina.net/apidocs/apidoc?apijedis-2.1.0一、 导入包<!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency><groupId>redis.clients</groupId><…...

Python语言零基础入门教程(十六)

Python 模块 Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代码更好用&#xff0c;更易懂。 模块能定…...

SAP ERP系统SD模块常用增强之一:VA01/VA02创建或修改SO的输入检查

在SAP/ERP项目的实施中销售管理模块&#xff08;SD&#xff09;的创建和修改销售订单必定会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;SAP公司也考虑到这一点&#xff0c;所以这方面的配置功能也非常强大&#xff0c;通常情况下不需…...

深度学习知识补充

候选位置(proposal) RCNN 什么时ROI&#xff1f; 在图像处理领域&#xff0c;感兴趣区域(region of interest &#xff0c; ROI) 是从图像中选择的一个图像区域&#xff0c;这个区域是你的图像分析所关注的重点。圈定该区域以便进行进一步处理。使用ROI圈定你想读的目标&…...

Vue笔记(1)——数据代理与绑定

一、初始Vue 1.想让Vue工作&#xff0c;就必须创建一个Vue实例&#xff0c;且要传入一个配置对象&#xff1b; 2.root容器里的代码依然符合html规范&#xff0c;只不过混入了一些特殊的Vue语法&#xff1b; 3.root容器里的代码被称为【Vue模板】&#xff1b; 4.Vue实例和容器是…...

LeetCode题目笔记——2563. 统计公平数对的数目

文章目录题目描述题目链接题目难度——中等方法一&#xff1a;排序双指针代码/Python代码/C方法二代码/Python总结题目描述 这是前天周赛的第二题。 统计公平数对的数目 - 给你一个下标从 0 开始、长度为 n 的整数数组 nums &#xff0c;和两个整数 lower 和 upper &#xff0c…...

【MySQL Shell】8.9.5 将集群重新加入到 InnoDB ClusterSet

如果 InnoDB 集群是 InnoDB ClusterSet 部署的一部分&#xff0c;MySQL Shell 会在重新启动后立即自动将其恢复到拓扑中的角色&#xff0c;前提是其运行正常且未被标记为无效。但是&#xff0c;如果集群被标记为无效或其 ClusterSet 复制通道已停止&#xff0c;则必须使用 clus…...

元素水平垂直居中的方法有哪些?如果元素不定宽高呢?

实现元素水平垂直居中的方式&#xff1a; 利用定位margin:auto利用定位margin:负值利用定位transformtable布局flex布局grid布局 1-利用定位margin:auto <style>.father{width:500px;height:300px;border:1px solid #0a3b98;position: relative;}.son{width:100px;heig…...

访问学者在新加坡访学生活日常花销大吗?

新加坡地理位置优越&#xff0c;社会发达&#xff0c;教学质量好&#xff0c;吸引不少国内学生前往新加坡留学、访学。那么&#xff0c;去新加坡访学&#xff0c;访问学者花销需要多少钱呢&#xff1f;下面和51访学网小编一起来了解一下吧。 一、饮食 新加坡的饮食从很亲民的…...

XCP实战系列介绍11-几个常用的XCP命令解析

本文框架 1.概述2. 常用命令解析2.1 CONNECT连接(0xFF)2.2 SHORT_UPLOAD 命令(0xF4)2.2 SET_MTA (0xF6)2.3 MOVE命令(0x19)2.4 GET_CAL_PAGE(0xEA)2.5 SET_CAL_PAGE(0xEB)2.6 DOWNLOAD(0xF0)1.概述 在文章《看了就会的XCP协议介绍》中详细介绍了XCP的协议,在《XCP实战系列介绍…...

全志V853芯片 如何在Tina V85x平台切换sensor?

目的 V85x某方案目前默认Sensor是GC2053。实际使用时若需要用到GC4663&#xff08;比如wdr功能&#xff09;和SC530AI&#xff08;支持500W&#xff09;&#xff0c;可按如下步骤完成切换。 步骤 下面以GC4663为例&#xff0c;SC530AI按相应方式适配。 Step1 检查Sensor驱动…...

2023全网最火的接口自动化测试,一看就会

目录 接口自动化测试用例设计Excel接口测试用例访问MySQL接口测试用例访问PyTest测试框架接口自动化测试必备技能-HTTP协议request库实现接口请求 引言 与UI相比&#xff0c;接口一旦研发完成&#xff0c;通常变更或重构的频率和幅度相对较小。因此做接口自动化的性价比更高&…...

华为OD机试真题JAVA实现【最小传递延迟】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(JAVA)真题目录汇总华为OD机试(Python)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明解题思路核心知识点Code运行结果版权说...

Transformer

Transformer由4部分组成&#xff0c;分别是&#xff1a;输入模块、编码模块、解码模块、输出模块整体架构图&#xff1a;一、输入模块结构 &#xff08;1&#xff09;源文本嵌入层及其位置编码器&#xff08;2&#xff09;目标文本嵌入层及其位置编码器二、编码器模块结构由N个…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...