面向对象中static修饰的内容隶属于类而不是属于对象
1. static用来修饰成员变量:
- 被static修饰的成员变量叫静态成员变量,如果没有被修饰叫非静态成员变量
- 定义变量后只运行一次代码的初始化操作,之后会跳过该初始化操作
- 设置静态全局变量一般是为了解决数据共享问题
- 静态变量是属于这个类,而不是属于某个对象的
1.1. 静态成员变量的访问方式:
- 用对象进行访问:对象名.变量名
- 可以通过类名来访问:类名.变量名
1.2. 需要注意的地方:
- 只有数据需要共享时才需要static来修饰
- 只有静态变量才能有类名访问
- 局部变量不允许被static修饰
2. static用来修饰方法:
2.1. 静态方法的访问方式:
- 用对象进行访问:对象.方法名()
- 可以通过类名来访问:类名.方法名()
2.2. 需要注意的地方:
- 静态方法可以用对象或类名调用,非静态方法只能用对象调用
- 静态方法可以访问静态成员变量,不能访问非静态的成员变量,非静态的方法中可以访问任何成员变量
- 静态方法可以直接访问静态方法,但是不能访问非静态方法
- 静态方法中不允许出现this关键字和super关键字的
3.特点:静态的数据早于非静态的数据存在于内存中
面试题:是否可以在static环境中访问非static变量?
- static变量在Java中是属于类的,它在所有的实例中的值是一样的,当类被Java虚拟机载入的时候,会对static变量进行初始化,如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没跟任何实例关联上
- 因为静态的成员属于类,随着类的加载而加载到静态方法区内存,当类加载时,此时不一定有实例创建,没有实例,就不可以访问非静态的成员