模板设计模式
抽象类存在意义就是被子类继承,然后重写内部的抽象方法,体现的就是模板设计模式
设计模式:
被一套反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结,使用了设计模式是为了可重用代码,让代码更容易让他人理解,保证代码的可靠性,程序的重用性
白话文:简单来说 就是一个好的编码风格,并不是技术点
不同设计模式有不同的效果,具体先说下模板设计模式
例子:就比如说是一个作文模板,给了开头,和结尾,填写中间的内容,这是我所理解的模板设计模式
模板设计模式:
把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法,让使用模板的类(继承抽象方法的类)去重写抽象方法实现需求
实例:
定义一个父类:
public abstract class template {
public void write(){
System.out.println("我的梦想做一个技术大牛");
body();
System.out.println("我i会成功的");
}
public abstract void body();
}
定义一个子类继承他的方法 因为是抽象方法 所有要重写body里边的内容,子类去填充内容
public class test extends template{
@Override
public void body() {
System.out.println("一点点积累,一点点学习");
}
}
使用测试类进行测试
public class writer {
public static void main(String[] args) {
test witerr=new test();
witerr.write();
}
}
输出结果:
我的梦想做一个技术大牛
一点点积累,一点点学习
我i会成功的
模板设计模式的优势,模板已经定义了通用结构,使用者只需要关心自己需要实现的功能即可
final关键字
模板方法一般是去定义骨架(结构),是不允许更改的
假设子类重写了这个方法会有什么后果呢?
把代码逻辑打乱,不是我们想要的东西
final关键字是最终的意思,可以修饰(方法,变量,类)
final修饰的特点
修饰方法:表示该方法是最终方法,不能被重写
修饰变量:表明该变量是常量,不能被再次赋值
基本数据类型:不能被更改
应用数据类型:内存中的内存地址不能被更改,但是可以更改属性值
修饰类:表明该类是最终类,不能被继承,没有子类
定义一个父类:
public abstract class template {
public final void write(){
System.out.println("我的梦想做一个技术大牛");
body();
System.out.println("我i会成功的");
}
public abstract void body();
}
定义一个子类继承他的方法 因为是抽象方法 所有要重写body里边的内容,子类去填充内容
public class test extends template{
@Override
public void body() {
System.out.println("一点点积累,一点点学习");
}
}
使用测试类进行测试
public class writer {
public static void main(String[] args) {
test witerr=new test();
witerr.write();
}
}
小提一下常量命名规范:如果是一个单词,所有字母大写,如果是多个单词,所有字母大写,但是中间需要使用_分隔
例如:
final int MAX=10;
final int MAX_VALUE=20;
注意:final修饰成员变量,初始化时机
1.在创建的时候,直接给值
2.在构造方法结束之前,完成赋值
代码块:
在Java中,使用[]括起来的代码被称为代码块
分类:
局部代码块
构造代码块
静态代码块
实例:
局部代码块:
public class test {
/*
局部代码块
位置:在方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率
*/
public static void main(String[] args) {
{
int a=10;
System.out.println(a);
}
System.out.println(a);//错误访问不到,因为常量a的范围就在括号里边,不存在括号外边所以就会报错,当执行完代码块,a的内存就会消失,提高了内存利用率,释放了空间
}
}
构造代码块
public class test2 {
/*
构造代码块
位置:类中方法外定义
特点:每次构造执行的时候,都会执行改代码块中的内容,并且构造方法执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高了代码的复用性
*/
public static void main(String[] args) {
Student s=new Student();
Student s1=new Student(10);
}
}
class Student{
{
System.out.println("这是一个构造代码块");
}
public Student(){
System.out.println("空参数构造方法");
}
public Student(int a){
System.out.println("带参数构造方法");
}
}
打印内容:这是一个构造代码块
空参数构造方法
这是一个构造代码块
带参数构造方法
无论每次调用空参还是带参方法时,就要执行构造代码块的内容
静态代码块
public class test3 {
/*
静态代码块
位置:类中方法外定义
特点需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
作用:在类加载的时候做一些数据初始化的操作
*/
public static void main(String[] args) {
Person s=new Person();
Person s1=new Person(10);
}
}
class Person{
static {
System.out.println("我是静态代码块");
}
public Person(){
System.out.println("我是空参构造方法");
}
public Person(int a){
System.out.println("我是有参构造方法");
}
}
打印内容:我是静态代码块
我是空参构造方法
我是有参构造方法
分类:
局部代码块
位置:在方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率
构造代码块
位置:类中方法外定义
特点:每次构造执行的时候,都会执行改代码块中的内容,并且构造方法执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高了代码的复用性
静态代码块
位置:类中方法外定义
特点需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
作用:在类加载的时候做一些数据初始化的操作
今天早上六点多就被拉起来做核酸了 困得顶不住了 狗命要紧 今天先到这 有不懂的可以一起讨论 qq:3302473295