什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
本文由 ImportNew - 唐小娟 翻译自 Journaldev。如需转载本文,请先参见文章末尾处的转载要求。
static是Java中的一个关键字,我们不能声明普通外层类或者包为静态的。static用于下面四种情况。
静态变量:我们可以将类级别的变量声明为static。静态变量是属于类的,而不是属于类创建的对象或实例。因为静态变量被类的所有实例共用,所以非线程安全的。通常静态变量还和关键字final一起用,作为所有对象共用的资源或常量。如果静态变量不是私有的,那么可以通过ClassName.variableName来访问它。
|
1
2
3
4
|
//静态变量的例子privatestatic publicstaticpublicstatic "myuser"; |
静态方法:类似于静态变量,静态方法也属于类,不属于实例的。静态类只能访问类的静态变量,或调用类的静态方法。通常静态方法作为工具方法,被其它类使用,而不需要创建类的实例。譬如集合类、Wrapper类(String, Integer等)和工具类(java.util中的类)都有很多静态方法。通常java程序的开始就是一个main()方法,它就是个静态方法。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//静态方法的例子publicstatic intcount) if(count0) StaticExample.count}//静态工具方法publicstatic inti,int...js){ intsum=i; for(intx returnsum;} |
静态块:静态块就是类加载器加载对象时,要执行的一组语句。它用于初始化静态变量。通常用于类加载的时候创建静态资源。我们在静态块中不能访问非静态变量。我们可以在一个类中有多个静态块,尽管这么做没什么意义。静态块只会在类加载到内存中的时候执行一次。
|
1
2
3
4
5
6
7
|
static{ //在类被加载的时候用于初始化资源 System.out.println("StaticExample); //仅能访问静态变量和静态方法 str="Test"; setCount(2);} |
静态类:我们对嵌套类使用static关键字。static不能用于最外层的类。静态的嵌套类和其它外层的类别无二致,嵌套只是为了方便打包。 延伸阅读:嵌套类
让我们来看一个使用static关键字的例子:
StaticExample.java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
packagecom.journaldev.misc;publicclass //静态块 static{ //在类被加载的时候用于初始化某些资源 System.out.println("StaticExample); //仅能访问静态变量和静态方法 str="Test"; setCount(2); } //可以在一个类中有多个静态块 static{ System.out.println("StaticExample); } //静态变量 privatestatic //保持私有,仅能靠setter方法访问 publicstatic publicint returncount; } //静态方法 publicstatic intcount) if(count0) StaticExample.count } //静态工具方法 publicstatic inti,int...js){ intsum=i; for(intx returnsum; } //静态类的例子,方便打包之用 publicstatic publicint }} |
让我们用一个测试程序来看看如何使用静态变量,静态方法以及静态类。
TestStatic.java
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
packagecom.journaldev.misc;publicclass publicstatic StaticExample.setCount(5); //非私有的静态变量可以通过类名来访问 StaticExample.str"abc"; StaticExamplenewStaticExample(); System.out.println(se.getCount()); //类的静态变量和实例的静态变量是一样的 System.out.println(StaticExample.str"+se.str); System.out.println(StaticExample.str //静态嵌套类和其他外层类一样 StaticExample.MyStaticClassnewStaticExample.MyStaticClass(); myStaticClass.count=10; StaticExample.MyStaticClassnewStaticExample.MyStaticClass(); myStaticClass1.count=20; System.out.println(myStaticClass.count); System.out.println(myStaticClass1.count); }} |
测试程序的输出:
|
1
2
3
4
5
6
7
|
StaticExampleStaticExample5abctrue1020 |
注意静态块仅在类加载到内存时执行了一次。
原文链接: Journaldev 翻译: ImportNew.com- 唐小娟
译文链接: http://www.importnew.com/7208.html
什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?的更多相关文章
- PHP中静态(static)调用非静态方法详解--调用!!!
来源:https://www.cnblogs.com/yolo-bean/p/7739265.html 这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么 ...
- 静态static关键字概述和静态static关键字修饰成员变量
static关键字 概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了 ...
- PHP中静态(static)调用非静态方法详解
1.PHP中可以静态调用非静态方法么? 今天我被问到PHP中可不可以使用 className::methodName() 的方法来调用一个没有声明static的方法.在我的印象中,我好像是见过这种用法 ...
- 【很变态】PHP类实例化对象竟然可以访问类的“静态(static)方法”!!!
之前发现一个PHP的变态问题:PHP中静态(static)调用非静态方法详解 这次看了下 ThinkPHP 的源码 function.inc.php ,里面有个函数: /** * 取得对象实例 支持调 ...
- Java知多少(31)static关键字以及Java静态变量和静态方法
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
- 《Java基础知识》Java static关键字以及Java静态变量和静态方法
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
- java基础--java静态代码块和静态方法的区别、static用法
转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时, ...
- java中静态属性和和静态方法的继承问题 以及多态的实质
首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里 ...
- 黑马程序员——JAVA基础之主函数main和静态static,静态代码块
------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...
- static的应用以及静态与非静态的区别
先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别. package com.liaojianya.chapter5; ...
随机推荐
- Mathematica的介绍及使用方法
Mathematica 是由 Wolfram Research 公司开发的数学软件,可用于数学.物理.工程.生物等领域的计算和建模.其官方网站为 www.wolfram.com/mathematica ...
- windows系统使用UnblockNeteaseMusic解锁网易云音乐灰色歌曲
使用UnblockNeteaseMusic解锁网易云音乐灰色歌曲 一.问题 用网易云音乐听歌曲,有的曲目听不了,如下: 二.解决步骤 参照:https://github.com/nondanee/Un ...
- Angular 18+ 高级教程 – 大杂烩
前言 本篇记入一些 Angular 的小东西. Angular 废弃 API 列表 Docs – Deprecated APIs and features Using Tailwind CSS wit ...
- Angular 18+ 高级教程 – Component 组件 の Angular Component vs Custom Elements
前言 在上一篇 Angular Component vs Web Component 中,我们整体对比了 Angular Component 和 Web Component 的区别. 这一篇我们将针对 ...
- RxJS 系列 – Subject
前言 RxJS 两大概念 Observable 和 Subject. 上一篇介绍了 Observable 这篇继续接受 Subject. 参考 RxJS 建立 Observable 的基礎 - Obs ...
- 前置机器学习(二):30分钟掌握常用Jupyter Notebook用法
相较于Pycharm执行py文件来说,Jupyter Notebook可保存执行过程,添加图表.注释等富文本说明的功能,使其对机器学习的开发者格外友好. 本文包含机器学习环境安装,Jupyter No ...
- HTML——基础标签
基础标签 图片.音频.视频标签 src:资源路径 1.绝对路径 2.相对路径 ./ 表示本级目录 (可以省略) ../ 表示上级目录 超链接标签 列表标签 表格标签 ...
- 字节跳动的多平台绽放秘诀 | Flutter 开发者故事
字节跳动旗下运营着一系列成功的用户产品.企业应用以及服务,覆盖信息.教育.娱乐等不同领域.随着产品阵容的不断发展,传统的原生双平台开发已经难以满足团队更高效.更灵活.更精美,以及更多样的产品研发需求. ...
- Jenkins执行appium没有界面得处理
原文1:https://www.cnblogs.com/wangjunjiehome/p/10100852.html 原文2:https://www.cnblogs.com/wangjunjiehom ...
- RocketMQ 5.0 多语言客户端的设计与实现
本文作者:古崟佑,阿里云中间件开发. RocketMQ 5.0 版本拥有非常多新特性,比如存储计算分离. batch 能力的提升等,它是具有里程碑意义的版本. 提到新版本,我们往往会首先想到服务端架构 ...