Static
类变量属于整个类,当系统第一次准备使用该类时,系统会为该类分配内存空间,类变量开始生效,直到改类被卸载,该类的类变量所占有的内存才被系统的垃圾回收机制会后。类变量随着类的加载而加载。
静态初始化块也是类成员的一种,静态初始化块用于执行类初始化动作。在类的初始化阶段,系统会调用该类的静态初始化代码块来对类进行初始化。一旦该类初始化结束后,静态初始化块永远不会获得执行的机会。
对static关键字而言,有一条非常重要的规则:类成员(包括方法、初始化块、内部类和枚举类)不能访问实例成员(包括成员变量、方法、初始化块、内部类和枚举类)。因为类成员时属于类的,类成员的作用域比实例成员的作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类成员访问实例对象会将引起大量错误。
类成员的特点:
1.随着类的加载而加载
2.优先于对象存在
3.修饰的成员,被所有对象所共享
4.访问权限允许时,可不创建对象,直接被类调用
5.静态方法中不能调用非静态水性和非静态方法
6.静态方法好着呢个不能使用this和super,因为类加载时,this和super不存在
类变量的调用:类名.类变量名
何时使用static?
static修饰属性:一般修饰常量
static修饰方法:一般为工具类里的方法
单例模式
提高系统性能(频繁地创建对象、回收对象所带来的系统开销问题)
方式:1.私有化构造器
2.提供一个类变量来缓存曾经创建的实例
3.提供一个静态方法返回实例
饿汉式:(线程安全的)
class Bank{
//1.私有化构造器 - 不能再通过构造器创建对象了
private Bank(){}
//2.创建对象。私有化并使用static修饰
private static Bank bank = new Bank();
//3.提供一个公共的get方法返回当前类的对象
public static Bank getInstance(){
return bank;
}
}
懒汉式:(线程不安全的,延缓了对象的创建节省了内存)
class Computer{
//1.私有化构造器
private Computer(){}
//2.提供该类的实例的声明,私有化并使用static修饰
private static Computer c = null;
//3.提供一个公共的get方法返回当前类的对象,并在方法中创建该类的对象
public static Computer getInstance(){
if(c == null){
c = new Computer();
}
return c;
}
}
final
1.final标记的变量(成员变量或局部变量)即称为常量。必须被显示赋值,名称大写,且只能被赋值一次,编译时初始值已经被确定下来。
2.final标记的方法不能被子类重写。(如Object类中的getClass())
3.final标记的类不能被继承。提高安全性,提高程序的可读性。(如java.lang.Math)
不可变类:创建该类的实例后,该实例的实例变量是不可改变的,Java提供的8个包装类和java.lang.String类都是不可变类
例如:Double d = new Double(6.5);
String str = new String(“Hello”)
this
1.this表示当前对象,可以调用类的属性、方法和构造器
2.使用this()必须放在构造器的首行
3.使用this调用本类中其它的构造器,至少有一个构造器是不用this的。
super
1.super可用于访问父类中定义的属性
2.super可用于调用父类中定义的成员方法
3.super可用于在子类构造器中调用父类的构造器