设计模式:解决某一种问题的一种思想。是一种行之有效的解决方式
23种模式
单例设计模式。
解决的问题:保证一个类的对象在内存中的唯一性
应用场景:多个程序都在操作同一个配置文件时,需要程序A操作后的结果,
程序B要知道并继续基于A操作后的结果进行操作。
前提是 数据都存储在配置文件对象中,要求程序A和程序B操作的配置文件对象是同一个。
保证一个类只能产生一个对象:
思路:
1,不让其他程序new 对象
2,在本类中自己new一个对象
3,对外提供让其他程序获取该对象的方式
步骤:
1,将类中的构造函数私有化
2,在本类中new一个对象
3,定义一个方法返回该对象 ,之所以定义访问,就是为了可控
private static final A a=nw A();
private A(){}
public static A getInstance(延迟加载)
{
return s;
}
另一种形式:
懒汉式: 用到方法再创建对象 ()
private static A a=null;
private A(){}
public static A getInstance()
{
if(a==null)
a=new A();
return s;
}
继承:
1,提高了代码的复用性
2,让类与类之间产生了关系,为第三个多态提供了前提
Java支持单继承,不直接支持多继承
单继承:一个类只有一个父类
多继承:一个类可以有多个父类,Java不直接支持
优势: 可以让子类具备更多的功能
弊端:调用的不确定性
多层次继承:
先看顶层
使用时看最下层
什么时候定义继承?
当事物之间存在着所属关系时,可以通过继承来体现这个关系。
成员变量:
当子父类中出现了同名的成员变量,用关键字super来区分。
this:代表的是本来的引用
super:代表的是父类的那片空
子父类的方法的特点:
特殊情况:
当子父类中出现一模一样的方法时,
子类对象运行的是子类的方法。
这种特殊情况:称之为覆盖 override 复写 重写
覆盖:返回值类型,函数名,参数列表都一样
覆盖使用的注意事项:
1,子类方法覆盖父类方法时,必须保证权限大于父类权限
2,静态只能覆盖静态,或者被静态覆盖·
子类的实例化过程:
创建子类对象时,父类中的空参数构造函数也运行了
因为子类中所有的构造函数的第一行默认都有一个隐式的super();语句。
调用本类中的构造函数用this(实参列表)语句,,调用父类中的构造函数用super(实参列表);
子类继承父类,所以要对父类进行初始化。
注意:当父类中没有空参数构造函数时,子类需要通过显示定义super语句指定要访问的父类中的
构造函数。
注意:用来调用父类构造函数的super语句在子类构造函数中必须定义在第一行,因为父类的初始化要先完成
问题:
1,this和super用于调用构造函数,可以同时存在吗?
不可以,因为他们只能定义在第一行。
2,为什么要定义在第一行?
因为初始化动作要先执行
final关键字 最终。
1,final修饰符,可以修饰类,修饰方法,修饰变量
2,final修饰的类不能被继承
3,final修饰的方法不可以被覆盖
4,final 修饰的变量是一个常量,只能被赋值一次
当使用的数据不变时,需要定义阅读性强的名称来表示该数据,并将该shujufinal化,
被final修饰的变量 名称规范是:所以字母都大写,如果由多个单词组成,需要通过_进行分隔
全局常量:public static final int num=5;