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

深入理解Java中的字段与属性的区别

1、Java中的属性和字段有什么区别?

答:Java中的属性(property),通常可以理解为get和set方法。

而字段(field),通常叫做“类成员”,或 "类成员变量”,有时也叫“域”,理解为“数据成员”,用来承载数据的。

这两个概念是完全不同的。

2、属性和字段详解

◆◆字段(filed)

------------------------------------------------------------------------------------

类成员(字段),通常是在类中定义的类成员变量,例如:

public class A{

private String s = "123";

}

我们可以说A类中有一个成员变量叫做s,A类有一个字段s 。

字段一般用来承载数据,所以为了安全性,一般定义为私有的。

字段和常量描述了类的数据(域),当这些数据的某些部分不允许外界访问时,

根据 “对象封装” 的原则,应尽量避免将一个类型的字段以公有方式提供给外部。除了final修饰的常量。

一般将其设置为private类型。既然是私有,那外界怎么访问呢? 当然是通过Java的属性方法!

◆◆属性(property)

-------------------------------------------------------------------------

属性只局限于类中方法的声明,并不与类中其他成员相关,属于JavaBean的范畴。例如:

void setA(String s){}

String getA(){}

当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a)。如果去掉了set的方法,则是可读属性,反之亦然。

其规则是:去掉get或set后其剩余的字符串,

如果第二个字母是小写的,则把第一个字母也变成小写

getAge---->age

getCPU---->CPU

虽然在实际项目的开发过程中,公共字段和属性在合适的条件下都可以使用,但是我们应该尽可能的使用属性(property),而不是数据成员(field);

把所有的字段都设置为私有字段,如果要暴露它们,则把它们封装成属性,这也是最佳实践推荐的方式。除了一些常量不能修改的字段,可以设置为public final static类型。

3、总结:

区别开属性与字段是为了更好的实现数据安全,比如当我们想给一个类的属性赋值或者其他类用到了,就需要将这个字段设置为public,然而这样可以对字段进行任意的读写操作,非常不利于数据安全。于是就加上了属性,简单说属性实现了字段的封装,属性有get、set 方法来控制字段,该字段的属性只有set方法没有get方法,就只可以对该方法进行赋值操作,没有读操作,反之亦然。就是对对字段的操作通过属性来控制。

可以创建属性,将字段和属性封装在一起。通过属性可以像访问字段一样访问数据成员,实现数据的封装,避免使用非法数据赋值,保证数据完整性,同时类内部发生修改时,避免整个程序的修改。

基于get,set方法的反射不会破坏对象数据,IDE可以通过约定做些智能提示。如果你自己用反射,你想做些通用处理,去遍历每个字段,没人跟你说哪个字段能写,那个能读,你没法处理嘛。

在我们项目中用到属性和字段的多半就是POJO、JavaBean、DTO、VO等等了。

标准的JavaBean:

JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”,有时也叫DTO(数据传输对象)。方法比较少。这些信息储存在类的私有变量中,通过set()、get()获得。

JavaBean在Java EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象(内省机制),并且通过反射那些遵循命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

相关文章:

深入理解Java中的字段与属性的区别

1、Java中的属性和字段有什么区别? 答:Java中的属性(property),通常可以理解为get和set方法。 而字段(field),通常叫做“类成员”,或 "类成员变量”,有时也叫“域”,理解为“数据成员”&…...

【Locust分布式压力测试】

Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…...

富格林:出金异常警惕黑幕陷阱受骗

富格林悉知,在做单出金时落入黑幕陷阱亏损后,需尽快发现和总结错误,用心筹维权谋安全出金盈利方法并追回亏损。因为黄金市场优势众多,众多的投资者进入市场投资,但因为经验不足,在面对黑幕陷阱是获取无法及…...

Docker - Nginx

博文目录 文章目录 说明命令 说明 Docker Hub Nginx 数据卷数据卷印射在容器内的路径nginx.conf/etc/nginxnginx.html/usr/share/nginx/htmlnginx.log/var/log/nginx 容器内的路径说明/etc/nginx/nginx.conf配置文件/etc/nginx/conf.d配置目录/usr/share/nginx/html静态目录/…...

免费搭建幻兽帕鲁服务器(Palworld免费开服教程)

随着互联网技术的不断发展和普及,网络游戏已经成为了人们休闲娱乐的重要方式之一。而在众多网络游戏中,幻兽帕鲁以其独特的游戏设定和玩法,吸引了大量玩家的关注。为了满足广大玩家的需求,本文将介绍如何免费搭建幻兽帕鲁服务器&a…...

作业习题

实验代码: import java.util.Scanner;class chazhao {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入你要的数组");String line sc.nextLine();String[] lineArrline.split(" ");int[…...

解决unbuntu更新到23.10 mantic firefox无法使用的问题

产看历史版本号: 升级到最新版本后查看: roottesthost01:/home/test/Desktop# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 23.10 Release: 23.10 Codename: mantic 打开firefox发现图标找…...

idea常用配置——注释快捷键

1、单行注释:使用 Ctrl / 可以添加或删除当前行的注释。如果你想要给某一行添加注释,只需要将光标放在那一行,然后按下 Ctrl / 即可。如果你想要删除那一行的注释,同样只需要将光标放在那一行,然后再次按下 Ctrl /。…...

Hidl 学习总结 2

1、Android apk 调用Hidl处理 app添加对应的hidl jar包 2、MainActivity 添加如下代码 package com.example.test2;import androidx.appcompat.app.AppCompatActivity; import vendor.hardware.test.V1_0.ITest; import vendor.hardware.test.V1_0.ITestCmdCallback; import …...

深度学习学习日记4.7

1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测, 反向传播进行训练(每一个参数通过梯度下降进行更新参数),(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数,就是更好的参数。 损失…...

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…...

自动驾驶中的交通标志识别原理及应用

自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验:链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路,以促进道路行车安全,而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…...

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型,减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参(1) 贪心调参(2)…...

【Java】Java使用Swing实现一个模拟计算器(有源码)

📝个人主页:哈__ 期待您的关注 今天翻了翻之前写的代码,发现自己之前还写了一个计算器,今天把我之前写的代码分享出来。 我记得那会儿刚学不会写,写的乱七八糟,但拿来当期末作业还是不错的哈哈。 直接上…...

MC9S12DJ64微控制器

这份文件是关于Freescale的MC9S12DJ64微控制器的用户指南,包含了关于该设备的详细信息和使用说明。以下是核心内容的整理: 产品信息: 产品信息详细描述如下: 1. **产品名称**:- MC9S12DJ64微控制器单元(MCU)2. **核心…...

小程序打开空白的问题处理

小程序打开是空白的,如下: 这个问题都是请求域名的问题: 一、检查服务器域名配置了 https没有,如果没有,解决办法是申请个ssl证书,具体看这里 https://doc.crmeb.com/mer/mer2/4257 二、完成第一步后&#…...

langchain + azure chatgpt组合配置并运行

首先默认你已经有了azure的账号。 最重要的是选择gpt-35-turbo-instruct模型、api_version:2023-05-15,就这两个参数谷歌我尝试了很久才成功。 我们打开https://portal.azure.com/#home,点击更多服务: 我们点击Azure OpenAI&#…...

【JVM性能调优】- GC调优实操思路

1、GC调优实操思路 前面几点所提及的都是GC调优的一些方法论以及衡量指标,但在真正需要处理GC调优时,上面几点只能给你提供辅导,并不能建立完善的调优思路,因此,接下来再一同论述GC调优的具体实操思想。 GC调优时&…...

四川教育装备行业协会考察团走访云轴科技ZStack共话技术创新应用

近日,四川省教育装备行业协会高等教育技术专业委员会组织了一次深入的考察活动,旨在加强与其他省市高校及企业之间的交流与合作,学习借鉴先进的教育装备与管理经验,以提升本省的高等教育技术水平。考察团一行先后走访了武汉理工大…...

KIVY 学习1

环境 python 3.6 3.7 对应Kivy 1.11.1版本各依赖 python -m pip install docutils pygments pypiwin32 kivy_deps.sdl20.1.22 kivy_deps.glew0.1.12 这是一个用于安装Python包的命令,它会安装一些特定的包。具体来说,这个命令会安装以下包: …...

在Go语言中使用select和channel来期待确定性行为

Go开发人员在使用channel时常犯的一个错误是,对select在多个channel中的行为方式做出错误的假设。错误的假设可能会导致难以识别和重现的细微错误。假设我们要实现一个需要从两个channel接收消息的goroutine: 我们可能会决定像下面这样处理优先级: for {select {case v := &…...

【MATLAB源码-第19期】matlab基于导频的OFDM系统瑞利信道rayleigh的信道估计仿真,输出估计与未估计误码率对比图。

1、算法描述 正交频分复用(英语:Orthogonal frequency-division multiplexing, OFDM)有时又称为分离复频调制技术(英语:discrete multitone modulation, DMT),可以视为多载波传输的一个特例&am…...

坚持十天做完Python入门编程100题第三天加班

坚持十天做完Python入门编程100题第三天加班 第24题 扫描文件列表第25题 如何将字典转换成JSON并写入json文件?第26题 JSON转换成字典 第24题 扫描文件列表 如何扫描当前目录下的文件列表?解析:可以使用python内置的glob模块,用法…...

MSOLSpray:一款针对微软在线账号(AzureO365)的密码喷射与安全测试工具

关于MSOLSpray MSOLSpray是一款针对微软在线账号(Azure/O365)的密码喷射与安全测试工具,在该工具的帮助下,广大研究人员可以直接对目标账户执行安全检测。支持检测的内容包括目标账号凭证是否有效、账号是否启用了MFA、租户账号是…...

uos安装lxml避坑记录

环境:紫光电脑uos系统 python:系统自带3.7.3 条件:已打开开发者模式,可以自行安装应用商店之外的软件 一、pip3 install lxml4.8.0可以正正常下载,但出现如下错误 另:为什么是4.8.0?因为这个…...

518. 零钱兑换 II(力扣LeetCode)

文章目录 518. 零钱兑换 II题目描述动态规划一维数组为什么不能交换两个for循环的顺序? 二维数组 518. 零钱兑换 II 题目描述 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数…...

01串的熵(蓝桥杯)

文章目录 01串的熵问题描述答案:11027421题意解释暴力枚举 01串的熵 问题描述 对于一个长度为n的01串 S x 1 x 2 x 3 x_{1}x_{2}x_{3} x1​x2​x3​… x n x_{n} xn​,香农信息熵的定义为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1…...

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型,包括整型(如i32、u32)、浮点型(如f32、f64)、布尔类型(bool)和字符类型(char)。此外,Rust还提供了原生数组、元组…...

【Java SE】10 String类

目录 1. String类的重要性 2.常用方法 2.1字符串构造 2.2 String对象的比较 2.3字符串查找 2.4转化 2.5字符串替换 2.6字符串拆分 2.7字符串截取 2.8其他操作方法 2.9字符串的不可变性 2.10字符串修改 3. StringBuffer和StringBuilder 3.1StringBuilder的介绍 4.…...

web蓝桥杯真题:新鲜的蔬菜

代码: .box {display: flex; } #box1 {align-items: center;justify-content: center; }#box2 {justify-content: space-between; } #box2 .item:nth-child(2) {align-self: end; }#box3 {justify-content: space-between; } #box3 .item:nth-child(2) {align-self…...