目录
1.final和常量
final
final关键字可以修饰:类,方法,变量
修饰类:该类被称为最终类,特点是不能被继承
修饰方法:该方法为最终方法,不能被重写
修饰变量:该变量有且只能被赋值一次
final修饰基本类型的变量,变量存储的数据不能被改变。
final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。
常量
使用了 static final 修饰的成员变量就被称为常量
static静态的 final最终的,属于类的一个常量。
作用:常用于记录系统的配置信息
注意:命名规范用大写
牵一发而动全身!!!
程序编译后,常量会被宏替换。
2.单例类
我们可以把这些特殊类看成一个设计模式解决了特定的问题。
学习这些特殊类
学习思路:
解决什么问题?
这种设计模式怎么写?
单例设计模式
作用:确保某个类只能创建一个对象
单例什么叫单例就是只有一个嘛。我们用这个类的一个对象做事情。
打个比方
这个是不是一个任务管理器,每次打开它都只有一个页面,重复点击也只有一个页面,这一个页面窗口相当于一个对象,在这个对象里面我们可以进行方法和属性操作。
还有比如
这个也是一个窗口,点击多少次也只有一个窗口。在这敞口里面可以做方法。
写法
(1)
1.私有化构造器。在外面不能创建对象
2.定义一个private静态对象
3.定义一个类方法返回对象
public class A{
private A(){}
private static A a = new A();
public static A getInsatnce(){
return a;
}
}
(2)
1.私有化构造器。在外面不能创建对象
2.定义一个private final静态对象
public class A{
private A(){}
private static final A a = new A();
}
(3)
用对象时,才开始创建对象。
1.私有化构造器。在外面不能创建对象
2.定义一个静态变量用于存储对象(用于本类唯一对象)
3.定义一个静态方法返回对象
public class A{
private A(){}
private static final A a ;
public static A getObject(){
if(a==null){
a = new A();
}
return a;
}
}
3.枚举类
写法
修饰符 enum 枚举类名{
名称1,名称2……;
其他成员……
}
特点
枚举类中的第一行只能写枚举类的对象名称,且要用逗号隔开
这些名称,本质是常量,每个常量都记住了枚举类的一个对象
适合场景
枚举类很适合做信息分类和标志
这个可以跟按键配套传参进行移动。
4.抽象类
抽象类的注意事项和特点
在java中有一个关键字叫abstract,抽象的意思,可以用它修饰类、成员方法。
abstra修饰类,这个类就是抽象类。abstract修饰方法,这个方法就是抽象方法。
1.抽象类 不一定要有抽象方法,抽象方法一定要有抽象类
2.类的成员可以跟正常类一样。
3.抽象类不能创建对象,仅仅作为一种特殊的父类,让子类继承并实现。
4.一个类继承抽象类,必须重写抽象类的全部抽象方法,否则这个子类也必须定义成抽象类(没必要)
使用抽象类的好处
父类如果知道子类都跟他做的方法不一样,那么 他就变成抽象类,声明抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态。
模板方法设计模式
场景:比如写一篇作文,标题,开头,结尾都一样,正文不同。
就相当于:
public class A{
一样;
不一样;
一样;
}
public class B{
一样;
不一样;
一样;
}
在父类把一样的写了,不一样的就搞一个抽象方法只声明,剩下的留给子类去重写,然后调用父类的方法,重写部分会自动找到对象的重写部分。就节省了代码,提高复用代码。
我们也可以
final修饰模板方法,因为模板方法是给子类用的,子类重写的只是里面的一部分内容,代码更优美,且更可读,一旦被重写了模板方法,那么这个方法就失效了。
小结
1.模板方法设计模式解决了什么问题?
解决了方法中重复代码的问题。
2.模板方法设计模式应该怎么写?
定义一个抽象类
在里面定义两个方法,一个是模板方法,一个是抽象方法
3.模板方法建议使用什么关键字修饰?为什么?
建议用final关键字修饰模板方法,不能重写,直接被子类使用。