1.1.1. 静态成员变量的使用细节
点击查看视频教程
一个类的静态成员变量在内存中只有一份,所有类都共享这一份数据。
1 2 |
|
1.1.1. 静态方法的调用问题
结论:在非静态函数中,可以直接使用类中的任何成员(包括静态和非静态的),不能直接调用构造函数;
结论:
静态函数不能调用非静态成员,只能调用静态成员;
原因:
因为静态成员可以直接通过类名调用,和对象无关;不管程序执行时,是否创建了对象,只要类加载进内存了,就都可以使用静态成员;
非静态成员必须依赖对象存在,只有创建了对象,才能使用非静态成员;
所以,在非静态函数中调用静态成员,肯定可以,因为非静态函数都能执行了,肯定就已经创建了对象了;对象都已经创建了,说明类肯定已经加载了;
所以再非静态函数中,可以直接调用静态和非静态的成员;
而在静态函数执行的时候,因为静态函数不需要对象,所以此时内存中很可能还没有对象,就不能非静态成员;
问题:为什么main函数需要使用static关键字修饰?
因为main函数是用作Java程序的入口的;也就是说Java程序运行是从main函数开始的;
也就是说,运行main函数的时候还没有执行其他代码,也就意味着,这个时候内存中还没有创建任何对象;
既然没有对象,就不能使用非静态的函数;所以main函数只能是静态函数;
public static void main(String[] args){
}
启动main函数时,给main函数传参,main函数通过参数列表中的字符串数组接受参数:
1.1.1. static使用场景
需求一:使用类描述学生,具有姓名、性别和学号的属性,以及说话和学习的功能;创建学生对象,调用学生睡觉的功能;
结论:在一个类中,如果某个函数中没有使用任何非静态成员变量,这个函数可以定义为静态函数;
需求二:使用类模拟圆形;并提供获取圆形面积的功能;
实现代码:
结论:如果一个类中的某个变量,需要在类的所有对象中都保持一致,就应该将这个变量声明为静态成员变量,就可以在所有对象中共享;