赞
踩
static的概念
是修饰符, 表示静态的, 可以用来修饰类和成员变量已经方法;
可修饰的范围
可以修饰的范围有成员变量, 普通方法, 内部类;
class People{
static String name; // 修饰成员变量
public People(String n){
// 构造方法不能被static修饰
name = n;
}
public static void action(){
// 修饰普通方法
System.out.print("可以修饰普通方法");
}
static class Inner{
// 内部类
}
}
不可以修饰的范围:
修饰构造方法, 外部类时会报错:
Illegal modifier for the class Student; only public, abstract & final are permitted, 表示错误地使用修饰符来修饰, 只能通过 public, abstract , final are permitted修饰
特点
static修饰的成员(成员变量, 普通方法, 内部类)在类被加载的时候, 会加载到静态区。会被所有该类实例的对象共享, 所以在这里一般定义变量不建议使用static修饰成员变量(除非专门的使用场景, 下面有介绍)。
不建议使用static修饰成员变量的原因:
因为程序的执行流程的关系, 当需要用到一个类的时候(或者是创建对象的时候), 程序会去加载该类的字节码文件。这个时候,程序会先判断当前字节码文件是否有static修饰的成员, 如果有的话就会先将该static修饰的成员加载到静态区, 分配一个地址, 然后再加载字节码文件, 加载的字节码文件的时候会持有该静态成员的地址。
public class PeopleTest {
/**
* @author huaixiao
* 测试类 static
*/
public static void main(String[] args) {
People p1 = new People("张三");
System.out.println(p1.name); //张三
People p2 = new People("李四");
System.out.println(p1.name); // 李四
System.out.println(p2.name); // 李四
}
}
得到的结果如下 , 说明static修饰的成员变量, 共享数据, 永远以最后修改的那一次为准
张三
李四
李四
使用场景
1. 需要被所有对象共享的一些数据的时候才使用, 例如 火车票数, 全国各地都可以抢, 但是数据是共享的
2. 不想被多次创建对象的时候, 因为创建对象会消耗资源
3. 单例模式
4. 还有就是与public static final 连用, 作为全局变量等
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。