Java学习——static关键字

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。

看一个例子:

public class Static {
 int b=20;
 static int a=10;
 public Static(){
  System.out.println("Static initial");
 }
 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  System.out.println(Static.a);
  //b=40;//提示:不能对非静态字段进行静态引用
  Static hello1=new Static();
  Static hello2=new Static();
  hello1.b=40;//变量b仅为hello1实例所有,修改其值不影响hello2实例中b的值
  hello1.a=30;//变量a为hello1与hello2两个实例所共有,修改其中一个,另外一个也被改了
  //System.out.println(Static.this.b);//提示:不能在静态上下文中使用this
  System.out.println(hello1.a);//提示:应该以静态方式访问静态字段Static.a
  System.out.println(hello1.b);
  System.out.println(hello2.a);//提示:应该以静态方式访问静态字段Static.a
  System.out.println(hello2.b);
}

从该例可以看出:

1、被static修饰的成员变量和成员方法独立于该类的任何对象。即它不依赖于特定的实例,被类的所有实例所共享。

2、static修饰的成员变量与方法不用被实例化便可以使用,故不能使用关键词this(表示对象)来访问

3、从1中可以得到两点结论:第一,创建N个实例后,若修改其中一个实例的被static修饰的成员变量,则其他实例的该变量则也发生相应改变,但没有被static修饰的成员变量不会发生这种情况;第二,被static修饰的成员变量的访问形式为类名.成员变量,若以对象.成员变量的形式来访问也是可以的,但不规范。

关于内存使用:

1、static变量

被static修饰的变量称为静态变量,反之称为实例变量。

对于静态变量内存中只有一个拷贝(节省内存),JVM只为静态变量分配一次内存,该过程在加载类的过程中完成,可用类名直接访问(方便),当然也可以用对象来访问(不推荐)。

对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中由多个拷贝,互不影响(灵活)

举个例子:对于人这个类,眼睛数目这个变量便可以为静态变量,因为所有人都有两只眼睛,但眼睛颜色则必须定义为实例变量,应为不同的人眼睛颜色可能存在差异。

2、static方法

参考static变量

3、static代码块

static代码块的作用为为static变量赋值

注意:

要慎用static,因为被static修饰的成员变量与方法为所有对象所共有,修改其值将修改所有的对象中相应的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值