标签:静态资源 student class 加载顺序 全局 rgs 成员函数 方法 void
/*
* static 静态的
* static修饰的成员变量的特点
* 1.static修饰的成员变量是该类的所有对象共享
* 2.static修饰的成员变量是随着类的加载就在静态区中开辟内存了,所以有限与非静态成员开辟内存
* 3.static修饰的成员变量可以通过类名直接访问
* 静态成员变量和非静态成员变量的区别?
* 1.存储的数据
* 静态成员变量存储的是所有对象共享的数据
* 非静态成员变量存储的是每个对象特有的数据
* 存储的位置
* 静态成员便令是随着类的加载在方法区中的静态区开辟内存
* 非静态成员变量是随着对象的创建,在堆中开辟内存
* 调用方式
* 静态成员变量可以通过类名访问,也可以通过对象访问
* 非静态成员变量可以通过对象访问
* 生命周期
* 静态成员变量随着类的加载就在方法区中的静态区出现,整个程序执行玩消失。
* 非静态成员变量随着对象的创建在堆中出现,随着对象被垃圾回收机制回收,而消失。
*/
总结:拥有static的静态成员会在程序的执行的时候优先开始执行,且会在程序执行结束后消失,拥有全局都可以访问到的特性。可以直接通过类名调用,也可以通过对象调用。静态资源中无法访问非静态资源,因为在程序的加载顺序中,静态资源优于非静态资源加载,在静态资源中引用非静态资源时,非静态资源不存在,或报错,静态资源无法从上下文中引入非静态 变量 name,但是可以引用静态成员的变量。
什么时候把成员变量修饰为static?
当成员变量需要被类的所有对象访问时
什么时候把成员函数修饰为static?
当成员函数中没有用到所属类中的任何的非静态成员时
class Student {
String name;//实例成员变量
static String country = "CN";//类变量
public void show() {//实例成员函数
System.out.println(name + " " + country);
}
}
class Demo9 {
public static void main(String[] args) {
Student stu = new Student();
stu.name = "Jack";
stu.show();
Student stu2 = new Student();
stu2.name = "Tom";
stu2.show();
System.out.println(Student.country);
}
}
(二十八)static关键字
标签:静态资源 student class 加载顺序 全局 rgs 成员函数 方法 void
原文地址:https://www.cnblogs.com/bgwhite/p/9375504.html