首页 > 其他分享 >动手动脑3

动手动脑3

时间:2023-10-14 17:55:46浏览次数:26  
标签:初始化 InitializeBlockClass obj 动手 int 动脑 field public

无法编译

原因:没有默认构造
推出结论:当你给类提供了一个自定义的构造方法,导致系统不在提供默认构造方法了,需要自己提供

初始化

测试

  package org.example;
   
  public class InitializeBlockClass {
   
  public int field=100;
  {
  field=200;
  }
  public InitializeBlockClass(int field) {
  this.field = field;
  }
   
  public InitializeBlockClass() {
  }
   
  public static void main(String[] args) {
  InitializeBlockClass obj=new InitializeBlockClass();
  System.out.println(obj.field);
  obj=new InitializeBlockClass(300);
  System.out.println(obj.field);
  }
  }

测试结果

  package org.example;
   
  public class InitializeBlockClass {
  {
  field=200;
  }
  public int field=100;
   
  public InitializeBlockClass(int field) {
  this.field = field;
  }
   
  public InitializeBlockClass() {
  }
   
  public static void main(String[] args) {
  InitializeBlockClass obj=new InitializeBlockClass();
  System.out.println(obj.field);
  obj=new InitializeBlockClass(300);
  System.out.println(obj.field);
  }
  }

测试结果

可见顺序也能队初始化有影响,以后一定避免这种多次初始化的操作

Java字段初始化的规律可以总结如下:

  1. 显式初始化:字段可以在声明时进行显式初始化。例如:
  int myField = 42;
  1. 构造器初始化:字段可以在类的构造器中进行初始化。这是最常见的字段初始化方式。当对象被创建时,构造器会执行相应的初始化操作。例如:
  public class MyClass {
  int myField;
   
  public MyClass() {
  myField = 42;
  }
  }
  1. 实例初始化块:字段可以在实例初始化块中进行初始化。实例初始化块在每次创建对象时都会执行,可以用来进行复杂的初始化逻辑。例如:
  public class MyClass {
  int myField;
   
  {
  // 实例初始化块
  myField = 42;
  }
   
  public MyClass() {
  // 构造器
  }
  }
  1. 静态初始化块:静态字段可以在静态初始化块中进行初始化。静态初始化块在类加载时执行,只执行一次。例如:
  public class MyClass {
  static int myStaticField;
   
  static {
  // 静态初始化块
  myStaticField = 42;
  }
  }
  1. 默认初始化:如果字段没有显式初始化,它们会被Java自动初始化为默认值。例如,整数字段会被初始化为0,布尔字段会被初始化为false,引用类型字段会被初始化为null。

  2. 构造器初始化的优先级高于默认初始化:如果字段同时进行了构造器初始化和默认初始化,构造器初始化会覆盖默认初始化的值。

  3. final字段:final字段必须在声明时或构造器中进行初始化,并且一旦初始化后不能再修改其值。

标签:初始化,InitializeBlockClass,obj,动手,int,动脑,field,public
From: https://www.cnblogs.com/yuanxinglan/p/17764480.html

相关文章

  • 动手学深度学习--卷积神经网络
    frompixiv从全连接层到卷积现在我们给自己一个任务:用神经网络去识别区分出百万级像素的不同图片回顾一下以前:我们是通过多层感知机来实现的,当面对一张图片的时候,我们将其看成一个像素点矩阵,然后将其从二维拉直到一维上,再通过MLP进行训练但是我们这次的任务每张照片具有百......
  • 动手动脑03
    1. 实际操作了一下,发现确实super基类构造法只能在子类构造法前面。放在后面会报错。 2.如果父类的构造方法调用了子类的方法或使用了子类的属性,那么在父类构造方法执行时,子类可能还没有被完全初始化,这将导致运行时错误。因此,不能反过来调用父类的构造方法。必须在子类的......
  • 10.12(动手动脑)
    子函数的创建,父函数构造函数的实现情况packagehomework;classGrandparent{publicGrandparent(){System.out.println("GrandParentCreated.");}publicGrandparent(Stringstring){System.out.println("GrandParent......
  • 10.13动手动脑
       结论:      ......
  • Java动手动脑
    继承条件下的构造方法调用输出结果为 首先构造基类。通过super调用基类构造方法,必须是子类构造方法中的第一个语句。为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?答:子类的构造方法在运行之前必须调用父类的构造方法,是因为子类继承......
  • 动手动脑
    1.  实际操作了一下,发现确实super基类构造法只能在子类构造法前面。放在后面会报错。2. 如果父类的构造方法调用了子类的方法或使用了子类的属性,那么在父类构造方法执行时,子类可能还没有被完全初始化,这将导致运行时错误。因此,不能反过来调用父类的构造方法。必须在子类......
  • 《动手学深度学习 Pytorch版》 8.6 循环神经网络的简洁实现
    importtorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)8.6.1定义模型num_hiddens=256rnn_layer=nn.RNN(len(......
  • 动手学深度学习——深度学习计算
    frompixiv层和块为了实现这些复杂的网络,我们引入了神经网络块的概念。块(block)可以描述单个层、由多个层组成的组件或整个模型本身。从编程的角度来看,块由类(class)表示。它的任何子类都必须定义一个将其输入转换为输出的前向传播函数,并且必须存储任何必需的参数。于是我们......
  • 《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现
    %matplotlibinlineimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)#仍然使用时间机器数据集......
  • 《动手学深度学习 Pytorch版》 8.4 循环神经网络
    8.4.1无隐状态的神经网络对于无隐藏装态的神经网络来说,给定一个小批量样本\(\boldsymbol{X}\in\mathbb{R}^{n\timesd}\),则隐藏层的输出\(\boldsymbol{H}\in\mathbb{R}^{n\timesh}\)通过下式计算:\[\boldsymbol{H}=\phi(\boldsymbol{XW}_{xh}+\boldsymbol{b}_h)\]\(\phi\)......