static修饰符详解

本文详细介绍了Java中的static关键字,包括其基本概念、内存分配特点、使用基本原则及静态初始器的应用。并通过具体示例展示了static变量如何在不同实例间共享同一内存空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、static基本概念

static能够和属性、方法和内部类一起使用,表示是静态的。

类中的静态变量或者静态方法能够与“类名”一起使用,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的变量又称作“类变量”。这于实例变量不同,实例变量必须通过对象来访问,因为它们的值在对象和对象之间有所不同。

class StaticModifyer{

static int i=10;

int j;

staticModifyer(){

j=20;

}

}


public class Test{

public static void main(String args[]){

System.out.println("类变量 i=  "+StaticModifyer.i);

StaticModifyer s=new StaticModifyer();

System.out.println("实例变量 j=  "+s.i);

}

}

输出结果:

类变量 i=10;

实例变量 j=20;

2、static内存分配

在上面的例子中,无需创建类的对象即可访问静态变量i,之所以会产生这样的结果,是因为编译器只为整个类创建静态变量的副本,因为它可以通过类名进行访问。也就是说一个类中的一个static变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static变量共享同一个内存空间。实例如下:

public class StaticRAMTest{

public static void main(Stirng args[]){

UserModel user1=newUserModel();

user1.userName="zhangsan";

user1.country="china";

UserModel user2=new UserModel();

user2.userName="张三";

user2.country="中国";


System.out.println("user1.userName==  "+user1.userName+“user1.country== ”+user1.country);

System.out.println("user2.userName==  "+user2.userName+“ user2.country ==”+user2.country);

}

}

class UserModel{

private static String userName;

private String country;

}

输出结果:

user1.userName==张三  user1.country== china

user2.userName==张三  user2.country== 中国

为什么userName会有一样的值呢,就是因为多个User实例中的静态变量userName共享同一个内存空间,

user1.userName和user2.userName指向同一个内存空间,任何一个对象改变此变量都会引起其他对象中该变量的改变,因此就得到了上面的结果。


小结:

(1)static的变量是在类被装载的时候就会被初始化,也就是说只要类被装载,不管你是否使用了这个static变量,它都会被初始化。

(2)类变量(用static修饰的变量),在类加载的时候,分配类变量的内存,以后再生成类的实例对象时,将共享这块内存,任何一个对象对该类变量进行修改,都会影响其他对象。

(3)外部可以通过两种方式访问类变量:通过实例对象来访问或通过类名来访问。


3、statci使用的基本原则

一、一个类的静态方法只能访问静态属性

二、一个类的静态方法不能够直接调用非静态方法

三、如果访问权限允许,static方法和属性可以使用类名加“.”来访问,当然也可以使用实例对象名加“.”来访问

四、静态方法中不存在当前对象,因而不能使用“this”,当然也不能使用“super”

五、静态方法不能被非静态方法覆盖(重写)

六、构造方法不能声明为static的

七、局部变量不能使用static修饰

注:非static变量只限于实例,并且只能通过实例引用被访问。


4、静态初始器--静态块

静态初始器是一个存在于类中方法外面的静态快。静态初始器仅仅在类装载的时候(第一次使用类时)执行一次。

静态初始器的目的:往往用来初始化静态的类属性。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值