如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法

文章目录

  • 变量相关概念
    • 变量/常量
    • 类变量/静态变量
    • 成员变量/实例变量
    • 类属性/实例属性/对象属性
    • 什么是 field
  • 成员变量和类变量的区别
    • 两个变量的生命周期不同
    • 访问方式不同
    • 数据存储位置不同
  • 方法相关概念
  • 示例代码
  • 判断题

变量相关概念

变量/常量

所谓变量就是指可以改变的数据量,即数值可以改变。
所谓常量就是指不可以改变的数据量,即数值不可以改变,可以称为“常数”,也可以称为“定数”,与之相反的是变量。
在这里插入图片描述

类变量/静态变量

类变量是由 static 修饰的变量,也称为静态变量,可以通过类名访问,也可以通过实例对象来访问,通过对象访问也只是编码阶段这样写而已,在编译的时候会被自动转换成“类名称.变量名”的语法格式。

静态变量也叫字段(field)。

成员变量/实例变量

所谓“成员变量”就是类的成员的变量。类的成员就是类的实例对象,每个实例都有的变量叫成员变量。

static 修饰的变量都叫成员变量,也叫实例变量,也可以叫对象变量(很少这样叫),只能通过“实例对象”访问。

成员变量也叫字段(field)。

只有当为成员变量添加 get/set 方法时,我们才称该成员变量是类的属性。

类属性/实例属性/对象属性

类属性就是实例属性,也叫对象属性,是根据 get 方法得来的。

类属性的定义规则:get 方法名,去掉 get 后,将剩余部分首字母小写得到的字符串就是这个类的属性。

例如类 Person 含有方法 getName(),那么 name 就是该类的属性了。

下面例子中,属性名和成员变量名相同,都是 n

public class Test {private String n; // n是成员变量public String getN() { // n是类的属性return n;}public void setN(String n) {this.n = n;}
}

注:属性名和成员变量名通常情况下相同,这符合 JavaBean 规范。

下面例子中,属性是 name,成员变量 n 不是类的属性:

public class Test {private String n; // n不是类的属性public String getName() { // name是类的属性return n;}public void setName(String n) {this.n = n;}
}

注:上述例子的写法不推荐,不符合 JavaBean 的规范,但是我们要理解。

下面的例子中,我们称 username 为只读属性,因为只能通过 get 方法访问,没有提供写入的方法:

public class Test {private String userName; // userName是成员变量public String getUserName(){ // userName是类的属性return "aaa"; } 
}

什么是 field

类中方法外声明的所有变量(静态变量、成员变量、常量)就是 field,中文译为“字段”或“域”,通常称为“字段”。方法的参数、方法内的局部变量不可以称为 field

class A {private int a; // private field 私有域protected double b; // protected field 保护域public String c; // public field 公共域A d; // default access field 默认访问域public static Object e; // public static field 公共静态域
}

成员变量和类变量的区别

两个变量的生命周期不同

  1. 成员变量随着实例的创建而存在,随着实例对象的回收而消失

  2. 静态变量随着类的加载而存在,随着类的消失而消失

访问方式不同

  1. 成员变量只能通过对象来访问

  2. 静态变量可以通过对象来访问,也可以通过类名来访问,通过对象访问只是在编码阶段,编译期会转换成“类名.变量名”的语法格式

数据存储位置不同

  1. 成员变量存储在堆内存的对象中,所以也叫对象的特有数据

  2. 静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

方法相关概念

非静态的方法都叫成员方法,必须通过对象才能调用。包含非静态的私有方法、公共方法、保护方法、默认访问权限的方法。私有方法比较特殊,只能通过本类的方法进行调用,但是也必须通过对象才能调用。

静态的方法也叫类方法,只能通过类名进行调用,即便编码时通过对象调用静态方法,编译时也会转换成“类名称.静态方法名”的语法格式。

示例代码

package priv.lwx.javaprac.variable;
public class User {public static final String SKIN_COLOUR = "yellow"; // 这是常量,因为值不变;也叫类变量,也叫静态变量,使用static修饰,仅有一份,所有实例共享,也叫字段(field),不可以称为类属性,因为没有对应的get方法;不可以称为成员变量,因为是通过类名访问,不需要通过对象访问,和对象无关public static String nationality = "china"; // 这叫类变量,也叫静态变量,也叫字段(field),不是成员变量,也不是类属性private String name; // 只能通过对象访问,所以是成员变量,也叫实例变量,也叫字段(field),但是比较特殊,因为是私有的,所以只能由本来的方法才能访问,本类的方法也是通过对象才能访问public String getName() { // name是类的属性,也可以称为实例属性、对象属性,在Java中,类的属性不是看变量,而是看get方法return name;}public void setName(String name) {this.name = name;}
}

判断题

1.static 修饰的变量叫类变量,也就是类属性
答:错。不是类属性,属性看 get 方法

2.非 static 修饰的叫成员变量,也叫实例变量,也叫实例属性
答:错。不是实例属性,属性看 get 方法

3.类属性就是实例属性
答:对

4.有人说 static 修饰的变量才叫 field,有人说方法内声明的变量不能叫 field,参数也不能叫 field
答:错。类中方法外面声明的所有变量叫 field

5.类属性就是实例属性
答:对

6.实例属性就是类属性
答:对

7.实例属性就是类的成员变量
答:错,因为实例属性是根据 get 方法得来的,和类声明的变量无关

8.实例属性就是类变量或者实例变量(也叫成员变量)
答:错,因为实例属性是根据 get 方法得来的,和变量无关。有 static 修饰的变量叫类变量;没有 static 修饰的变量叫实例变量。

9.Java 类属性是如何定义的
答:类属性的定义规则是:将 get 方法名去掉 get 后,将剩余部分首字母小写得到的字符串就是这个类的属性,也叫实例属性。

10.类的成员变量就是类属性
答:错。类属性和变量无关,而是根据 get 方法得到类的属性。

11.类属性一定是类的成员变量
答:错。类属性和变量无关

12.类属性一定是类变量
答:错。类属性是根据 get 方法得到的,属性和变量没有半毛钱关系。类变量是静态变量。

13.类变量就是类属性
答:错。类变量是指 static 修饰的变量,也叫静态变量。而类属性则是根据 get 方法得来的,两者不是同一个概念

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333483.shtml

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

相关文章

无处不再的广告_我的机器人现在无处可去。 无家可归。 无服务器。

无处不再的广告我通常会关注各种网站-最新出版物,热门新报价,限时游戏和竞赛等。 其中大多数不提供“干净”的通知系统,例如RSS feed。 因此,我经常不得不刮擦他们HTML才能达到我的需求。 这意味着我经常需要运行一些自定义的字…

java service实例,javaweb后端实例 service

service的作用1.将前端需要的业务代码封装成接口2.将do数据封装为vo3.水平有限只知道这些下面展示的代码为将do封装为vopublic class StationService { private StationDao stationDao new StationDao(); public List listSLByYear(int year) { //创建vo链表 List list new L…

前端 JS 如何在一个页面中局部加载其它页面的数据

一个页面很大&#xff0c;可以分成多个部分&#xff0c;先把小部分的 jsp 写好之后&#xff0c;再在主页面中通过 Struts 2 标签或 ajax 请求来引入其它的 jsp 显示信息。 通过 jQuery 函数来加载其它页面的数据 <script> $(function () {$("#new").load(&qu…

switch字符串jdk_应用新的JDK 11字符串方法

switch字符串jdk在“ 使用JDK 11的Java字符串上的新方法 ”和“ String&#xff03;repeat即将加入Java&#xff1f; ”&#xff0c;我讨论了JDK 11引入Java String的六种新方法。 可用的早期访问JDK 11构建已经包含了这些新方法&#xff0c;在这篇文章中&#xff0c;我将使用…

aws lambda使用_使用AWS Lambda的CloudWatch事件通知

aws lambda使用CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前&#xff0c;它支持跨Auto Scaling组&#xff0c;EC2&#xff0c;EBS和其他各种事件发出的事件。 为了对这些事件进行有意义的处理&#xff0c;我们需要一种消耗它们的方法。 AWS使用术语“ targ…

Struts2中的OGNL表达式和ValueStack

文章目录OGNL 是干什么用的示例代码一示例代码二使用OGNL获取JavaBean对象的属性值获取集合属性中元素的属性的值XWork 中对 OGNL 的扩展示例代码Struts2 对 OGNL 的封装OGNL 可以用在哪些地方OGNL 的结构示意图XWork 对 OGNL 改造后的结构示意图Struts 2 对 OGNL 改造后的结构…

matlab画图五角星标记,Matlab---画图线型、符号及颜色

Matlab 画图线形、颜色、数据点形状的选择1&#xff0c;线形- Solid line (default)-- Dashed line: Dotted line-. Dash-dot line2&#xff0c;颜色r Redg Greenb Bluec Cyanm Magentay Yellowk Blackw White3&#xff0c;数据点的形状 Plus signo Circle* Asterisk. Pointx C…

php 淘宝客接口开发,如何使用PHP的curl函数调用维易淘客接口

《如何使用PHP的curl函数调用维易淘客接口》要点&#xff1a;使用curl调用维易淘客接口高佣转链维易淘客接口是用GET方式调用的&#xff0c;直接用GET调用即可&#xff0c;以下用PHP为例&#xff1a;使用curl调用维易淘客接口高佣转链&#xff1a;$apihttp://api.vephp.com/hca…

querydsl 转字符串_QueryDSL中包含通配符的字符串的精确匹配

querydsl 转字符串在我们最近的一个项目中&#xff0c;我们的客户要求一个搜索字段&#xff0c;该字段可以搜索名字&#xff0c;姓氏和电子邮件地址&#xff0c;唯一的通配符是星号“ *”&#xff0c;表示部分匹配。 听起来很简单&#xff0c;但这使我们陷入了混乱。 在我们的项…

Java中,我自己定义的某个类,去实现某个接口,是否必须实现该接口的全部抽象方法呢?

不一定&#xff0c;关键要看子类是否是抽象类。 如果子类是非抽象类&#xff0c;则必须实现接口中的所有方法&#xff1b;如果子类是抽象类&#xff0c;则可以不实现接口中的所有方法&#xff0c;因为抽象类中允许有抽象方法的存在&#xff01; 一、抽象类定义 抽象类往往用…

堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题

堆栈溢出 java您不应该错过的堆栈溢出问题集合&#xff1a; 这不是秘密&#xff1b; 我们都使用堆栈溢出。 它拥有生命&#xff0c;宇宙和几乎所有与代码相关的答案。 该平台为开发人员&#xff0c;工程师和其他人员提供了一个找到他们所面临问题的答案的地方&#xff0c;或者…

Java 的面向接口编程

假设有这样的代码&#xff1a; F f new G(); f.do(); f.cook(); ...F 是一个接口&#xff0c;G 是 F 的一个实现类&#xff08;也叫具体类/派生类&#xff09;。 如果现在需要另外一个实现类 H 采用其他技术实现接口 F 的所有抽象方法&#xff0c;那么只要修改一条代码&…

mysql 表数据diff,mysqldiff使用笔记

背景手上有个项目&#xff0c;有三个环境:本地开发,测试环境,线上环境&#xff0c;历史原因怀疑数据库表字段可能出现不匹配&#xff0c;所以寻找合适的工具比较数据库表结构。找到了mysqldiff。准备工具正好手上有台windows机器&#xff0c;使用windows版本测试安装mysqldiff是…

java超出gc开销_通过这5个简单的技巧减少GC开销

java超出gc开销编写代码的五种简单方法&#xff0c;可以提高内存效率&#xff0c;而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销&#xff1f; 您可能不知道确切的数字&#xff0c;但您确实知道总有改进的余地。 尽管自动GC是最有效的过程&#x…

JSTL(Java 标准标签库)

文章目录JSTL 简介JSTL 可以使用在哪里JSTL 使用步骤使用标签if 语句选择语句迭代遍历语句URL重写设置属性值删除属性值异常捕获导入其它 JSP 页面重定向输出指定的值JSTL 简介 Java Standard Taglib(Java 标准标签库)。 JSTL 是一种代替 JSP 中的 Java 代码的技术。sun 公司…

php hash代码下载,PHP中的哈希表 hash_insert

[php]代码库int hash_insert(HashTable *ht, char *key, void *value){// check if we need to resize the hashtableresize_hash_table_if_needed(ht); // 哈希表不固定大小&#xff0c;当插入的内容快占满哈表的存储空间// 将对哈希表进行扩容&#xff0c; 以便容纳所有的元素…

跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是关于使用此出色的库添加对分布式跟踪的支持所需内容的简要介绍。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程…

JDK命令之java -- 用来执行字节码文件,即用来执行Java程序

文章目录一、命令介绍二、用法格式三、常用选项四、常用选项详解-client&#xff0c;-server-hotspot-classpath,-cp-classpath-Dvalue-verbose[:class|gc|jni]-verbose:gc-verbose:jni-version-showversion-ea[:...|:] 和 -enableassertions[:...|:]-da[:...|:] 和 -disableas…

php中双引号的区别,PHP中单引号和双引号的区别

好久没有写博客了&#xff0c;都忘了积累知识啦……现在开始全新的生活&#xff0c;重拾记录的习惯。今天要写的就是PHP中单引号和双引号的区别。在PHP中&#xff0c;我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者&#xff0c;应该了解其中的区别。一、字符串…

sbe 详解_内部简单二进制编码(SBE)

sbe 详解SBE是用于金融行业的非常快速的序列化库&#xff0c;在本博客中&#xff0c;我将介绍一些使其快速发展的设计选择。 序列化的全部目的是对消息进行编码和解码&#xff0c;并且有很多可用的选项&#xff0c;例如XML&#xff0c;JSON&#xff0c;Protobufer&#xff0c;…