代码块,继承及final关键字

一、代码块
 代码块表示一个范围。在java语言中{}表示包含一个范围
 
 写在方法中(局部代码块)
  public void method1() {
   {
    int x = 100;// 局部代码块中的一个变量,使用后会立即释放
   }
   // 局部代码块外不能访问局部代码块内的变量
  }
  
 写在类中:1、构造代码块
   class ClassA {
    {
     System.out.println("构造代码块");// 优先于构造方法执行,且每new一个对象都会执行
    }
    public ClassA() {
    }
   }
 
   2、static代码块
   class ClassB {
    static {
     System.out.println("静态代码块");// 在加载字节码文件的时候加载,方法区中的静态区,加载一次
    }
   }
 
继承
 继承语法概述:
  之前写程序为了复用我们写在方法中,反复调用即可。但是随着方法变多,和方法的功能混杂,我们一组类似的方法抽取封装成一个类。
  类可以创建对象,且可以创建n个对象,类可以看成一个模板,是另一种复用。当我们学习面向对象之后让人烦恼的事情:类爆炸,程序员工作量瞬间增加
  在模板这个设计的角度来说可以运用中国古老的一种变成风格(活字印刷术),提醒了我们class,还能够进行更加灵活的复用:继承
 
 继承的格式:只能用在类上(子类,父类)
  父类:表现形式上,就是一个普通的类:class 类名
  子类:表现上是不同的类,类名的后面是要继承的父类:class 子类名 extends 父类名
  
 继承的好处:子类中,很多的方法,不用重复写,可以都写在父类中,可维护性好,复用
    弊端:耦合性增强
  
 继承中成员变量的特点:父类和子类的成员变量不相同(可以直接使用父子类中的成员变量)
      父类和子类的成员变量名相同了(this表示子类和super表示父类调用)
      举例:this.name(调用子类的属性姓名)super.age(表示调用父类的属性年龄)
  
   class A {
    int num = 30;
   }
   
   class B extends A {
    int num = 20;
    
    public void method() {
     int num = 10;
     System.out.println(num);
     System.out.println(this.num);   -------|在类的属性中去查找
     System.out.println(super.num);  -------|
    }
   }
 
 继承中构造方法的特点:
  子类在初始化的时候,先做父类的构造方法初始化,再做子类的构造方法(默认的子类方法中都是父类的无参数的构造方法)
  
  如果父类没有给我提供默认的无参数的构造方法:
   
   1、自己手动加载无参数的构造方法 
   2、用手动的方式调用父类有参数的构造方法
    class Fu {
     public Fu(String name) {
      // ...
     }
    }
    
    class Zi extends Fu {
     public Zi(String name) {
      super(name);
     }
    }
 
   3、在子类中使用this调用有参数的构造方法
    class Fu {
     public Fu(String name) {
      // ...
     }
    }
    
    class Zi extends Fu {
     public Zi() {
      // 注意由于Fu类中没有默认的构造方法了,只能通过this自己调用自己
      this("刘德华");// 不常用
     }
     
     public Zi(String name) {
      super(name);
     }
    }
 
 继承中成员方法的特点:
  如果方法名不相同,可以直接调用
  
  如果子类方法和父类的方法一模一样,那么子类覆盖父类的方法(叫重写),是给多态准备(明天将多态)就近原则
  
 重写:
  父类中的某个方法是最通用的,在业务逻辑中满足大部分需求,所以才放在父类中公用。
  子类的某个方法需要有自己的独特的特性,那么就要重写父类的方法了,但是重写的过程中,还是依然可以做父类的方法的调用super.方法名()。
  只需要做略微的变化就可以了,子类可以继承使用父类,还可以扩展父类的功能
  
 重载、重写的区别:
  首先要对这两个概念非常清楚
  重载是针对于一个类中方法的
   方法名字定义成一个是方便程序员使用,但是根据参数的方式自行匹配
  
  重写是针对于继承机制中的多个类的方法
   重写的目的,对父类的代码进行扩展,或者变化特别大完全覆盖 
 
 
final关键字
 final:终结的终止的最终的
 
 final局部变量:
  还能否二次赋值?(不能,用final修饰的变量类型其实发生了质的变化:自定义常量)
  字面值常量:基于基本数据类型
  
 final方法:
  不能被子类重写,可以被子类使用
  
 final类:
  所有的方法都不想被重写(安全),当前类用final标识
  
 
 final如果将变量变成常量:
  final后面的变量名:单个单词全大写final double PI = 3.1415926;、多个单词全大写且用下划线连接final int MIN_INIT_NUMBER = 1;
  final修饰后的常量是依附于对象的,而我们希望加上public static 依附于类。通过类名.常量名直接访问
   
 final修饰的是基本数据类型:不能赋值
   修饰的是引用数据类型:能赋值,不能更改其引用地址
  
  
  
  
  
  
  
使用优化算法,以优化VMD算法的惩罚因子惩罚因子 (α) 和分解层数 (K)。 1、将量子粒子群优化(QPSO)算法与变分模态分解(VMD)算法结合 VMD算法背景: VMD算法是一种自适应信号分解算法,主要用于分解信号为不同频率带宽的模态。 VMD的关键参数包括: 惩罚因子 α:控制带宽的限制。 分解层数 K:决定分解出的模态数。 QPSO算法背景: 量子粒子群优化(QPSO)是一种基于粒子群优化(PSO)的一种改进算法,通过量子行为模型增强全局搜索能力。 QPSO通过粒子的量子行为使其在搜索空间中不受位置限制,从而提高算法的收敛速度与全局优化能力。 任务: 使用QPSO优化VMD中的惩罚因子 α 和分解层数 K,以获得信号分解的最佳效果。 计划: 定义适应度函数:适应度函数根据VMD分解的效果来定义,通常使用重构信号的误差(例如均方误差、交叉熵等)来衡量分解的质量。 初始化QPSO粒子:定义粒子的位置和速度,表示 α 和 K 两个参数。初始化时需要在一个合理的范围内为每个粒子分配初始位置。 执行VMD分解:对每一组 α 和 K 参数,运行VMD算法分解信号。 更新QPSO粒子:使用QPSO算法更新粒子的状态,根据适应度函数调整粒子的搜索方向和位置。 迭代求解:重复QPSO的粒子更新步骤,直到满足终止条件(如适应度函数达到设定阈值,或最大迭代次数)。 输出优化结果:最终,QPSO算法会返回一个优化的 α 和 K,从而使VMD分解效果最佳。 2、将极光粒子(PLO)算法与变分模态分解(VMD)算法结合 PLO的优点与适用性 强大的全局搜索能力:PLO通过模拟极光粒子的运动,能够更高效地探索复杂的多峰优化问题,避免陷入局部最优。 鲁棒性强:PLO在面对高维、多模态问题时有较好的适应性,因此适合海上风电时间序列这种非线性、多噪声的数据。 应用场景:PLO适合用于优化VMD参数(α 和 K),并将其用于风电时间序列的预测任务。 进一步优化的建议 a. 实现更细致的PLO更新策略,优化极光粒子的运动模型。 b. 将PLO优化后的VMD应用于真实的海上风电数据,结合LSTM或XGBoost等模型进行风电功率预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值