Java(三)
static
所有static修饰的数据,正规的访问方式是:类名.
static修饰的变量叫做静态变量
static修饰的方法叫做静态方法
什么情况下声明成静态变量?
所有的对象都有这个特征,并且这个特征所对应的值都是相同的。
没必要声明成成员变量,因为浪费内存。
应该声明成静态变量,在方法区中只存储一份,让所有的对象共享这一份数据。
多数的工具类中的方法都是静态的,目的是方便调用。
static修饰的数据被称作“静态的”
使用static关键字可以定义静态代码块。
静态代码块在类加载阶段执行,并且只执行一次,是自上而下的顺序依次执行。
实例代码块
每调用一次构造方法,则实例代码块就会执行一次。
实例代码块在构造方法调用之前执行。
实例代码块也是自上而下的顺序执行。
单例模式:
单例模式的特点/主要解决的问题:保证JVM中该类型的java对象只有一个
优点:节省内存
缺点:单例模式中因为构造方法私有化,所以单例模式无法被继承。因为在子类构造对象的时候必须使用父类中的构造方法。
//饿汉式单例模式(在类加载阶段对象已经创建。)
public class Customer{
//静态变量
private static Customer c = new Customer();
//单例模式第一步:将所有的构造方法私有化。
//目的是:让外部程序不能直接调用构造方法创建对象。
//因为只要构造方法执行,就会有一个新对象诞生。
private Customer(){}
//对外提供一个公开的获取Customer类型对象的方法。
public static Customer getInstance(){
return c;
}
}
//懒汉式单例模式
public class Customer{
//静态变量
private static Customer c;
//单例模式第一步:将所有的构造方法私有化。
//目的是:让外部程序不能直接调用构造方法创建对象。
//因为只要构造方法执行,就会有一个新对象诞生。
private Customer(){}
//对外提供一个公开的获取Customer类型对象的方法。
public static Customer getInstance(){
if(c==null){
c = new Customer();
}
return c;
}
}
main方法调用
class T{
public static void main(String[] args){
//Customer c = new Customer();
Customer c1 = Customer.getInstance();
Customer c2 = Customer.getInstance();
System.out.println(c1==c2);
}
}
浙公网安备 33010602011771号