Java-static修饰符

  • 内容
  • 评论
  • 相关

对象都有name和age两个状态,但是不同对象的name的值和age的值是不一样的.

也就是说,不同对象的name和age是不一样的.

Person  p1  = new  Person();

p1.name=”春哥”;

p1.age = 31;

Person p2  = new Person();

p2.name = “凤姐”;

p2.age = 30;

System.out.println(p1.name +”, ” + p2.name);//春哥,凤姐

-------------------------------------------------------------------------------------------

也就说name和age是属于对象的,不同对象的name和age是不一样的.但是在生活中有些东西不是属于某一个具体对象的,而是属于整个事物的类型,比如:全世界人的总数,人的毁灭的行为.

毁灭的行为,应该属于人类,而不属于某一个人.

-------------------------------------------------------------------------------------------

状态和行为应该有对象和类型之分.

有的状态和行为应该属于对象,不同的对象,状态和行为可以不一样.

有的状态和行为应该属于类型,不属于对象.

问题:现在如何表示人类毁灭这个行为(destory).

要解决该问题,得学习static修饰符.

修饰符

晚上11点,班长在写代码,遇到一个bug,班长解决问题后,睡觉去了。

晚上11点,班长漫不经心地在写代码,遇到一个很简单的bug,班长稀里糊涂解决问题后,满不在乎地睡觉去了。

晚上11点,帅气的班长认认真真地在写代码,遇到一个超难的bug,班长呕心沥血解决问题后,眉开眼笑地睡觉去了。

------------------------------------------------------------

static修饰符表示静态的,可修饰字段、方法、内部类,其修饰的成员属于类,也就是说static修饰的资源属于类级别,而不是对象级别。

static的真正作用:用来区别字段,方法,内部类,初始化代码块是属于对象还是属于类本身。

static修饰符的特点:

1):static修饰的成员(字段/方法),随着所在类的加载而加载.

当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了.

2):优先于对象的存在.

对象是我们手动通过new关键字创建出来的.

  3:satic修饰的成员被该类型的所有对象所共享.

根据该类创建出来的任何对象,都可以访问static成员.(狗天生就吃屎.)

剧透:表面上通过对象去访问static成员,其本质依然使用类名访问,和对象没有任何关系(通过反编译看到的).

4):直接使用类名访问static成员

因为static修饰的成员直接属于类,不属于对象,所以可以直接使用类名访问static成员.

static成员在JVM中的存储:

类成员和实例成员的访问 :

类中的成员:字段,方法,内部类.

类成员:      使用static修饰的成员.

实例成员:  没有使用static修饰的成员.

----------------------------------------------------------------------------

类成员只能访问类成员,实例成员只能访问实例成员.

----------------------------------------------------------------------------

类成员,直接属于类, 可以通过类来访问static字段和static方法.

实例成员,只属于对象, 通过对象来访问非static字段和非static方法.

(对象其实可以访问类成员,但是底层依然使用类名访问的.)

---------------------------------------------------------------------------------------------

在static方法中,只能调用static成员.

错误:无法从静态上下文中引用非静态 变量

非static方法,可以访问静态成员,也可以访问实例成员.

什么时候定义成static的字段和方法:

如果这个一个状态/行为属于整个事物(类),就直接使用static修饰.

被所有对象所共享.

---------------------------------------------------------

在开发中,往往把工具方法使用static修饰.

如果不使用static修饰,则这些方法属于该类的对象,我们得先创建对象再调用方法,在开发中工具对象只需要一份即可,可能创建N个对象,此时我们往往把该类设计为单例的.,但是还是有点麻烦.

所以,一般的,在开发中设计工具方法,为了调用简单,我们使用static修饰.

--------------------------------------------

类成员的使用

利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份,可以直接被类名调用。

弊端:生命周期过长。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注