Java 字段

  • 前言
  • 概述
  • 声明字段
    • 修饰符
    • 类型
    • 字段名
  • 分类
  • 访问字段
    • 引用静态字段
    • 引用非静态字段
    • 更改实例变量值

前言


  • 本文原创作者为 Blume,版权归原创作者所有。
  • 本文主要内容根据 Java 官方教程中《课程:语言基础》和《课程:类和对象》的相关章节编写而成。
  • 本文更新(修订)于 2021 年 4 月 5 日。
  • 本文网址为 https://blog.csdn.net/weixin_48390834/article/details/115301392
  • 商业性转载请联系原创作者,非商业性转载请注明出处。

【目录】

概述


字段(Field),是 Java 编程语言中类的一个成员,主要用来存储对象的状态(如同某些编程语言中的变量),所以有时也可称为成员字段或成员变量。

在类中有下列几种变量(Variable):

  • 类中的成员变量,称为字段。
  • 代码块中的变量,称为局部变量。
  • 方法和构造方法声明中的变量,称为参数。

局部变量和参数始终被归类为“变量”(而不是“字段”)。

【目录】

声明字段


/*** 字段示例** @author Blume*/
public class FieldDemo {public static void main(String[] args) {// 类中的常量字段可直接访问而无需创建对象。System.out.println(MyField.CONSTANT_FIELD);System.out.println("---- ---- ---- ---- ----");// 类中的静态字段可直接访问而无需创建对象。MyField.sharedField = "sharedField:\n这是在 MyField 类中的字符串静态字段。";System.out.println(MyField.sharedField);System.out.println("---- ---- ---- ---- ----");// 类中的实例变量只有在创建对象后才能访问。final MyField demo = new MyField();demo.setName("name:\n这是在 MyField 类中的字符串实例变量。");System.out.println(demo.getName());}
}/*** 定义 MyField 类** @author Blume*/
class MyField {// 声明一个常量字段。public static final String CONSTANT_FIELD ="CONSTANT_FIELD:\n这是在 MyField 类中的字符串常量字段。";// 声明一个静态字段。public static String sharedField;// 声明一个实例变量。private String name;// 获取实例变量值。public String getName() {return name;}// 设置实例变量值。public void setName(String name) {// 可插入用于更改实例变量值的条件判断语句,// 以防实例变量值被意外或非法更改。this.name = name;}
}
/* 输出结果:
CONSTANT_FIELD:
这是在 MyField 类中的字符串常量字段。
---- ---- ---- ---- ----
sharedField:
这是在 MyField 类中的字符串静态字段。
---- ---- ---- ---- ----
name:
这是在 MyField 类中的字符串实例变量。*/

如上例所示,字段声明通常包括下列几个部分,顺序如下:

  1. 零个、一个或多个修饰符,如 public、protected、private、static、final 等。
  2. 类型。
  3. 字段名。

【目录】

修饰符

可在字段声明的开头部分添加 public、protected 或 private 访问修饰符或者不加,用来表示字段的访问控制级别。

也可在访问修饰符之后添加其他修饰符:

【目录】

类型

所有字段,包括局部变量和参数,都必须具有类型。

可使用原初类型(Primitive Type):

也可使用引用类型(Reference Type):

还可使用类、接口或原初类型的数组类型(Array Type)。比如,int[] 表示一个 int 原初类型的一维数组类型(请参阅 arrayType(int) 示例)等。

【目录】

字段名

所有变量,无论是成员变量、局部变量还是参数,都应遵循以下的命名规则和约定:

  • 变量名可以是任何合法的标识符:

    • 字母(a - zA - Z):长度不限。
    • 数字(0 - 9):长度不限。
    • 美元符($):按惯例,根本不使用美元符。一些自动生成的名称中可能会包含美元符(请参阅 nested(String) 示例),但变量名应始终避免使用它。
    • 下划线(_):按惯例,变量名不使用下划线。下划线只用于常量字段名。
    • 不允许使用空格符。
  • 按惯例,变量名以字母开头,后续字符可以是字母或数字。
    • 从技术上讲,以美元符或下划线开头是合法的,但不鼓励这种做法。
    • 后续字符应避免使用美元符和下划线,尽管这样做也是合法的。
    • 不允许以数字开头。
  • 为变量选择名称时,请使用完整单词,这样做可使代码更易于阅读和理解。
    • 应避免使用晦涩难懂的缩写。
    • 不允许将关键字或保留字用作变量名。如 packageimportclassinterfacedefault 等等。
  • 变量名对大小写敏感,如 demoDEMO 将视为两个名称。
    • 如果只有一个单词,请将单词中的字母全部小写。如前面示例中的 name 字段。
    • 如果由多个单词组成,请将第一个单词中的字母全部小写,并将紧跟其后的每个单词的首字母大写。如前面示例中的 sharedField 字段。

除下列两项外,变量的命名规则和约定适用常量字段:

  • 名称中的字母应全部大写。
  • 若由多个单词组成,则单词之间用下划线分隔。如前面示例中的 CONSTANT_FIELD 字段。

字段名不能与同一类中另一个字段的名称相同。若字段与其所在类中的局部变量或参数具有相同的名称,则会发生遮蔽。具体请参阅《遮蔽 - 重名问题》。

【目录】

分类

按使用修饰符的不同,字段可分为:

  • 常量字段:声明为 static final 的字段,可视为常量(Constant)。由于常量字段与对象是否创建无关,所以在定义类时就要给定其初始值。如前面示例中的 CONSTANT_FIELD 字段。
  • 静态字段(Static Field):声明为 static 的字段。常量字段和类变量都属于静态字段。
  • 非静态字段(Non-Static Field):没有声明为 static 的字段。又可称为实例变量。
  • 成员变量(Member Variable):除常量字段外的其他所有字段。
    • 实例变量(Instance Variable):没有声明为 static 的成员变量,它就是非静态字段。从技术上讲,对象将各自的状态存储在“实例变量(非静态字段)”中,它们的值对类的每个实例(每个对象)来说都是独有的。因此,本着封装的精神,将实例变量(非静态字段)声明为 private 是值得提倡的。如前面示例中的 name 字段。
    • 类变量(Class Variable):声明为 static 的成员变量,它属于静态字段。如前面示例中的 sharedField 字段。
    • 提示:声明为 final 的成员变量,类似于常量,可作为对成员变量值的一种限定和保护。

【目录】

访问字段


字段通过其名称进行访问。在访问时,必须使用明确无误的名称。

在方法中,可使用一个简单名称来表示其所在类中的字段:

    public String getName() {return name;}

在这种情况下,name 是简单名称。

【目录】

引用静态字段

由于静态字段与对象的创建无关,所以在访问它时,使用类名或相关表达式,然后是点(.)操作符,然后是静态字段的简单名称:

        System.out.println(MyField.CONSTANT_FIELD);System.out.println(MyField.sharedField);

【目录】

引用非静态字段

若非静态字段没有声明为 private,则在它所在的类外访问它时,必须使用对象引用或相关表达式,然后是点(.)操作符,然后是非静态字段的简单名称。

  • 提示:不鼓励用上述方式来访问非静态字段,因为这不符合面向对象编程的基本原则,所以建议将非静态字段声明为 private。

【目录】

更改实例变量值

建议将实例变量声明为 private,否则可能会产生面条式代码(Spaghetti Code)。如果可在类外更改该类中的实例变量值,那么该实例变量将会变得不确定,因为任何一段在类外的代码都有可能改变其值。

可使用方法来更改实例变量值:

    public void setName(String name) {// 可插入用于更改实例变量值的条件判断语句,// 以防实例变量值被意外或非法更改。this.name = name;}

【目录】


Java | 字段(Field)相关推荐

  1. java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘

    java枚举类中字段有没有必要加final 今天在写一个系统统一返回码的枚举类时候,突然想到一个问题,当不小心手抖给枚举类自动生成了set方法,而恰巧在用的地方不小心用了set方法,从而修改了code ...

  2. Java反射 field

    Java反射 field 获取字节码文件对象 Class c = Class.forName("fieldtest.Student"); 通过无参构造方法创建对象obj Const ...

  3. Java 字段在内存中存储是大端还是小端

    Java 字段在内存中是小端存储的,即低位字节在前,高位字节在后. 大小端的最小单位是字节,即大小端决定的是字节的排序. 而字节内部的排序永远不受影响,永远都是高位在前,低位在后. 验证 比如存储一个 ...

  4. java字段_java字段是什么

    Java中的属性和字段有什么区别? Java中的属性(property),通常可以理解为get和set方法. 而字段(field),通常叫做"类成员",或 "类成员变量& ...

  5. java反射field和method的顺序问题

    最近在有思考到序列化性能优化的问题,关于java反射field和method的顺序问题,这里有详细的讨论http://stackoverflow.com/questions/5001172/java- ...

  6. python怎么设置字段_Django Model中字段(field)的各种选项说明

    字段与选项 CharField() 字符字段 max_length = xxx or None # 必选项 blank = True 和 default = '' # 如果不是必填项,可以设置 uni ...

  7. java 字段构造函数_依赖注入–字段vs构造函数vs方法

    java 字段构造函数 嗨,今天,我想简短地讨论将依赖项注入您的类的不同方式. 通常,您有以下三种注射方法 直接进入字段/属性 通过显式的setter方法 通过显式的构造函数参数 现场注入 这种类型的 ...

  8. java jsonalias_将多个JSON字段映射到单个Java字段

    简介 本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中. Maven依赖 为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项: com.go ...

  9. java 字段名重复,java – JSON响应中的重复字段

    我在我的项目中使用Spring boot Jackson依赖项和lombok,作为回应我因为下划线而得到重复的字段 这是我的模型类: @Getter @Setter @Accessors(chain ...

最新文章

  1. Gartner 2019年人工智能成熟度曲线的超前趋势
  2. 超强1000个jquery极品插件!(连载中。。。。最近更新20090710)
  3. 介绍LuaPlus: 好用的Lua For C++扩展(修订)
  4. Netty原理二:NioEventLoop 如何启动监听事件
  5. 【图神经网络】基于GNN的不同变种及其应用
  6. 4.4 IPv6(诞生原因、数据报格式、与IPv4的不同、地址表现形式、基本地址类型、IPv6与IPv4的过渡策略)
  7. “约见”面试官系列之常见面试题之第五十三篇之网站的资源优化(建议收藏)
  8. win ftp 指定的密码无效。请键入新密码。_重设OS X (macOS)系统帐户密码的5种方法...
  9. datatable的使用
  10. Bootstrap3 滚动监听插件的方法
  11. 概率与计算机论文,数学概率统计论文范文
  12. linux+mmap父子通信_Linux 系统开发5 进程间通信 pipe() fifo() mmap()
  13. 百度的71个炸天的开源项目
  14. IMDB评出来的100部最难看的电影排行榜
  15. mermaid 饼图使用指南
  16. 短信网关通道对接及分流策略说明
  17. 大牛教你怎么学习Java多进程,下载量瞬秒百万
  18. java sign函数_C / C ++中是否有标准的符号函数(signum,sgn)?
  19. 微信小程序开发和APP开发有哪些区别
  20. 【Linux】揭露定时任务真相

热门文章

  1. 记录一次docker扩容
  2. 将IEEE参考文献导入Endnote的方法
  3. 缓存服务器设计与实现(五)
  4. php获取视频文件属性,使用php获取flv视频文件的信息
  5. win/mac/linux谷歌浏览器与driver对应版本下载
  6. csv的Dialect简单使用讲解
  7. PHP每一章的参考题,php 试题总结(附参考答案)
  8. 电子地图与纸张地图的比较
  9. 当幸福来敲门。。。。。。。。。。
  10. 阿里巴巴大数据计算平台MaxCompute(原名ODPS)全套攻略(持续更新20171127)