Day2
一. 静态成员和实例成员的区别:
1.访问方式不同
静态成员通过类名访问 类名Factor.create类名();
静态方法可以直接访问静态成员,不可以直接访问实例成员,必须要先new出对象,通过对象来访问
实例成员通过对象来访问 先new出对象 对象.方法名();
实例方法既可以直接访问静态成员,也可以访问实例成员
2.内存加载机制不同
静态成员在程序运行时,被加载到静态区域中
实例成员在执行时遇到new时,就把对应的内容加载到堆区域中
3.生命周期不同
静态成员在退出运行时,从内存中被销毁
实例成员要根据java的垃圾回收机制来决定何时销毁
二. 单例设计模式
在程序运行过程中,某个类的对象只允许被创建一次
1.构造方法私有
2.声明静态的.当前类类型的属性
3.声明静态方法:
返回值:当前类类型
在方法体内:判断第二步的静态属性是否为null
懒汉模式和饿汉模式
懒汉模式:在程序运行后,并没有立即去判断play是否为null,并创建对象
而是在执行到getInstance()方法时,才去判断并创建
饿汉模式:在程序运行后,立即new 创建对象
【选择】
如果使用单例对象比较频繁,且在程序运行后立刻就使用单例对象,建议使用饿汉模式
如果使用单例对象的频率较低,为了节省内存空间,建议使用懒汉模式
三.抽象方法,抽象类
抽象方法没有方法体,{}没有,并且使用abstract修饰
**1.抽象方法所在的类一定是抽象类
2.子类继承父类后,一定要实现(重写)父类中所有的抽象方法,除非子类也是抽象的
3.抽象方法约束了其子类必须实现(重写)父类中的抽象方法, 规范、约束的作用
特点:
1、抽象类不能被实例化 不能被new
2、抽象类有构造方法 子类构造方法中可以通过super调用父类构造方法进行属性的初始化
3、抽象类中可以有抽象方法,也可以有非抽象方法
第一种方案:
public class 父类{
//虚方法
public void test(){
}
}
public class 子类1 extends 父类{
//可以重写父类中的虚方法,也可以不重写
}
第二种:
public abstract class 父类{
public abstract void test();
}
public class 子类1 extends 父类{
public void test(){
//重写代码
}
}
部分总结