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关键字相关推荐

  1. Java学习(静态static关键字,数组工具类Arrays,数学相关工具类(绝对值,向上取整,向下取整),继承,super和this关键字,抽象)

    2022/1/2 (1/6)Java学习 1.静态Static关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己,而是属于类的,所以凡是本类的对象,都共享同一份. 2.静态stat ...

  2. Java学习笔记⑩(final关键字、内部类)

    一.final关键字 final关键字代表最终.不可改变的. 常用的四种方法: 可以用来修饰一个类 可以用来修饰一个方法 还可以用来修饰一个局部变量 还可以用来修饰一个成员变量 不能使用一个final ...

  3. java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释

    ***对象作为参数传递*** class passparam { int x;   public static void main(String[] args)   { passparam obj = ...

  4. JAVA学习笔记(四十九)- Swing相关组件

    JFrame组件 import java.awt.Color;import javax.swing.JFrame; import javax.swing.JPanel;/** Swing是在AWT基础 ...

  5. Java学习笔记之static

    1.static可以用于修饰成员变量.方法以及块,并不会改变类中成员的权限修饰,如:private修饰的成员变量,类外只能类名或非私有方法调用,而不能使用对象名调用. 2.static方法和成员变量, ...

  6. 【Java学习笔记四】Java中的包

    包的声明和引入:在Java语言系统中,Java编译器为每一个类生成一个字节码文件(.class),为了对类文件进行分层和按用途分类管理,同时也为了解决相同类名的文件冲突的问题,Java提供了包机制来管 ...

  7. Java学习笔记四(可视化的基基基基础)

    不算是完整的代码,便于自己理解的写法. import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.Act ...

  8. java学习笔记四:正则表达式

    今天接触了正则表达式,我们在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就可以很好地描述这些规则.换句话说,正则表达式就是记录文本规则的代码. 现在用一个实例来 ...

  9. JAVA学习笔记(四)城堡游戏

    城堡游戏 我们在尝试了之前的简单媒体库构造之后,试着整合一下之前学到的关于类,继承,多态等知识,制作一个简单的城堡游戏,城堡游戏是一个简单的文字游戏,通过输入命令可以在地图上不同的房间进行移动. 目录 ...

最新文章

  1. Oracle中查看表空间的使用率的脚本
  2. C++string类知识点总结
  3. python 获取当前class名和方法名
  4. 后台报错 新导入的项目报错
  5. ui设计看的书_5本关于UI设计的书
  6. android view rotate,Android使用RotateImageView 旋转ImageView
  7. 信息安全——对称算法与非对称算法
  8. 雷电模拟器多开cpu优化_哪个电脑手游模拟器好用 安卓手游模拟器测试对比排行榜...
  9. ASP.NET身份验证机制membership入门——API篇
  10. python初学入门教程_初学python编程入门教程
  11. Visual Studio安装以及增加工具集C盘占用问题
  12. 第1章 java EE应用
  13. VScode打不开浏览器方法总结
  14. java sencha_sencha cmd安装创建项目与编译,特详细。
  15. mongodb php auth,mongodb 3.0改变了authMechanism
  16. 2019 码云 最流行的开源项目 TOP 50
  17. 个人日常开发工具、问题收集
  18. python 完全面向对象_python之面向对象
  19. Uinapp中js修改css变量,【前端技术】uniapp操作dom,改变css样式
  20. 商品搜索引擎--商品推荐

热门文章

  1. $_SERVER['SCRIPT_NAME']
  2. HTML Viewer的定制
  3. 网站的domain不在首页的原因
  4. Verifying Checksum ... Bad Data CRC ERROR: can#39;t get kernel image!
  5. ubuntu下快速安装adb,fastboot的方法。
  6. 真的汉子不多,褚时健褚老算一个
  7. Linux 文件安全之随机数生成器
  8. 又一访问access
  9. div内的button的click会触发两次(防止事件冒泡)
  10. SQL SERVER 2008 数据恢复错误的解决步骤