Java 静态域和静态方法

2023-05-16

main方法都被标记为static修饰符,本文讨论一下该修饰符含义。

静态域和静态方法

  • 一、静态域
    • 静态常量
  • 二、静态方法
  • 三、工厂方法


一、静态域

若把域定义为static,则每个类中只有一个这样的域。而每一个对象对于所有的实例域都有一份自己的拷贝。例如,给定一个雇员赋予其唯一的标识码,这里给employee添加一个实例域id和 静态域nextId。

class Employee {
	private static int nextId = 1;
	private int id;
	......
}

换句话说,每一个雇员对象都有一个自己的id域,但是这个类的所有实例域将会共享一个nextId域,若有1000个employee对象,则有1000个实例域id,但是只有一个静态域nextId。即使没有雇员对象,静态域nextId也存在。它属于类,不属于任何独立对象。

注释: 在绝大多数面向对象中,静态域称之为类域。static只是沿用了Cpp的叫法,无实际意义。

下面实现了一个简单的方法:

public void setId() {
	id = nextId;
	nextId++;
}

静态常量

静态变量使用较少,但是静态常量使用较多,如下,Math类定义一个静态常量:

public class Math {
	...
	public static finale double PI = 3.141592653585;
	...
}

前面提到过,由于每个类对象都可以对公共域进行修改,所以不要把域设计为public;另外,共有常量即final域却没有任何问题。

System.out = new PrintStream(....)	//Error,out is final

二、静态方法

静态方法是一种不能向对象实施操作的方法。例如Math类的pow方法就是一个静态方法,

Math.pow(x, a);

在运算时,不适用任何Math对象。换句话说,没有隐式的参数。
可以认为静态方法是没有this参数的方法,在一个非静态的方法中,this参数表示这个方法的隐式参数。
employee类的静态方法不可以访问Id实例域,因为它不能操作对象。但是静态方法可以访问自身类中的静态域。下面是一个例子:

public static int getNextId() {
	return nextId;	//return static field
}

可以通过类名调用这个方法。

int n = Employee.getNextId();

这个方法省略了关键字static吗?答案是确定的,但是需要通过该类对象的引用调用这个方法。

在下面这两种情况下,需要使用静态方法:

  • 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供,例如Math.pow。
  • 一个方法只需要访问类的静态域。

C++注释:
Java类中的静态域和静态方法与C++相似,但是,在语法树协商稍有不同;C++静态方法
在C++中,使用::操作符访问自身作用域之外的静态域和静态方法,如Math::PI。
起初,C引入static关键字是为了表示退出一个块后依然存在的局部变量,在这种情况下,static是有意义的,变量一直存在,进入块后变量依然存在,随后static在C有了第二个含义,表示不能被其他文件访问的全局变量和函数。


三、工厂方法

静态方法还有另一个常见用途,类似LocalDate和NumberFormat的类使用静态工厂方法来构造对象,
你已经见过工厂方法LocalDate.now和NumberFormat.of,使用工厂方法生成不同风格的格式化对象:
在这里插入图片描述
为什么NumberFormat类不利用构造器完成这些操作呢?有如下两个原因:

  1. 无法命名构造器,构造器的名字必须和类名相同,但是这里希望得到的货币实例和百分比实例采用不同的名字。
  2. 但是用构造器时候,无法改变所构造的对象类型。而Factory方法会返回一个
    decimalFormat对象,这是其子类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 静态域和静态方法 的相关文章

随机推荐

  • HTTP请求头Authorization

    今天部署了一个Authorization项目 xff0c 由于改了auth服务器客户端id和密码 xff0c 而前端请求header没有修改 xff0c 登录时一直弹框要求输入用户名和密码 xff0c 输入后却无效 xff0c 只好改前端代
  • c语言编程规范第三部分

    3 头文件应向稳定的方向包含 头文件的包含关系是一种依赖 xff0c 一般来说 xff0c 应当让不稳定的模块依赖稳定的模块 xff0c 从而当不稳定的模块发生变化时 xff0c 不会影响 xff08 编译 xff09 稳定的模块 就我们的
  • 看完《C++ primer》后,我都收获了什么?

    文章目录 1 语言只是一个工具2 光学会一门语言还不够3 结语 迫于读研和未来就业的压力 xff0c 我研一上自学了C 43 43 的这门语言 xff0c 自我感觉比较认真的看完了 C 43 43 primer 这本书的大部分章节 xff0
  • Ubuntu18.04 ROS Melodic版本安装gazebo_ros_pkgs包

    疫情期间宅在家没法做实验 xff0c 只能上手gazebo做仿真 xff0c 导入实验室机器人的相关文件后 xff0c 打算看看效果 xff0c 运行代码 roslaunch probot gazebo probot anno gazebo
  • vim如何批量注释

    1 ctrl 43 v 进入 2 按箭头 选中要注释的首行 3 按下大写 i 进入插入模式 4输入 按esc 就可以看到如下内容
  • 还弄不明白【委托和事件】么?看这一篇就足够了!!!

    这两个概念长时间不用了 xff0c 今天看到CAD二次开发中用到了自定义事件 xff0c 有点迷糊了 xff0c 索性再整理一下加深印象 xff01 一说到委托和事件 xff0c 他们总是绑定在一起的不可分割 xff01 可能你会说啊 xf
  • 三种简单排序(冒泡、插入、选择)的比较和图解

    冒泡排序 这种排序方式是最容易理解的 xff0c 主体思想就是 xff1a 指针重复地走访过要排序的数列 xff0c 一次比较两个元素 xff0c 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 xff0c
  • ModuleNotFoundError: No module named 'XXX'的解决办法

    类似问题一 ModuleNotFoundError No module named 39 captcha 39 pycharm打开的项目 xff0c 在虚拟环境里通过终端命令python manage py runserver运行pytho
  • 微信小程序实现搜索功能以及效果(超详细)

    我们先来看一下实现哪些功能 1 搜索历史记录以及清空历史记录 2 热门搜索推荐以及更新推荐内容 3 根据输入框输入的内容来自动搜索相关查询 后台逻辑是模糊查询 后台就先不扯了 这里我用的是自己定义的虚拟数据 暂时没用后台接口 可能有点问题
  • 微信小程序实现收货地址城市选择效果(添加收货地址)

    先来张效果图 这里主要是城市选择效果 请忽视其他 不要吐槽 谢谢 接下来看一下代码吧 wxml lt pages my my add address index wxml gt lt view class 61 34 redact addr
  • uni-app实现商城多商家购物车功能(超详细, 附带源码)

    我们先来看一下效果 有什么不懂可以直接下方留言 先来看代码 lt template gt lt view class 61 34 cart 34 gt lt 购物车为空 S gt lt view v if 61 34 cartList le
  • 微信小程序web-view的使用教程

    最近公司有需求 xff0c 需要点击小程序首页banner xff0c 跳转到别人的h5页面 首先是域名的问题 xff1a 步骤 xff1a 先登录小程序开发平台 xff0c 将页面需要跳转的域名写上去 xff0c 注意了 xff0c 域名
  • uni-app实现上传图片裁剪效果(附源码)

    我们先来看一下效果 封装一个组件在components下创建一个 文件夹随意命名 xff0c 这里我是uni img cropper uni img cropper vue lt template gt lt view class 61 3
  • js 一维数组和二维数组实现足迹、浏览记录等场景

    再开发过程中 xff0c 再没有接口提供的情况下来实现浏览记录或者搜索记录等场景 我们可以利用本地缓存实现 xff0c 废话不多说 xff0c 直接上代码 xff1a 多维数组 64 param Array arr 数组 64 param
  • Markdown使用(超详细)

    xff08 HBuilderX xff09 掌握md及HBuilderX对md的强大支持 如果没有点右键设置自动换行 xff0c 可按Alt 43 滚轮横向滚动查看 很多人只把markdown用于网络文章发表 xff0c 这糟蹋了markd
  • 宫格导航 (自定义更灵活,超详细)

    先来看一下效果 调用方法 lt 页面调用 gt lt nav grid list 61 34 menu 34 64 click 61 34 34 gt lt nav grid gt 数据 export default data return
  • Firefox和Chromedriver驱动下载及安装步骤

    Mozilla Firefox Mozilla Firefox 中文名称 34 火狐 34 是由一个自由及开放源代码的网页浏览器 使用Gecko排版引擎 支持多种操作系统 如 Windows Mac OS X 及GNU Linux等 该浏览
  • 流媒体选择Nginx是福还是祸?

    流媒体选择Nginx是福还是祸 xff1f CDN xff0c 视频云 xff0c 已经 僧多粥少 视频直播的持续升温 xff0c 无意间也让带宽生意的争夺变得异常残酷 一时间 xff0c 各种云计算 CDN 视频云提供商都在视频尤其是直播
  • xpath去除换行\空格

    使用xpath获取文本内容 有空格或者换行就用normalize space 方法 例 intro li 61 div xpath 39 normalize space div 64 class 61 34 bookinfo 34 p te
  • Java 静态域和静态方法

    main方法都被标记为static修饰符 xff0c 本文讨论一下该修饰符含义 静态域和静态方法 一 静态域静态常量 二 静态方法三 工厂方法 一 静态域 若把域定义为static xff0c 则每个类中只有一个这样的域 而每一个对象对于所