黑马程序员_内部类

当描述事物时,事物的内部还有事物,那么该事物用内部类来描述,因为内部事物在使用外部事物的内容。


内部类访问规则:

1. 内部类可以访问外部类任何成员,包括私有化成员;

之所以可以直接访问,是因为内部类中持有了一个外部类的引用,格式: 外部类名.this

2. 外部类要访问内部类成员,必须建立内部类对象


访问格式:

  1. 当内部类在外部类的成员位置上,而且非私有,可以在外部其他类中建立内部类对象。
  2. 当内部类在外部类的成员位置上,就可以被成员修饰符修饰,例如private(封装内部类)static(当内部类静态后,内部类只能访问外部类的静态成员,出现了访问局限)
  • 假设内部类静态,外部类非静态,调用内部类非静态成员方法: Outer.Inner().func();别的情况以此类推!
  • 注意: 当内部类中定义了静态成员,该内部类必须是静态的!
  • 注意2: 当外部类中的静态方法访问内部类时,该内部类也必须是静态的
内部类在成员位置范例:
class Outer
{
  private int x = 3;
  
  class Inner
  {
    void func()
    {
      System.out.println(x);    //内部类可以直接访问外部类成员
    }
  }
  
  void method()
  {
    Inner in = new Inner();   //外部类需要建立内部类对象才能访问内部类
    in.func();
  }
}

class InnerDemo
{
  public static void main(String[] args)
  {
    Outer out = new Outer();
  out.method();
  
  //直接建立内部类对象:
  Outer.Inner in = new Outer().new Inner();
  in.func();
  }
}

3. 内部类定义在 局部位置
  • 不可以被成员修饰符修饰;
  • 可以直接访问外部类中的成员,因为还持有外部类的引用;但是不可以访问所在局部中的局部变量,除非其有final修饰

内部类在局部位置范例(注意final):

class Outer
{
  void method(final int a)
  {
    final int x = 3;
    //局部位置上的内部类:
    class Inner
    {
      void func()
      {
        System.out.println("x = " + x + " a = " + a);  //调用所在局部的变量x与a
      }
    }
    new Inner().func();  //在外部调用内部类需创建内部类对象
  }
}

class InnerDemo2
{
  public static void main(String[] args)
  {
    new Outer().method(1);
  }
}


匿名内部类

1. 匿名内部类其实就是内部类的简写格式;

2. 匿名内部类必须要继承一个类或者实现接口;

3. 匿名内部类格式:

new 父类或者接口(){定义子类内容}

4. 匿名内部类是一个匿名子类对象

5. 匿名内部类的方法最好不超过三个,因为本来是用来简化书写的。

示例(代码中匿名内部类部分替代了被注释的部分):

//抽象类(父类)
abstract class AbsClass
{
  abstract void show();
}

class Outer
{
/*
  class Inner extends AbsClass
  {
    void show()
    {
      System.out.println("show");
    }
  }
*/
  void func()
  {
    //new Inner().show();
    //匿名内部类(子类)对象:
    new AbsClass()            //父类名
    {
      void show()             //父类方法复写
      {
        System.out.println("show");
      }

      void show1()            //子类自己的方法
      {
        System.out.println("show1111");
      }
    }.show();               //方法调用
  }
}

class AnonymousInnerClassDemo
{
  public static void main(String[] args)
  {
    new Outer().func();
  }
}



主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值