Static引入
在我们生活当中 , 有些事物不属于某一个对象,而是属于整个事物的类型
比如:全世界人口的总数
人的毁灭行为:毁灭的行为应该属于人类, 不应该属于某一个人
状态和行为应该 有 对象和类之分
有的状态和行为,应该属于某个对象
有的状态和行为,应该属于类型
Static作用
- 通过 static 修饰符就能解决这个问题,它修饰的成员就不属于对象,它属于类本身
- 它可以修饰字段,方法,内部类
- 作用:确定修饰的内容是属于类还是属于对象
Static特点
1.static 修饰的内容,附着类的加载而加载
2.优先于对象的存在
3.static 修饰的成员被该类型的所有对象共享
4.可以直接使用当前类的类名访问 static 成员
总结
public class Person { //人口 static int totalNums = 0; //毁灭 static void destroy() { //静态方法 只能访问静态成员 System.out.println("人类毁灭啦"); //System.out.println(age); } //状态:名词 String name; int age; //行为:动词 void die(){ System.out.println(name+"死了"); Person.totalNums--; } //---------以上属于对象--------- //构造器的作用,创建对象,一创建对象时,就给内部 的字段做初始化 Person(String n,int a){ name = n; age = a; Person.totalNums++; } public static void main(String[] args) { System.out.println(Person.totalNums); Person per = new Person("zs",1); System.out.println(per.name); System.out.println(per.age); per.die(); System.out.println(Person.totalNums); Person per2 = new Person("ls",2); System.out.println(per2.name); System.out.println(per2.age); Person.destroy(); //通过类名调用 System.out.println(Person.totalNums); //可以通过 对象来去调用静态成员。 //本质还是通过类名来调用 System.out.println(per2.totalNums); } }
public class Person { static int totalNums = 0; String name; int age; void eat(String food){ System.out.println(name+"吃了"+food); } Person(String name,int age){ this.name = name; this.age =age; Person.totalNums++; } Person(int age){ this.age = age; Person.totalNums++; } void die(){ System.out.println(name+"从地球上消失"); Person.totalNums--; } static void destroy(){ Person.totalNums = 0; } } class test{ public static void main(String[] args) { Person person = new Person("张三",1); person.name = "张四"; person.eat("奶粉"); System.out.println(Person.totalNums); Person person1 = new Person(1); person1.name = "李四"; person1.eat("奶粉"); Person ww = new Person("王五", 1); ww.eat("奶粉"); person.die(); Person.destroy(); System.out.println("总人口:"+Person.totalNums); //当使用对象调用静态的内容(方法,还是字段 )在运行时, 都会去掉 //还是使用类名来调用 System.out.println(ww.totalNums); } }