static和代码块

Static关键字

作用域:可以修饰成员变量和成员方法

特点:

。随着类的加载而加载

。优先于对象存在

。被类的所有对象共享(这是判断是否使用静态关键字的条件)

。可以通过类名调用

public class myDemo {

      static String name;

  public static void main(String[] args) {

System.out.println(myDemo.name);//null成员变量默认初始化为null  }

}

Static关键字注意事项

。在静态方法中是没有this关键字的

。静态方法只能访问静态的成员变量和静态的成员方法

静态的内存图:

静态的内容存在于方法区的静态区,是共享的,每一个访问该变量的对象,都可以修改该静态变量,其值会被覆盖。

实例:

创建一个Person

public class Person {

String name;

static String text;

public void show(){

System.out.println(name+"喜欢"+text);

}

}

 

创建一个Test

public class Test {

 

public static void main(String[] args) {

Person p1=new Person();//创建一个peson对象为p1

p1.name ="胡歌";//为成员变量赋值,在堆内存

p1.text="看书";//为静态变量赋值,在方法区中

p1.show();//胡歌喜欢看书

Person p2=new Person();

p2.name="薛之谦";

p2.text="唱歌";

p2.show();//薛之谦喜欢唱歌

p1.show();//胡歌喜欢唱歌

}

}

我们可以看到peson类中有一个成员变量name,其存在堆内存;不被共享。

及一个静态变量text,存在于方法区,该类所创建的对象所共享。

所以 p2text改变会影响p1的值,而name则不会,它们在堆中有各自的内存空间。看下图可以清晰的看出static修饰的成员变量和其他成员变量的区别。

图解:

 

代码块

Java中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块

局部代码块

在方法中出现;限定变量生命周期,及早释放,提高内存利用率

构造代码块

在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

静态代码块 在类中方法外出现,加了static修饰

在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且值执行一次。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值