用法:是一个修饰符,用于修饰成员(修饰成员变量,成员函数)
当成员被修饰静态后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。类名.静态成员。
特点:
随着类的加载而加载。
也就是说:静态会随着类的消失而消失,说明它的生命周期最长。
优先于对象存在。
明确一点:静态先存在,对象是后存在的,
被所有对象共享。
可以被类名所调用。
实例变量和类变量的区别:
存放位置。
类变量随着类的加载而存在于方法区中。
实例变量随着对象的建立而存在于堆内存中。
生命周期
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。
静态的使用注意事项:
静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态。{为什么既可以访问静态也可以访问非静态呢?因为静态成员优先于对象存在,它是随着类一加载运行就存在了,所以当对象一建立后,既可以调用非静态的成员,也可以调用静态成员。}
静态成员方法中不可以定义this,super关键字,
因为静态优先于对象存在,所以静态方法中不可以出现this。{也可以联想到this关键字的应用来理解,this关键字是用来区分同名的实例变量的,实例变量是就是对象里面的变量,存在于堆内存中,所以需要的是对象建立之后才有的实例变量,还有的就是this关键字代表的是对象,那个对象调用它,它就代表那个对象。而静态方法优先于对象存在的,这时定义this关键字就没有意义了,因为它不知道要代表什么了!}
3.主函数是静态的。
静态有利有弊
利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。可以直接被类名调用。
弊端:生命周期过长。
访问出现局限性。(静态虽好,只能访问静态的。)
成员变量也可以叫实例变量。随着对象的存在而存在。
什么时候用静态?
静态修饰的内容有静态成员变量和函数。
什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于对内存中。{例如:中国人的的国籍都是中国,那么就是共有中国人都有的共享数据。所以可以被静态所修饰。而姓名能虽然大家都有的属性,但是每个人的名字都是不一样的,所以是特有的数据,不可以被静态所修饰。}
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。{因为对象是用来封装数据和属性的,但是你定义的函数没有访问到对象中的数据或是属性的时候,这时候就没有必要创建对象了。可你又想要调用你定义的函数,这时候没有对象是不能调用类里面的函数的。但是你把这个函数用static来修饰的话,就可以直接调用类里面的方法了。这时候这些方法是在一个独立的区域存放的,不是栈内存,也不是堆内存,而是方法区。} |