static修饰符和特点

时间:2022-04-24 21:05:58

1.static的引出理由

1)对象小明跟小丽都有都有name和age两个状态,但是不同对象的name的值和age的值是不一样的,也就是说不同对象的name和age是不同的
Person p1 =new Person();
p1.name=”小明”; p1.age=”18”;
Person p2 =new Person();
p2.name=”小丽”; p2.age=”20”;
System.out.println(p1.name+”,”+p2.name);//输出为”18,20”
2)从这里可以看出,name和age是属于对象的,不同对象的name和age是不一样的,但是在生活中有一些东西不是属于某一个具体对象,而是属于整个事物的类型的,比如:全人类,人类的睡觉行为
3)状态和行为应该有对象和类型之分
a.有的状态和行为应该属于对象,不同的对象,状态和行为可以不一样
b.有的状态和行为应该属于类型,不属于对象
要想解决上述问题应该学习static修饰符,修饰符是用于限定类型以及类型成员的申明的一种符号。

2.static修饰符特点

1)static修饰符的成员(字段/方法),随着所在类的加载而加载
当JVM把字节码加载进JVM的时候,static修饰符成员已经在内存中存在了。//因为字节码是由类在编译器编译产生的,所以才会说”随着所在类的加载而加载”
2)优先与对象的存在
对象是我们手动通过new关键字创建出来的,这样才会在内存中占用空间,而static修饰的成员是在加载类后,就会存在
3)static修饰的成员被该类型的所有对象所共享
根据该类创建出来的任何对象,都可以访问static成员(例如狗这个对象天生吃屎,吃屎可以看成一个方法)
注意:表面上通过对象去访问static成员,其本质依然使用类名访问,和对象没有关系
4)直接使用类名访问static成员
因为static修饰的成员直接属于类,不属于对象,所以可以直接类名访问static成员(例如类B要访问类A中的方法,那么类B先找到类A,再找到方法,类A.方法名)