Java基础的重点知识-04-封装
文章目录
- 面向对象思想
- 封装
面向对象思想
在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。
- 面向对象思想的三大基本特征: 封装、继承、多态
1.类和对象
类是对象的抽象,对象是类的具体实例
比如我们把所有学生归为一个类叫做学生类,那么何为对象呢?对象就是学生类的一个具体示例,比如说是一个叫小明的学生,这就是这个类的一个对象。
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。
- 类的定义
成员变量:对应事物的属性
成员方法:对应事物的行为
public class ClassName {//成员变量//成员方法
}
- 对象的使用
创建对象:类名 对象名 = new 类名();
使用对象访问类中的成员: 对象名.成员变量;对象名.成员方法();
代码示例:
public class Student {String name;int age;public void play(){System.out.println("我爱打篮球!");}public static void main(String[] args) {Student xiaoMing = new Student();xiaoMing.name = "小明";xiaoMing.age = 18;System.out.println(xiaoMing.name + ":" + xiaoMing.age);xiaoMing.play();}
}

重点(成员变量的默认值):
| 数据类型 | 默认值 | |
|---|---|---|
| 基本类型 | 整数(byte,short,int,long) | 0 |
| 浮点数 (float,double) | 0.0 | |
| 字符(char) | ‘\u0000’ | |
| 布尔(boolean) | false | |
| 引用类型 | 数组,类,接口 | null |
- 对象内存图
-
一个对象调用一个方法内存图

-
两个对象,调用同一方法内存图

-
一个引用,作为参数传递到方法中内存图

- 成员变量与局部变量的区别
public class Bird {String name;int age;public static void main(String[] args) {String action = "";}
}
这里我们在类中方法外定义的变量是成员变量,在方法内定义的变量是局部变量,
- 在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数) - 作用范围不一样
成员变量:类中
局部变量:方法中 - 初始化值的不同 重点
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用 - 在内存中的位置不同
成员变量:堆内存
局部变量:栈内存 - 生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
封装
将成员变量隐藏在对象内部,外界无法对其进行直接修改或操作,增强代码的安全性
- 将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。
- 如何进行封装处理
首先是使用private关键字来修饰成员变量,再通过提供一对getXXX()方法和setXXX()方法,来供对象访问成员变量。
代码示例:
public class Student {private String name;private int age;public String getName() {return name;}public void setName(String n) {name = name;}public int getAge() {return age;}public void setAge(int a) {age = a;}public static void main(String[] args) {Student xiaoMing = new Student();xiaoMing.setName("小明");xiaoMing.setAge(18);System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());}
}
可以发现,我们通过公共的get、set方法来对成员变量进行设值和取值,但是这样的代码并不是最常见的。因此我们要了解this关键字。
- this关键字
this代表所在类的当前对象的引用(地址值),即对象自己的引用。
因为this表示所在类的当前对象的引用,所以我们可以通过this关键字来标识成员变量和传递的参数名,使我们的代码更加优雅。
注意: 当我们不使用this关键字来进行区别时,无法正确的进行成员变量的赋值。
package demo01;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public static void main(String[] args) {Student xiaoMing = new Student();xiaoMing.setName("小明");xiaoMing.setAge(18);System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());}
}
- 构造方法
无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法, 一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。
构造方法的定义
修饰符 构造方法名(参数列表){// 方法体
}
- 构造方法名与类名相同
- 构造方法没有返回值
代码示例:
package demo01;public class Student {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student(String name, int age) {this.name = name;this.age = age;}public Student(String name) {this.name = name;}public Student(int age) {this.age = age;}public Student() {}public static void main(String[] args) {Student xiaoMing = new Student("小明",18);System.out.println(xiaoMing.getName() + ":" + xiaoMing.getAge());}
}
从上代码我们可以看到,构造方法是可以重载的,但是我们也要注意,当我们只设定有参的构造方法的时候,无参构造方法就会消失。但是我们java中有些框架在进行反射时是需要无参构造器的支持的,所以在我们创建类的时候最好是定义好有参构造方法以及无参构造方法
欢迎java热爱者了解文章,作者将会持续更新中,期待各位友友的关注和收藏。。。
相关文章:
Java基础的重点知识-04-封装
文章目录 面向对象思想封装 面向对象思想 在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 面向对象思想的三大基本特征: 封装、继承、多态 1.类和对象 类是对象的抽象ÿ…...
win7 的 vmware tools 安装失败
没有安装vmware tools的系统屏幕显示异常。桌面是比较小的图像,四周是黑边在 vmware 软件里 方法1,下补丁 https://www.catalog.update.microsoft.com/Search.aspx?qkb4474419 方法2,使用老版vm tools http://softwareupdate.vmware.com/c…...
【杂记-浅谈OSPF协议之IR、ABR、ASBR、BR】
OSPF协议之IR、ABR、ASBR、BR 一、 内部路由器 IR二、骨干路由器 BR三、边界路由器 ABR四、自治系统边界路由器 ASBR 一、 内部路由器 IR 概念 IR,Internal Router,即内部路由器,指的是所有接口都属于同一个OSPF区域的路由器。这类路由器只维…...
element 问题整合
没关系,凡事发生必有利于我 文章目录 一、el-table 同级数据对齐及展开图标的位置问题二、el-table 勾选框为圆角及只能勾选一个 一、el-table 同级数据对齐及展开图标的位置问题 element 官方提供的扩展tree型数据在表格里默认是靠左边对齐,项目需求需要…...
Linux下vi文件的时候替换指定的内容
需要将nginx.conf中的192.168.222.188,替换为178.21.120.225 操作步骤: 1、vi 文件 vi nginx.conf2、输入 :%s/192.168.222.188/178.21.120.225/g3、最后保存 :wq...
【知识学习】阐述Unity3D中MaterialTexture的概念及使用方法示例
在Unity3D中,Material和Texture是渲染过程中非常重要的两个概念,它们共同工作以实现丰富的视觉效果。 Material Material是Unity中的一个组件,用于定义物体表面的视觉属性。一个Material可以包含多种属性,如颜色、纹理、反射率等…...
java创建0byte的空文件
在Java中,使用File类创建一个文件通常不会自动创建一个0字节的文件,它只是用来表示文件系统中的一个文件或目录。如果你想要创建一个0字节的文件,你需要使用FileOutputStream来写入文件。以下是创建一个0字节文件的示例代码: imp…...
Qt 实战(6)事件 | 6.2、事件过滤器
文章目录 一、事件过滤器1、什么是事件过滤器?2、如何实现事件过滤器?3、应用示例4、总结 前言: 在Qt的事件处理机制中,事件过滤器(Event Filter)是一种非常强大且灵活的工具,它允许开发者在一个…...
【PyTorch】【机器学习】图片张量、通道分解合成和裁剪
一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释:先用Image.open()方法读取jpg格式图片,再用np.array()方法将图片转成…...
如何提高工业交换机的电源功耗?
工业交换机的电源功耗是指在工作状态下所消耗的能量。随着工业自动化技术的发展,工业交换机在生产和制造领域中扮演着至关重要的角色。它们通过连接各种设备和系统,实现信息的传输和处理,提高生产效率和质量。然而,工业交换机的大…...
源站静态文件更新后,CDN会自动刷新吗
源站静态文件更新后,CDN不会自动刷新缓存,而是在缓存时间过期后,才会经由用户触发回源获取最新文件。如希望在缓存过期时间之前,实现CDN节点与源站静态文件同步更新,则需要通过CDN控制台-【刷新预取】菜单,…...
Token的应用场景
JWT JWT由三部分组成:头部(Header)、有效载荷(Payload)和签名(Signature)头部通常指定了Token的类型和使用的哈希算法;有效载荷包含了一系列的声明,例如用户的ID、Token…...
机器学习课程复习——奇异值分解
1. 三种奇异值分解 奇异值分解(Singular Value Decomposition, SVD)包含了: 完全奇异值分解(Complete Singular Value Decomposition, CSVD)紧奇异值分解(Tight Singular Value Decomposition, TSVD&…...
Java--乐观锁
乐观锁是一种并发控制机制,用于处理多个事务或线程对同一数据进行并发修改的问题。它假设多个事务或线程在操作数据时不会互相干扰,因此不在数据上加锁,而是在提交数据时检查数据是否被其他事务修改过。如果数据在提交前已经被其他事务修改&a…...
静默升级oracle 11g (从11.2.0.1升级到11.2.0.4)
原文:https://www.cnblogs.com/daizhengyang/p/13353783.html 一个环境是oracle 11.2.0.1,一个环境是oracle 11.2.0.4,同样的数据,同样的sql,在两个版本数据库表现不一样。于是,干脆都统一为11.2.0.4。 但…...
什么是模型训练,如何选择合适的Batch大小
模型训练是指使用数据集对模型进行训练,使其能够从数据中学习到特征和模式,进而完成特定的任务。在深度学习领域,通常使用反向传播算法来训练模型,其中模型会根据数据集中的输入和输出,不断更新其参数,以最…...
【线上绘图网站分享】
好用的线上绘图网站分享 使用场景特点使用例子 Excalidraw 使用场景 流程图绘制、组会分享工具等; 特点 最重要的就是:免费!! 简单,快捷:有时候临时要画一个流程图之类的用来示意、分享知识点ÿ…...
Snipaste截图工具如何控制框线箭头的粗细程度
我们使用Snipaste截图工具的时候,最常用的就是框线和箭头这些功能,有时候感觉很粗有时候感觉太细了,如何解决呢?我们可以在使用框线或者箭头之后,长按1或者2来控制框线箭头的粗细程度。其中1是变细,2是变粗…...
GISSERVER 管理器 1.0(私有化地图离线部署)
一、 简介 QGIS现在在全世界已经成为ARCGIS的最佳代替产品,而且是开源免费的。其用户社区和产品功能都已经可以与arcgis相媲美! GISSERVER管理工具是一个零代码地图网站建站工具(私有化地图离线部署),可以直接将QGIS工程转换为GIS网站(功能类似ARCGISM…...
Eureka服务治理深度解析:服务下线与剔除机制揭秘
Eureka服务治理深度解析:服务下线与剔除机制揭秘 在微服务架构中,服务的动态注册与发现是保证系统高可用性的关键。Netflix开源的Eureka作为服务发现框架,其服务下线与剔除机制是确保服务列表准确性的重要手段。本文将深入探讨Eureka中的服务…...
如何彻底解决文献格式混乱?Zotero格式规范化处理工具的创新方案
如何彻底解决文献格式混乱?Zotero格式规范化处理工具的创新方案 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and…...
相场法模拟二元合金中考虑溶质偏析的comsol枝晶生长研究
comsol枝晶生长相场法模拟 二元合金 考虑溶质偏析枝晶生长这玩意儿在材料模拟里算是经典难题了。咱们用相场法搞COMSOL模拟的时候,最刺激的就是看那些枝晶分叉怎么从混乱中长出来。这次搞的是二元合金体系,重点得盯着溶质偏析这个捣蛋鬼——它能让晶体长…...
UDOP-large算力优化:FP16推理+FlashAttention加速UDOP-large响应速度
UDOP-large算力优化:FP16推理FlashAttention加速UDOP-large响应速度 1. 为什么你的UDOP-large模型跑得不够快? 如果你用过UDOP-large这个文档理解模型,可能会发现一个问题:处理文档图片的时候,有时候响应速度不够理想…...
PROJECT MOGFACE自动化运维:服务器监控日志分析与告警报告生成
PROJECT MOGFACE自动化运维:服务器监控日志分析与告警报告生成 每天凌晨,当运维工程师小李被手机告警铃声惊醒,睡眼惺忪地打开电脑,面对几十台服务器海量的监控图表和日志文件时,他总在想:有没有一种方法&…...
RenderDoc实战:5分钟搞定OpenGL性能瓶颈定位(附Android联调技巧)
RenderDoc实战:5分钟定位OpenGL性能瓶颈的完整指南 移动端图形开发最令人头疼的瞬间,莫过于看到测试报告上"FPS波动大"的红色标记,却不知道从哪开始排查。上周团队里新来的工程师花了三天时间逐行检查着色器代码,最后发…...
CSS动画+超级千问:打造有呼吸感的语音合成反馈系统(实战教程)
CSS动画超级千问:打造有呼吸感的语音合成反馈系统(实战教程) 1. 项目介绍与核心价值 1.1 传统TTS工具的痛点 大多数语音合成工具的操作体验是这样的:面对一堆参数滑块,反复调整"语速"、"音高"、…...
Open UI5 源代码解析之735:DynamicPageAccessibleLandmarkInfo.js
源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.f\src\sap\f\DynamicPageAccessibleLandmarkInfo.js DynamicPageAccessibleLandmarkInfo 文件深度解析 文件定位与总体判断 当前分析对象位于 src/sap.f/src/sap/f/DynamicPageAccessibleLandmarkInfo.j…...
Qwen3-Reranker-0.6B一文详解:轻量0.6B参数如何实现SOTA级重排序性能
Qwen3-Reranker-0.6B一文详解:轻量0.6B参数如何实现SOTA级重排序性能 1. 引言:为什么你需要关注这个0.6B的小模型? 如果你用过搜索引擎,肯定有过这样的体验:输入一个问题,搜出来一堆结果,但真…...
在Ubuntu 20.04上搞定Synopsys SpyGlass 2016:一份针对高内核版本的详细避坑指南
在Ubuntu 20.04上搞定Synopsys SpyGlass 2016:一份针对高内核版本的详细避坑指南 当IC设计工程师遇到Ubuntu 20.04与SpyGlass 2016的版本冲突时,那种熟悉的挫败感往往伴随着终端里红色的报错信息一起涌现。这不是简单的"安装-运行"问题&#x…...
Phi-4-mini-reasoning一文详解:专为多步推理设计的开源大模型实战
Phi-4-mini-reasoning一文详解:专为多步推理设计的开源大模型实战 1. 模型概述 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理需要多步分析的复杂问题。与通用聊天模型不同,它被设计用来解决数学题、逻辑题等需要逐…...
