static(类共享)
1、无论类最终实例化多少对象,静态成员都共用同一块静态内存空间
2、静态成员的生命周期:静态成员从类第一次加载时就产生一直到该类没有任何对象被使用,类销毁时,静态成员资源释放
3、普通成员从对象实例产生时,相关成员产生,对象销毁时,成员进行资源释放
有静态成员方法、静态成员属性、不能有静态类,不能在方法内部局部变量定义前添加static,
成员属性中可以有静态接口,静态抽象类,通过向上转型初始化对象。但不能用static修饰接口、抽象类
普通方法与静态方法对比
**1、普通成员变量
2、方法调用
3、静态成员变量
(静态方法中不能使用this,this代表当前类实例,static代表类共享冲突,静态变量与静态方法属于一类,可直接访问)
引用数据类型的静态成员变量:在内存中有且只有一个对象
private static SingleMode singleMode;
4、静态方法不能直接访问同一个类中的非静态成员,只能直接调用同一个类中的静态成员
解决不能在静态方法中调用非静态成员的方法(通过对象实例化后,对象、成员方法的方式访问非静态成员)?
静态代码块
普通代码块
出现在方法里,顺序执行
构造代码块
在类中直接定义,创建对象时调用,优先于构造方法执行
静态代码块
类加载时调用,优先于构造代码块,无论类实例多少次,只执行一次,仅希望执行一次的代码可放到静态代码块中。只能调用静态成员
调用非静态成员
代码块中的局部变量
代码块是一个独立的作用空间,可定义重复的变量,因为代码块结束时,局部变量会随着消失,作用周期仅限于代码块
方法中的变量的作用范围从它定义的位置开始到方法结束的位置结束,因此不允许同名变量