Java 关键字static 还搞不懂?看这一篇文章就足够了!详细解释!

本文详细解析了Java中的static关键字,探讨了它的主要意义,包括优化程序性能的静态代码块,以及静态成员变量和静态方法的用法。static关键字用于创建独立于对象的变量和方法,其特点是在类加载时初始化,并被所有对象共享。同时,文章强调了静态成员对封装性的潜在影响,并提供了静态变量和方法的使用示例。
摘要由CSDN通过智能技术生成

1、static存在的主要意义

static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性并调用方法!

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能 。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

2、静态:关键字static的概述

2.1 理解static

static关键字可以用来修饰代码块表示静态代码块修饰成员变量表示全局静态成员变量修饰方法表示静态方法。(注意:不能修饰普通类,除了内部类,这是为什么?)

class A {
   
	static {
   
		System.out.println("A : 静态代码块");
	}
	
	static int i ;  // 静态变量
	
	static void method() {
   
		System.out.println("A: 静态方法");
	}
}

简而言之,被static关键字修饰的内容都是静态的。

静态是相对于动态的。

动态是指Java程序在JVM上运行时,JVM会根据程序的需要动态创建对象并存储对象(分配内存) ,对象使命结束后,对象会被垃圾回收器销毁,即内存回收由JVM统一管理并分配给其他新创建的对象;

静态是指Java程序还没有运行时,JVM就会为加载的类分配空间存储被static关键字修饰的内容 ;如静态成员变量,Java类加载到JVM中,JVM会把类以及类的静态成员变量存储在方法区,我们知道方法区是线程共享且很少发生GC的区域,所以被static关键字修饰的内容都是全局共享的,且只会为其分配一次存储空间

所以当类的某些内容不属于对象,而由对象共享即属于类的时候,就可以考虑是否用static关键字进行修饰

怎么理解“类的加载在虚拟机运行期间只加载一次”?就是说,类(图纸)是用来创建对象(房子)的,图纸打印一张就够了,房子就可以造无数个。静态指的是打印图纸(加载类)时一起做的事情,比如在图纸(类)上加个批注(赋值静态属性)或者给图纸贴个膜(执行静态代码块),全体的对象(房子)都会使用同样的批注(静态属性);图纸只需要一张膜也只需要贴一次。
其实再往深里讲,类(图纸)也是一个对象,是class类的对象,虚拟机一运行,就先打印了各种各样的图纸(加载了类),但图纸是住不了人的,只有变成房子(类创建了对象)才能住人(操作对象的方法和属性)。

2.2 概念小结

static表示“静态”的意思,可以用来修饰成员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)。

static的主要作用在于创建独立于具体对象域变量或者方法

简单理解:

  • 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问只要类被加载了,就可以通过类名去进行访 问
  • 并且不会因为对象的多次创建 ,而在内存中建立多份数据

2.3 重点

静态成员 在类加载时加载并初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛涛同学debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值