Java学习笔记四:static关键字
1.static表示什么?
static表示“全局”或者“静态”的意思。在Java中没有全局变量的概念,static 可以简单的理解为全局的,独立的一个功能。
(1)当我们在使用 static 修饰成员变量或者成员方法的时候,通常会在Java内存中为这些变量或者方法指定了一块独立的区域(这块区域可能在栈中,也有可能在堆中)。
(2)如果静态的变量或方法在不出其作用域的情况下,其 引用句柄是不会发生改变的。
(3)这块区域是内存共享的,它的引用都指向同一个位置,就是说如果我们修改引用指向的的值,这个值就被改变了;当其他对象使用这个值时,就是修改后的值。
代码:
public class Lesson_02_Static {public static int staticFiled = 0;public int notStaticFiled = 0;static{int staticBolckFiled = 0;}public Lesson_02_Static(){staticFiled++;notStaticFiled++;}public void print(){System.out.println("StaticFiled:" + staticFiled + ", NotStaticFiled:" + notStaticFiled);}public static void main(String[] args){Lesson_02_Static ls1 = new Lesson_02_Static();ls1.print();Lesson_02_Static ls2 = new Lesson_02_Static();ls2.print();} }
输出结果:
StaticFiled:1, NotStaticFiled:1 StaticFiled:2, NotStaticFiled:1
它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。
因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象
2.static使用场景?
1.修饰静态变量(注意:不能是局部变量)。如:
public static int staticFiled = 0;
说明:
静态变量:被static修饰的变量,在内存中只有一份,在加载类的过程中完成静态变量的内存分配,不会随着类的实例化和增加。
实例变量:被static修饰的变量,当实例化类时,可以在内存中存在多个拷贝。
2.静态方法。如:
public static void main(String[] args){Lesson_02_Static ls1 = new Lesson_02_Static();ls1.print();Lesson_02_Static ls2 = new Lesson_02_Static();ls2.print();}
说明:
(1)静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法。
静态方法中调用非静态方法提示错误,编译不通过;
非静态方法可以调用静态方法。
(2)因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3.静态块。如:
static{int staticBolckFiled = 0;}
说明:
静态块位置可以随意放置,初始化顺序时不会随着位置变化而变化。一般情况下,会放在成员变量结束,类方法的开始的地方,方便理解。
3.static初始化
(1)初始化顺序是从类的开始到结尾查找static块,并且比类自身构造函数要早。
class StaticInit {public static int staticFiled = 0;public int notStaticFiled = 0;static{System.out.println("First Init");}public StaticInit(){System.out.println("structure Init");}public static void main(String[] args){new StaticInit();}static{System.out.println("Second Init");} }
输出结果:
First Init Second Init structure Init
(2)static变量的初始化仅能一次
class StaticInt2 {T1 t1 = new T1(2);T1 t3 = new T1(4);T1 t2 = new T1(3);public StaticInt2(){System.out.println("t1: " + t1.t);System.out.println("t2: " + t2.t);System.out.println("t3: " + t3.t);}public static void main(String args[]){new StaticInt2();} }class T1 {static int t = 1;T1(int b){t = b;} }
输出结果:
t1: 3 t2: 3 t3: 3
t的值在最后被设置为3,说明静态变量不会根据new 实例化而初始化(即不会在new时初始化值1).
说明:
在实际debug过程中,静态块中的方法先执行,然后在执行构造函数,最后执行成员变量的初始化。
总结:
static 指定的是一个固定的位置,在内存中只有一份;
在初始化时,优先执行static块。
转载于:https://www.cnblogs.com/winlrou/p/3997153.html
Java学习笔记四:static关键字相关推荐
- Java学习(静态static关键字,数组工具类Arrays,数学相关工具类(绝对值,向上取整,向下取整),继承,super和this关键字,抽象)
2022/1/2 (1/6)Java学习 1.静态Static关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己,而是属于类的,所以凡是本类的对象,都共享同一份. 2.静态stat ...
- Java学习笔记⑩(final关键字、内部类)
一.final关键字 final关键字代表最终.不可改变的. 常用的四种方法: 可以用来修饰一个类 可以用来修饰一个方法 还可以用来修饰一个局部变量 还可以用来修饰一个成员变量 不能使用一个final ...
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
***对象作为参数传递*** class passparam { int x; public static void main(String[] args) { passparam obj = ...
- JAVA学习笔记(四十九)- Swing相关组件
JFrame组件 import java.awt.Color;import javax.swing.JFrame; import javax.swing.JPanel;/** Swing是在AWT基础 ...
- Java学习笔记之static
1.static可以用于修饰成员变量.方法以及块,并不会改变类中成员的权限修饰,如:private修饰的成员变量,类外只能类名或非私有方法调用,而不能使用对象名调用. 2.static方法和成员变量, ...
- 【Java学习笔记四】Java中的包
包的声明和引入:在Java语言系统中,Java编译器为每一个类生成一个字节码文件(.class),为了对类文件进行分层和按用途分类管理,同时也为了解决相同类名的文件冲突的问题,Java提供了包机制来管 ...
- Java学习笔记四(可视化的基基基基础)
不算是完整的代码,便于自己理解的写法. import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.Act ...
- java学习笔记四:正则表达式
今天接触了正则表达式,我们在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就可以很好地描述这些规则.换句话说,正则表达式就是记录文本规则的代码. 现在用一个实例来 ...
- JAVA学习笔记(四)城堡游戏
城堡游戏 我们在尝试了之前的简单媒体库构造之后,试着整合一下之前学到的关于类,继承,多态等知识,制作一个简单的城堡游戏,城堡游戏是一个简单的文字游戏,通过输入命令可以在地图上不同的房间进行移动. 目录 ...
最新文章
- Oracle中查看表空间的使用率的脚本
- C++string类知识点总结
- python 获取当前class名和方法名
- 后台报错 新导入的项目报错
- ui设计看的书_5本关于UI设计的书
- android view rotate,Android使用RotateImageView 旋转ImageView
- 信息安全——对称算法与非对称算法
- 雷电模拟器多开cpu优化_哪个电脑手游模拟器好用 安卓手游模拟器测试对比排行榜...
- ASP.NET身份验证机制membership入门——API篇
- python初学入门教程_初学python编程入门教程
- Visual Studio安装以及增加工具集C盘占用问题
- 第1章 java EE应用
- VScode打不开浏览器方法总结
- java sencha_sencha cmd安装创建项目与编译,特详细。
- mongodb php auth,mongodb 3.0改变了authMechanism
- 2019 码云 最流行的开源项目 TOP 50
- 个人日常开发工具、问题收集
- python 完全面向对象_python之面向对象
- Uinapp中js修改css变量,【前端技术】uniapp操作dom,改变css样式
- 商品搜索引擎--商品推荐
热门文章
- $_SERVER['SCRIPT_NAME']
- HTML Viewer的定制
- 网站的domain不在首页的原因
- Verifying Checksum ... Bad Data CRC ERROR: can#39;t get kernel image!
- ubuntu下快速安装adb,fastboot的方法。
- 真的汉子不多,褚时健褚老算一个
- Linux 文件安全之随机数生成器
- 又一访问access
- div内的button的click会触发两次(防止事件冒泡)
- SQL SERVER 2008 数据恢复错误的解决步骤