Static
What
Static 静态修饰符,
static关键字的中文意思是静态的,该修饰符可以修饰成员变量,成员常量和成员方法。
Why(特点)
- 静态会随着类的加载而加载,消失而消失,所以他的生命周期和类一样长
- 优先于对象存在,静态先存在,对象后存在
- 被所有实例对象共享
- 直接被类名调用
静态变量(类变量)和实例变量区别
- 存放位置:类变量随着类的消失而消失,存在方法区中,实例变量随着对象的建立而存在与堆内存中
- 生命周期:静态会随着类的加载而加载,消失而消失;实例变量随着对象的加载而加载,消失而消失
Where
那么静态修饰符static用在哪里呢?
如果有数据需要共享给所有对象使用,那么就用static修饰数据(成员变量);他的调用方式有两种:
- 使用对象进行访问 对象名.变量名
- 使用类名进行访问 类名.变量名
思考?
1、那么非静态的成员变量如何访问呢?
2、什么时候用static呢?
1答案:非静态的成员只能使用对象进项访问,不能使用类名进行访问 对象名.变量名
2答案:治党当成员变量需要被共享的时候才使用static
代码体现:
- classStudent{
- static Stringname; //非静态成员变量
- static String country = "中国"; //静态的成员变量
- public Student(String name){
- this.name = name;
- }
- }
静态方法
讲完了静态修饰符,再来讲讲静态方法吧
What
静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
Why(特点)
- 静态代码块随着累的加载而加载,只执行一次,优先于主函数,用于给类初始化
- 带static的main函数是主函数,是程序的入口,可以被jvm识别
- 静态方法中不能使用this和super关键字(为什么呢?)
首先理解this和super是什么?
1、this是对当前对象的引用(具体看博客内容:
http://blog.csdn.net/yanwenwennihao/article/details/79375611)
2、super是指父类对象的引用
上面已经讲了,静态成员优先于兑现更加再到内存中,他是随着累的加载而加载的,如果静态方法中有this和super,那么当静态方法被加载到内存中,其中的this和super还没被初始化,所以加载时会报错
以此类推,静态成员和静态方法都不能用this和super关键字
static函数和普通函数的区别
- static函数,只限定在本源代码使用,不能被本源吗以外的文件调用;普通函数默认是extern(外来的,外面的),可以被其他代码文件使用
- 静态函数不能访问非静态成员变量,只能访问静态变量,但是非静态函数可以方位静态变量
代码体现:
- public static void main(String[] args){
- }
最后一个问题 :Java中的方法和函数的区别是什么?