类变量
- static变量是同一个类所有对象共享
- static类变量,在类加载的时候就生成了。
- 类变量的访问依然要遵守访问权限
类方法
- 可以通过类名直接访问
- 类方法里不能使用this,super。
- 静态方法只能访问静态成员。
main
main方法是java虚拟机调用
代码块
静态代码块在类的加载时执行,普通代码块是构造器补充,代码块的调用顺序优先于构造器,如果只是使用类的静态成员,普通代码块不会被执行
类的加载
类只会被加载一次
- new创建对象时
- 该类的子类被创建
- 使用类的静态方法或属性。
- 使用该子类的静态方法或属性
类的调用顺序
静态代码块和静态方法,优先级一样,看前后顺序
普通代码块和普通属性初始化,优先级一样,看前后顺序
super先于普通代码块
饿汉式
提供唯一接口并只能创建一个对象
public class HunryMan {
private String name;
private static HunryMan tietie=new HunryMan("tietie");
private HunryMan(String name){
this.name=name;
}
//静态方法发里只能调用静态变量
public static HunryMan single(){
return tietie;
}
@Override
public String toString() {
return "HunryMan{" +
"name='" + name + '\'' +
'}';
}
}
懒汉式
在饿汉式的基础上改进,只有调用唯一的接口方法才会创建对象(调用其他静态方法和变量不会创建对象)
public class LaztMan {
private String name;
private static LaztMan tietie;
private LaztMan(String name){
this.name=name;
}
public static LaztMan getLaztMan() {
if (tietie == null)
tietie = new LaztMan("tietie");
return tietie;
}
@Override
public String toString() {
return "LaztMan{" +
"name='" + name + '\'' +
'}';
}
}